Expand my Community achievements bar.

SOLVED

DataSourcePool in WorkflowProcess

Avatar

Level 7

I am trying to dynamically connect to a datasource.  I'm using the AEM archetype.

 

public class mystuff implements WorkflowProcess {
private static final Logger log = LoggerFactory.getLogger(mystuff.class);
@reference
private DataSourcePool dsp;

@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap args) throws WorkflowException {

String dataSourceName = "MYDB";
DataSource ds = null;
Connection connection = null;
try {

if (dsp == null ) {
   log.info("DataSourcePool is null");
} else {
   for(Iterator<String> it = dsp.getAllJndiDataSourceNames().iterator(); it.hasNext();) {
      String dsname = it.next();
       log.info("Found datasource " + dsname);
    }
     log.info("Using DataSourcePool service lookup to get connection pool " + dataSourceName);
     ds = (DataSource) dsp.getDataSource(dataSourceName);

 

 

No datasources are being found and no connection made.  

I have the MYDB configured just fine.  I am using it in a Servlet by doing this annotation.

 

@reference(target = "(&(objectclass=javax.sql.DataSource)(datasource.name=MYDB))")
private DataSource ds;

 

However, i do not want to hard-code the datasource.name.  Any ideas!!??

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hi @crich2784 

 

Did you create the OSGi config with com.day.commons.datasource.jdbcpool.JdbcPoolService and added the DB details into it?

The JDBC Connections Pool service is a factory. Therefore, if you use a sling:OsgiConfig node to configure the connection service, the name of the node must include the factory service PID followed by -alias. The alias that you use must be unique for all configuration nodess for that PID. An example node name is com.day.commons.datasource.jdbcpool.JdbcPoolService-mydb

Please have a look here:

https://experienceleague.adobe.com/docs/experience-manager-64/developing/platform/jdbc.html?lang=en

Thanks!

View solution in original post

1 Reply

Avatar

Correct answer by
Community Advisor

Hi @crich2784 

 

Did you create the OSGi config with com.day.commons.datasource.jdbcpool.JdbcPoolService and added the DB details into it?

The JDBC Connections Pool service is a factory. Therefore, if you use a sling:OsgiConfig node to configure the connection service, the name of the node must include the factory service PID followed by -alias. The alias that you use must be unique for all configuration nodess for that PID. An example node name is com.day.commons.datasource.jdbcpool.JdbcPoolService-mydb

Please have a look here:

https://experienceleague.adobe.com/docs/experience-manager-64/developing/platform/jdbc.html?lang=en

Thanks!