[rules-users] Drools Persistence Problem

dmiller44 dmiller at versatile.com
Fri Jan 8 10:31:18 EST 2010


I'm having a lot of trouble getting the default Drools persistence stuff
working as it's documented in the Drools Flow manual.  Below I've included
the stack trace, my dependencies (only those related to drools persistence),
my code snipped (which gets compiled into a jar and used by a war) and the
persistence.xml file (which is also compiled into the jar under
META-INF/persistence.xml).  Any help would be appreciated.

*Note:  I tried posting this yesterday, but it doesnt seem to have made it
to the mailing list, so sorry for a double post if it did *

Stack trace:

2010-01-07
15:36:26,599|org.springframework.web.context.ContextLoader|main|ERROR||
Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'droolsEngineFactory' defined in ServletContext resource
[/WEB-INF/spring/summit/summit-specific.xml]: Invocation of init method
failed; nested exception is java.lang.RuntimeException: Could not commit
session
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
	at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
	at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
	at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
	at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
	at
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
	at
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
	at
org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
	at
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)
	at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4216)
	at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
	at
org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
	at
org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1150)
	at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
	at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:448)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
	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.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: java.lang.RuntimeException: Could not commit session
	at
org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:133)
	at
org.drools.persistence.jpa.impl.JPAKnowledgeServiceProviderImpl.newStatefulKnowledgeSession(JPAKnowledgeServiceProviderImpl.java:44)
	at
org.drools.persistence.jpa.JPAKnowledgeService.newStatefulKnowledgeSession(JPAKnowledgeService.java:93)
	at
com.versatile.mte.drools.engine.DroolsEngineFactory.init(DroolsEngineFactory.java:189)
	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.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
	... 39 more
Caused by: javax.naming.NamingException: Cannot create resource instance
	at
org.apache.naming.factory.TransactionFactory.getObjectInstance(TransactionFactory.java:113)
	at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:793)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at
org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:109)
	... 49 more
2010-01-07
15:36:26,607|org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/mte-web-portal]|main|ERROR||
Exception sending context initialized event to listener instance of class
org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'droolsEngineFactory' defined in ServletContext resource
[/WEB-INF/spring/summit/summit-specific.xml]: Invocation of init method
failed; nested exception is java.lang.RuntimeException: Could not commit
session
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
	at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
	at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
	at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
	at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
	at
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
	at
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
	at
org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
	at
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)
	at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4216)
	at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
	at
org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
	at
org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1150)
	at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
	at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:448)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
	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.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: java.lang.RuntimeException: Could not commit session
	at
org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:133)
	at
org.drools.persistence.jpa.impl.JPAKnowledgeServiceProviderImpl.newStatefulKnowledgeSession(JPAKnowledgeServiceProviderImpl.java:44)
	at
org.drools.persistence.jpa.JPAKnowledgeService.newStatefulKnowledgeSession(JPAKnowledgeService.java:93)
	at
com.versatile.mte.drools.engine.DroolsEngineFactory.init(DroolsEngineFactory.java:189)
	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.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
	at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
	... 39 more
Caused by: javax.naming.NamingException: Cannot create resource instance
	at
org.apache.naming.factory.TransactionFactory.getObjectInstance(TransactionFactory.java:113)
	at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:793)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at
org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:109)
	... 49 more


Dependencies:

 <file name="hibernate-3.3.1.ga.jar"/>
<file name="hibernate-annotations-3.4.0.ga.jar"/>
<file name="hibernate-commons-annotations-3.4.0.ga.jar"/>
<file name="hibernate-entitymanager-3.4.0.ga.jar"/>
<file name="javassist-3.4.ga.jar"/>
<file name="jta-1.1.jar"/>
<file name="dom4j-1.6.1.jar"/>
<file name="slf4j-jdk14-1.5.2.jar" />
<file name="btm-1.3.2.jar" />
<file name="h2-1.0.77.jar" />
<file name="postgresql-8.1-407.jdbc3.jar"/>
<file name="drools-persistence-jpa-5.1.0.M1.jar" />
<file name="commons-dbcp-1.2.2.jar" />
<file name="commons-logging-1.1.1.jar"/>
<file name="commons-pool-1.5.1.jar"/>


Code Snippet (part that should be loading via JPA):

        //ADDED FOR DROOLS PERSISTENCE
        PoolingDataSource ds = new PoolingDataSource();
        ds.setUniqueName("jdbc/testDS1");
        ds.setClassName("org.h2.jdbcx.JdbcDataSource");
        ds.setMaxPoolSize(3);
        ds.setAllowLocalTransactions(true);
        ds.getDriverProperties().put("user","sa");
        ds.getDriverProperties().put("password", "sasa");
        ds.getDriverProperties().put("URL",
"jdbc:h2:file:/var/tmp/process-instance-db");
        ds.init();

        try {
            Context ctx = new InitialContext();
            ctx.createSubcontext("jdbc");
            ctx.rebind("jdbc/testDS1",ds);
            ctx.close();
        } catch (NamingException e) {
            e.printStackTrace();  //To change body of catch statement use
File | Settings | File Templates.
        }

        Environment env = KnowledgeBaseFactory.newEnvironment();
        EntityManagerFactory emf =
Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
        env.set(EnvironmentName.ENTITY_MANAGER_FACTORY,emf);

        //grab a session
        LOG.debug("Initializing a new StatefulKnowledgeSession...");
        //this.ksession = this.kbase.newStatefulKnowledgeSession();
        this.ksession =
JPAKnowledgeService.newStatefulKnowledgeSession(kbase,null,env);


And finally the persistence.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence      
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd   
http://java.sun.com/xml/ns/persistence/orm    
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
 <!--persistence-unit name="ProcessService">
  <jta-data-source>java:/DefaultDS</jta-data-source>
  <properties>
   <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
  </properties>
 </persistence-unit-->
    <persistence-unit name="org.drools.persistence.jpa"
transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>jdbc/testDS1</jta-data-source>        
        <class>org.drools.persistence.session.SessionInfo</class>
   
<class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
   
<class>org.drools.persistence.processinstance.ProcessInstanceEventInfo</class>
    <class>org.drools.persistence.processinstance.WorkItemInfo</class>
   
<class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class>
   
<class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>
   
<class>org.drools.persistence.processinstance.variabletypes.SerializablePersistedVariable</class>
	    <properties>
	        <property name="hibernate.dialect"
value="org.hibernate.dialect.H2Dialect"/>	        
	        <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.BTMTransactionManagerLookup" />
	    </properties>        
    </persistence-unit>
</persistence>


Any help would be appreciated.  This is getting rather frustrating.

-- 
View this message in context: http://n3.nabble.com/Drools-Persistence-Problem-tp114186p114186.html
Sent from the Drools - User mailing list archive at Nabble.com.



More information about the rules-users mailing list