Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
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!