-1

I am integrating oracle database with jbpm 5.4 instead of using its own h2 database. While creating KnowledgeSession it generates error as "A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property". I hope I have specified the driver class name in the persistence.xml. Issue Details are here below.
Can anybody please help me understand and resolve the issue?

jbpm 5.4
eclipse juno sr1
websphere 7
oracle 10g

Code for knowledgesession creation:

EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.jbpm.persistence.jpa" );
Environment env = KnowledgeBaseFactory.newEnvironment();
System.out.println(emf);
System.out.println(EnvironmentName.ENTITY_MANAGER_FACTORY);
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
env.set( EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager() );
env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );

Properties properties = new Properties();
properties.put("drools.processInstanceManagerFactory", "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory");
properties.put("drools.processSignalManagerFactory", "org.jbpm.persistence.processinstance.JPASignalManagerFactory");
KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(properties);
System.out.println("config ** "+config);
System.out.println("kbase ** "+kbase);
System.out.println("env ** "+env);
System.out.println("env transaction manager: "+env.get("drools.transaction.TransactionManager"));
StatefulKnowledgeSession newStatefulKnowledgeSession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase,config,env);

return newStatefulKnowledgeSession;

persistence.xml:

<persistence-unit name="org.jbpm.persistence.jpa" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>

<jta-data-source>jdbc/jbpmDS</jta-data-source>

<class>org.drools.persistence.info.SessionInfo</class>
<class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
<class>org.jbpm.persistence.processinstance.ProcessInstanceEventInfo</class>
<class>org.drools.persistence.info.WorkItemInfo</class>
<class>org.jbpm.process.audit.ProcessInstanceLog</class>
<class>org.jbpm.process.audit.NodeInstanceLog</class>
<class>org.jbpm.process.audit.VariableInstanceLog</class>      
<class>org.jbpm.task.Task</class>
<class>org.jbpm.task.Comment</class>
<class>org.jbpm.task.Attachment</class>
<class>org.jbpm.task.I18NText</class>
<class>org.jbpm.task.SubTasksStrategy</class>
<class>org.jbpm.task.Deadline</class>
<class>org.jbpm.task.Escalation</class>
<class>org.jbpm.task.Reassignment</class>
<class>org.jbpm.task.Notification</class>
<class>org.jbpm.task.BooleanExpression</class>
<class>org.jbpm.task.User</class>
<class>org.jbpm.task.PeopleAssignments</class>

<properties>   
    <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
    <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="hibernate.connection.url" value="jdbc:oracle:thin:@131.131.131.131:1521:abcd" />
    <property name="hibernate.connection.username" value="abcdef"/>
    <property name="hibernate.connection.password" value="abcdef"/>    
    <property name="hibernate.connection.autocommit" value="false"/>
    <property name="hibernate.max_fetch_depth" value="3"/>
    <property name="hibernate.hbm2ddl.auto" value="update" />
    <property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>

<persistence-unit name="org.jbpm.task">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>       

<class>org.jbpm.task.Attachment</class>
<class>org.jbpm.task.Content</class>
<class>org.jbpm.task.BooleanExpression</class>
<class>org.jbpm.task.Comment</class>
<class>org.jbpm.task.Deadline</class>
<class>org.jbpm.task.Comment</class>
<class>org.jbpm.task.Deadline</class>
<class>org.jbpm.task.Delegation</class>
<class>org.jbpm.task.Escalation</class>
<class>org.jbpm.task.Group</class>
<class>org.jbpm.task.I18NText</class>
<class>org.jbpm.task.Notification</class>
<class>org.jbpm.task.EmailNotification</class>
<class>org.jbpm.task.EmailNotificationHeader</class>
<class>org.jbpm.task.PeopleAssignments</class>
<class>org.jbpm.task.Reassignment</class>
<class>org.jbpm.task.Status</class>
<class>org.jbpm.task.Task</class>
<class>org.jbpm.task.TaskData</class>
<class>org.jbpm.task.SubTasksStrategy</class>
<class>org.jbpm.task.OnParentAbortAllSubTasksEndStrategy</class>
<class>org.jbpm.task.OnAllSubTasksEndParentEndStrategy</class>
<class>org.jbpm.task.User</class>
<class>org.drools.persistence.info.SessionInfo</class>
<class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
<class>org.jbpm.persistence.processinstance.ProcessInstanceEventInfo</class>
<class>org.drools.persistence.info.WorkItemInfo</class>

<properties>
    <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
    <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="hibernate.connection.url" value="jdbc:oracle:thin:@131.131.131.131:1521:abcd" />
    <property name="hibernate.connection.username" value="abcdef"/>
    <property name="hibernate.connection.password" value="abcdef"/>    
    <property name="hibernate.connection.autocommit" value="false"/>
    <property name="hibernate.max_fetch_depth" value="3"/>
    <property name="hibernate.hbm2ddl.auto" value="update" />
    <property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>

Error Log:

SystemOut     O com.ibm.ws.persistence.EntityManagerFactoryImpl@3fb23fb2
SystemOut     O drools.persistence.jpa.EntityManagerFactory
SystemOut     O config ** org.drools.SessionConfiguration@665f665f
SystemOut     O kbase ** org.drools.impl.KnowledgeBaseImpl@48df48df
SystemOut     O env ** org.drools.impl.EnvironmentImpl@4b4b4b4b
SystemOut     O env transaction manager: a BitronixTransactionManager with 0 in-flight transaction(s)
SystemOut     O 11  org.jbpm.persistence.jpa  INFO   [WebContainer : 0] openjpa.Runtime - Starting OpenJPA 1.2.3-SNAPSHOT
SystemErr     R java.lang.IllegalStateException: java.lang.reflect.InvocationTargetException
SystemErr     R             at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:142)
SystemErr     R             at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.newStatefulKnowledgeSession(KnowledgeStoreServiceImpl.java:66)
SystemErr     R             at org.drools.persistence.jpa.JPAKnowledgeService.newStatefulKnowledgeSession(JPAKnowledgeService.java:122)
SystemErr     R             at com.sample.execute.MigrateDB.createKnowledgeSession(MigrateDB.java:99)
SystemErr     R             at com.sample.execute.MigrateDB.dbMIgration(MigrateDB.java:42)
SystemErr     R             at com.servlets.AServlet.doPost(AServlet.java:41)
SystemErr     R             at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
SystemErr     R             at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
SystemErr     R             at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657)
SystemErr     R             at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939)
SystemErr     R             at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)
SystemErr     R             at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:179)
SystemErr     R             at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3935)
SystemErr     R             at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
SystemErr     R             at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:931)
SystemErr     R             at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
SystemErr     R             at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)
SystemErr     R             at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
SystemErr     R             at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
SystemErr     R             at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
SystemErr     R             at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
SystemErr     R             at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
SystemErr     R             at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
SystemErr     R             at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
SystemErr     R             at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
SystemErr     R             at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
SystemErr     R             at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
SystemErr     R             at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
SystemErr     R             at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1604)
SystemErr     R Caused by: java.lang.reflect.InvocationTargetException
SystemErr     R             at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
SystemErr     R             at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:45)
SystemErr     R             at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:39)
SystemErr     R             at java.lang.reflect.Constructor.newInstance(Constructor.java:515)
SystemErr     R             at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:128)
SystemErr     R             ... 28 more
SystemErr     R Caused by: <openjpa-1.2.3-SNAPSHOT-r422266:1152904 fatal user error> org.apache.openjpa.persistence.ArgumentException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property.
SystemErr     R             at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:74)
SystemErr     R             at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:784)
SystemErr     R             at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:561)
SystemErr     R             at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1344)
SystemErr     R             at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:505)
SystemErr     R             at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:430)
SystemErr     R             at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:103)
SystemErr     R             at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
SystemErr     R             at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
SystemErr     R             at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:863)
SystemErr     R             at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:854)
SystemErr     R             at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:638)
SystemErr     R             at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:183)
SystemErr     R             at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
SystemErr     R             at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
SystemErr     R             at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:42)
SystemErr     R             at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:27)
SystemErr     R             at org.drools.persistence.jpa.JpaPersistenceContextManager.getApplicationScopedPersistenceContext(JpaPersistenceContextManager.java:55)
SystemErr     R             at org.drools.persistence.SingleSessionCommandService.<init>(SingleSessionCommandService.java:144)
SystemErr     R             ... 33 more
ramesh
  • 190
  • 3
  • 5
  • 14

2 Answers2

0
I think you need to change `persistence-unit` properties in `persistence.xml` .

You are using `openJPA` as provider but in properties you are using `hibernate` .

you can use below hibernate properties with provider as hibernate OR change properties for opnJPA as you are using.

    <provider>org.hibernate.ejb.HibernatePersistence</provider>

    <properties>
        <property name="hibernate.max_fetch_depth" value="3" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.transaction.manager_lookup_class"   value="org.hibernate.transaction.JBossTransactionManagerLookup" />
    <!--<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />  -->
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
    </properties>
Neeraj
  • 327
  • 1
  • 8
  • Exactly.. all these properties are "wrong" in your configuration ... – salaboy Jan 04 '14 at 12:54
  • @salaboy you mean to say hibernate.dialect is configured wrong. but the same is given [here](http://docs.jboss.org/jbpm/v5.4/userguide/ch.installer.html#d0e609) Can you correct few lines to show me exactly how you want it to be? – ramesh Jan 04 '14 at 18:58
0

I don't think you want to use "pure" JPA configurations.

Taking a quick look at JBoss documentation, it looks like there are helpful details at 3.7.3 and 3.7.4 in the demo tutorial.

If I personally was configuring Oracle using OpenJPA, I'd use the following properties to ID my JNDI resources:

<jta-data-source>MyJNDIForXA</jta-data-source>
<non-jta-data-source>MyOtherJNDI</non-jta-data-source>

More importantly, search the documentation for "Oracle" and review the known issues, examples, and so on. For example, you may need to configure properties like openjpa.jdbc.Schema.

ericp
  • 611
  • 2
  • 11
  • 17