3 Replies Latest reply on Jan 13, 2011 11:54 AM by gabriel.kb

    Seam, TestNG and Jbpm - Could not find datasource error

    gabriel.kb

      I'm using Seam 2.2, Eclipse 3.5, JBoss tools, jBPM 3.2.7 and the TestNG plugin for Eclipse.


      I created a seam project and its test project with the jboss tools. It's a simple to do list seam-jbpm application and works fine. However, when I run my seam test (see below) I get this stacktrace:





      INFO  [org.jbpm.JbpmConfiguration] using configuration resource: jbpm.cfg.xml
      INFO  [org.jbpm.persistence.db.StaleObjectLogConfigurer] stale object exceptions will be hidden from logging
      ERROR [org.hibernate.connection.DatasourceConnectionProvider] Could not find datasource: java:/EjemplosJbpmDatasource
      java.lang.RuntimeException: PROVIDER_URL not provided in jndi.properties.  Automatic discovery not implemented yet.
                at org.jboss.naming.JBossRemotingContextFactory.getInitialContext(JBossRemotingContextFactory.java:158)
                at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
                at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
                at javax.naming.InitialContext.init(InitialContext.java:223)
                at javax.naming.InitialContext.<init>(InitialContext.java:175)
                at org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:51)
                at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
                at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
                at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:79)
                at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:448)
                at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
                at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
                at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
                at org.jbpm.persistence.db.DbPersistenceServiceFactory.getSessionFactory(DbPersistenceServiceFactory.java:105)
                at org.jbpm.persistence.db.DbPersistenceService.getSessionFactory(DbPersistenceService.java:84)
                at org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:89)
                at org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:340)
                at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:596)
                at org.jbpm.scheduler.db.DbSchedulerService.<init>(DbSchedulerService.java:49)
                at org.jbpm.scheduler.db.DbSchedulerServiceFactory.openService(DbSchedulerServiceFactory.java:32)
                at org.jbpm.svc.Services.getService(Services.java:155)
                at org.jbpm.svc.Services.getCurrentService(Services.java:93)
                at org.jbpm.svc.Services.getCurrentService(Services.java:86)
                at org.jbpm.scheduler.def.CreateTimerAction.execute(CreateTimerAction.java:79)
                at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:280)
                at org.jbpm.graph.def.GraphElement.executeActions(GraphElement.java:237)
                at org.jbpm.graph.def.GraphElement.fireAndPropagateEvent(GraphElement.java:207)
                at org.jbpm.graph.def.GraphElement.fireEvent(GraphElement.java:190)
                at org.jbpm.taskmgmt.exe.TaskInstance.create(TaskInstance.java:156)
                at org.jbpm.taskmgmt.exe.TaskMgmtInstance.createTaskInstance(TaskMgmtInstance.java:191)
                at org.jbpm.graph.node.TaskNode.execute(TaskNode.java:189)
                at org.jbpm.graph.def.Node.enter(Node.java:375)
                at org.jbpm.graph.def.Transition.take(Transition.java:151)
                at org.jbpm.graph.def.Node.leave(Node.java:453)
                at org.jbpm.graph.node.StartState.leave(StartState.java:78)
                at org.jbpm.graph.exe.Token.signal(Token.java:214)
                at org.jbpm.graph.exe.Token.signal(Token.java:143)
                at org.jbpm.graph.exe.ProcessInstance.signal(ProcessInstance.java:287)
                at org.ejemplosjbpm.test.SubProcesoTest.testMinimo(SubProcesoTest.java:25)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                at java.lang.reflect.Method.invoke(Method.java:597)
                at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:607)
                at org.testng.internal.Invoker.invokeMethod(Invoker.java:517)
                at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:669)
                at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:956)
                at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
                at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:110)
                at org.testng.TestRunner.runWorkers(TestRunner.java:759)
                at org.testng.TestRunner.privateRun(TestRunner.java:592)
                at org.testng.TestRunner.run(TestRunner.java:486)
                at org.testng.SuiteRunner.runTest(SuiteRunner.java:332)
                at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:327)
                at org.testng.SuiteRunner.privateRun(SuiteRunner.java:299)
                at org.testng.SuiteRunner.run(SuiteRunner.java:204)
                at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:877)
                at org.testng.TestNG.runSuitesLocally(TestNG.java:842)
                at org.testng.TestNG.run(TestNG.java:751)
                at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73)
                at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:124)
      ERROR [org.jbpm.graph.def.GraphElement] action threw exception: Could not find datasource
      org.hibernate.HibernateException: Could not find datasource
                at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:79)
                at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
                at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:79)
                at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:448)
                at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
                at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
                at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
                at org.jbpm.persistence.db.DbPersistenceServiceFactory.getSessionFactory(DbPersistenceServiceFactory.java:105)
                at org.jbpm.persistence.db.DbPersistenceService.getSessionFactory(DbPersistenceService.java:84)
                at org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:89)
                at org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:340)
                at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:596)
                at org.jbpm.scheduler.db.DbSchedulerService.<init>(DbSchedulerService.java:49)
                at org.jbpm.scheduler.db.DbSchedulerServiceFactory.openService(DbSchedulerServiceFactory.java:32)
                at org.jbpm.svc.Services.getService(Services.java:155)
                at org.jbpm.svc.Services.getCurrentService(Services.java:93)
                at org.jbpm.svc.Services.getCurrentService(Services.java:86)
                at org.jbpm.scheduler.def.CreateTimerAction.execute(CreateTimerAction.java:79)
                at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:280)
                at org.jbpm.graph.def.GraphElement.executeActions(GraphElement.java:237)
                at org.jbpm.graph.def.GraphElement.fireAndPropagateEvent(GraphElement.java:207)
                at org.jbpm.graph.def.GraphElement.fireEvent(GraphElement.java:190)
                at org.jbpm.taskmgmt.exe.TaskInstance.create(TaskInstance.java:156)
                at org.jbpm.taskmgmt.exe.TaskMgmtInstance.createTaskInstance(TaskMgmtInstance.java:191)
                at org.jbpm.graph.node.TaskNode.execute(TaskNode.java:189)
                at org.jbpm.graph.def.Node.enter(Node.java:375)
                at org.jbpm.graph.def.Transition.take(Transition.java:151)
                at org.jbpm.graph.def.Node.leave(Node.java:453)
                at org.jbpm.graph.node.StartState.leave(StartState.java:78)
                at org.jbpm.graph.exe.Token.signal(Token.java:214)
                at org.jbpm.graph.exe.Token.signal(Token.java:143)
                at org.jbpm.graph.exe.ProcessInstance.signal(ProcessInstance.java:287)
                at org.ejemplosjbpm.test.SubProcesoTest.testMinimo(SubProcesoTest.java:25)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                at java.lang.reflect.Method.invoke(Method.java:597)
                at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:607)
                at org.testng.internal.Invoker.invokeMethod(Invoker.java:517)
                at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:669)
                at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:956)
                at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
                at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:110)
                at org.testng.TestRunner.runWorkers(TestRunner.java:759)
                at org.testng.TestRunner.privateRun(TestRunner.java:592)
                at org.testng.TestRunner.run(TestRunner.java:486)
                at org.testng.SuiteRunner.runTest(SuiteRunner.java:332)
                at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:327)
                at org.testng.SuiteRunner.privateRun(SuiteRunner.java:299)
                at org.testng.SuiteRunner.run(SuiteRunner.java:204)
                at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:877)
                at org.testng.TestNG.runSuitesLocally(TestNG.java:842)
                at org.testng.TestNG.run(TestNG.java:751)
                at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73)
                at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:124)
      Caused by: java.lang.RuntimeException: PROVIDER_URL not provided in jndi.properties.  Automatic discovery not implemented yet.
                at org.jboss.naming.JBossRemotingContextFactory.getInitialContext(JBossRemotingContextFactory.java:158)
                at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
                at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
                at javax.naming.InitialContext.init(InitialContext.java:223)
                at javax.naming.InitialContext.<init>(InitialContext.java:175)
                at org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:51)
                at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
                ... 54 more
      FAILED: testMinimo
      org.jbpm.graph.def.DelegationException: Could not find datasource
                at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:359)
                at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:350)
                at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:350)
                at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:296)
                at org.jbpm.graph.def.GraphElement.executeActions(GraphElement.java:237)
                at org.jbpm.graph.def.GraphElement.fireAndPropagateEvent(GraphElement.java:207)
                at org.jbpm.graph.def.GraphElement.fireEvent(GraphElement.java:190)
                at org.jbpm.taskmgmt.exe.TaskInstance.create(TaskInstance.java:156)
                at org.jbpm.taskmgmt.exe.TaskMgmtInstance.createTaskInstance(TaskMgmtInstance.java:191)
                at org.jbpm.graph.node.TaskNode.execute(TaskNode.java:189)
                at org.jbpm.graph.def.Node.enter(Node.java:375)
                at org.jbpm.graph.def.Transition.take(Transition.java:151)
                at org.jbpm.graph.def.Node.leave(Node.java:453)
                at org.jbpm.graph.node.StartState.leave(StartState.java:78)
                at org.jbpm.graph.exe.Token.signal(Token.java:214)
                at org.jbpm.graph.exe.Token.signal(Token.java:143)
                at org.jbpm.graph.exe.ProcessInstance.signal(ProcessInstance.java:287)
                at org.ejemplosjbpm.test.SubProcesoTest.testMinimo(SubProcesoTest.java:25)
      Caused by: org.hibernate.HibernateException: Could not find datasource
                at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:79)
                at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
                at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:79)
                at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:448)
                at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
                at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
                at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
                at org.jbpm.persistence.db.DbPersistenceServiceFactory.getSessionFactory(DbPersistenceServiceFactory.java:105)
                at org.jbpm.persistence.db.DbPersistenceService.getSessionFactory(DbPersistenceService.java:84)
                at org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:89)
                at org.jbpm.persistence.db.DbPersistenceService.getJobSession(DbPersistenceService.java:340)
                at org.jbpm.JbpmContext.getJobSession(JbpmContext.java:596)
                at org.jbpm.scheduler.db.DbSchedulerService.<init>(DbSchedulerService.java:49)
                at org.jbpm.scheduler.db.DbSchedulerServiceFactory.openService(DbSchedulerServiceFactory.java:32)
                at org.jbpm.svc.Services.getService(Services.java:155)
                at org.jbpm.svc.Services.getCurrentService(Services.java:93)
                at org.jbpm.svc.Services.getCurrentService(Services.java:86)
                at org.jbpm.scheduler.def.CreateTimerAction.execute(CreateTimerAction.java:79)
                at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:280)
                ... 36 more
      Caused by: java.lang.RuntimeException: PROVIDER_URL not provided in jndi.properties.  Automatic discovery not implemented yet.
                at org.jboss.naming.JBossRemotingContextFactory.getInitialContext(JBossRemotingContextFactory.java:158)
                at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
                at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
                at javax.naming.InitialContext.init(InitialContext.java:223)
                at javax.naming.InitialContext.<init>(InitialContext.java:175)
                at org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:51)
                at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
      





      This is my test class:




      public class SubProcesoTest{
       
        @Test
        public void testMinimo() throws Exception {
        JbpmConfiguration jbpmConfig = JbpmConfiguration.getInstance();
        JbpmContext jbpmContext = jbpmConfig.createJbpmContext();
        try {
       
       
        ProcessDefinition subProceso = ProcessDefinition
        .parseXmlResource("subproceso/processdefinition.xml");
        ProcessInstance subProcesoPI = subProceso.createProcessInstance();
        Assert.assertEquals(
        subProcesoPI.getRootToken().getNode().getName(), "start");
       
       
        subProcesoPI.signal();
       
       
        Assert.assertEquals(
        subProcesoPI.getRootToken().getNode().getName(), "todo");
        } finally {
        jbpmContext.close();
        }
        }
      }



      This is the persistence unit defined in the persistence.xml for the project:




       <persistence-unit name="EjemplosJbpm" transaction-type="JTA">
            <provider>org.hibernate.ejb.HibernatePersistence</provider>
            <jta-data-source>java:/EjemplosJbpmDatasource</jta-data-source>
            <properties>
               <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
               <property name="hibernate.hbm2ddl.auto" value="update"/>
               <property name="hibernate.show_sql" value="true"/>
               <property name="hibernate.format_sql" value="true"/>
               <!-- Only relevant if Seam is loading the persistence unit (Java SE bootstrap) -->
               <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
            </properties>
         </persistence-unit>



      And the jbpm.cfg.xml:


      <jbpm-configuration>
      
      
                <jbpm-context>
                          <service name="persistence">
                                    <factory>
                                              <bean class="org.jbpm.persistence.db.DbPersistenceServiceFactory">
                                                        <field name="isTransactionEnabled">
                                                                  <false />
                                                        </field>
                                              </bean>
                                    </factory>
      
      
                          </service>
      
      
                          <service name="tx" factory="org.jbpm.tx.TxServiceFactory" />
                          <service name="message" factory="org.jbpm.msg.db.DbMessageServiceFactory" />
                          <service name="scheduler"
                                    factory="org.jbpm.scheduler.db.DbSchedulerServiceFactory" />
                          <service name="logging" factory="org.jbpm.logging.db.DbLoggingServiceFactory" />
                          <service name="authentication"
                                    factory="org.jbpm.security.authentication.DefaultAuthenticationServiceFactory" />
                </jbpm-context>
      </jbpm-configuration>



      I've spent several days reading many threads (like this one ttp://seamframework.org/Community/UnitTestCouldNotFindDatasourceJavaDefaultD) and trying many workarounds but nothing of that worked.



      Thanks in advance for your help.



      Kind regards,


      GK




        • 1. Re: Seam, TestNG and Jbpm - Could not find datasource error
          isonisak

          Check datasource state and configuration from JBoss Admin console.
          Check peristence.xml definition.
          Examples for MySql seems to be guite a lot in net.
          Execute Test Connection from JBoss Admin console.


          • 2. Re: Seam, TestNG and Jbpm - Could not find datasource error
            gabriel.kb

            Hi Sakari, thanks for your reply.


            Just to clarify my question.


            I have a project X that works fine with the configuration above.


            Then, there is an X-test project to test the X project. The problem is ONLY with the X-test project. So I don't think is a problem with the connection since the persistence.xml is the same that works with X project.

            • 3. Re: Seam, TestNG and Jbpm - Could not find datasource error
              gabriel.kb

              Finally the issue is solved.


              This is how i did it. Modified the /test-src/hibernate.cfg.xml that is in the test project.


              Added:



              <!-- JDBC connection properties (begin) -->
                  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
                  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ejemplosjbpm</property>   
                  <property name="hibernate.connection.username">root</property>
                  <property name="hibernate.connection.password"></property>
                  <property name="hibernate.query.substitutions">true 1, false 0</property>
              <!-- JDBC connection properties (end) -->



              And removed this:



                <property name="connection.datasource">java:/EjemplosJbpmDatasource</property>
                <property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
                <property name="transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>



              Then i got:



              PROVIDERURL not provided in jndi.properties

              So, added this line in the jndi.properties of the project:
              java.naming.provider.url=jnp://localhost:1099


              GK