Do you really need a JTA transaction? Can you not re-configure your persistence unit to use a RESOURCE_LOCAL transaction?
Googling shows you're not alone with wanting (but not necessarily needing) JTA in Tomcat... 2010/9/3 liang <[email protected]> > i found that tomcat 6 have not JTA,which server is able to persistence? > > 在 2010年9月3日 下午12:02,liang <[email protected]>写道: > >> THS,Esteban,I found it which is resin's problem, so i replaced it to >> tomcat6, i got other questions: >> >> in my webapp webroot/meta-inf/content.xml: >> <?xml version="1.0" encoding="UTF-8"?> >> <Context> >> <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" >> maxActive="10" maxIdle="2" maxWait="10000" >> logAbandoned="true" >> username="root" password="111111" >> driverClassName="com.mysql.jdbc.Driver" >> url="jdbc:mysql://localhost:3306/test"/> >> </Context> >> >> webroot/web-inf/web.xml: >> >> <resource-ref> >> <description>DB Connection</description> >> <res-ref-name>jdbc/mysql</res-ref-name> >> <res-type>javax.sql.DataSource</res-type> >> <res-auth>Container</res-auth> >> </resource-ref> >> >> webroot/meta-inf/persistence.xml: >> >> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> >> <persistence >> version="1.0" >> 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" >> xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xmlns="http://java.sun.com/xml/ns/persistence"> >> >> <!--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>java:comp/env/jdbc/mysql</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> >> >> >> <properties> >> <property name="hibernate.dialect" >> value="org.hibernate.dialect.MySQLDialect"/> >> <property name="hibernate.max_fetch_depth" value="3"/> >> <property name="hibernate.hbm2ddl.auto" value="create" /> >> <property name="hibernate.show_sql" value="true" /> >> <property name="hibernate.transaction.manager_lookup_class" >> value="org.hibernate.transaction.BTMTransactionManagerLookup" /> >> </properties> >> </persistence-unit> >> >> </persistence> >> >> webroot/testJNDI.jsp: >> >> <%@ page import='java.sql.*, javax.sql.*, javax.naming.*' %> >> <% >> Context ic = new InitialContext(); >> DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/mysql"); >> >> Connection conn = ds.getConnection(); >> >> try { >> Statement stmt = conn.createStatement(); >> ResultSet rs = stmt.executeQuery("select * from test"); >> while (rs.next()) { %> >> <%= rs.getString(1) %> <%= rs.getString(2) %><br><% >> } >> } finally { >> conn.close(); >> } >> %> >> >> webroot/testDroolsFlow.jsp: >> >> <%@ page import='java.sql.*, javax.sql.*, javax.naming.*,com.abc.*' %> >> <% >> VdcService.exec(); >> %> >> >> run the testJNDI.jsp,its OK.when i run testDroolsFlow.jsp, appears this >> exception: >> >> java.lang.RuntimeException: Could not commit session >> at >> org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:119) >> at >> org.drools.persistence.jpa.impl.JPAKnowledgeServiceProviderImpl.newStatefulKnowledgeSession(JPAKnowledgeServiceProviderImpl.java:44) >> at >> org.drools.persistence.jpa.JPAKnowledgeService.newStatefulKnowledgeSession(JPAKnowledgeService.java:93) >> at com.abc.VdcService.exec(VdcService.java:39) >> at >> org.apache.jsp._testDroolsFlow_jsp._jspService(_testDroolsFlow_jsp.java:60) >> at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) >> at >> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) >> at >> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) >> at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) >> at >> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) >> at >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) >> at >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) >> at >> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >> at >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) >> at >> org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) >> at >> org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) >> at >> org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555) >> >> at java.lang.Thread.run(Thread.java:619) >> 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:152) >> at javax.naming.InitialContext.lookup(InitialContext.java:392) >> at >> org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:102) >> ... 22 more >> >> JNDI is OK,so i guess the question is in drools side,is right of my >> guess? the exception is here: >> 38 StatefulKnowledgeSession ksession = >> 39 JPAKnowledgeService.newStatefulKnowledgeSession( >> kbase, null, env ); >> >> >> >> PS: >> >> i write the webapp is want to know: >> >> 1. How to save drools into database >> >> 2. What data is saved in the tables; are all the instances of a >> process stored? >> >> 3. Are all nodes in a ruleflow saved? >> >> 4. Are there any nodes which are not running saved in the tables? >> >> 5. What status are running and non-running nodes in the tables? >> >> >> 2010/9/1 Esteban Aliverti <[email protected]> >> >> As far as I can see, this has nothing to do with drools. You can't even >>> create the EntityManagerFactory. Try to set a finest log level >>> for com.caucho.amber.* and org.hibernate.* to see why it is throwing a >>> NPE. >>> >>> Best, >>> >>> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX >>> >>> Esteban Aliverti >>> - Developer @ http://www.plugtree.com >>> - Blog @ http://ilesteban.wordpress.com >>> >>> >>> 2010/9/1 亮亮 <[email protected]> >>> >>>> hi: >>>> >>>> in my webapp, I use JPA to store the runtime state,i use this code in >>>> VdcService.java which is a sample java class: >>>> >>>> EntityManagerFactory emf =Persistence.createEntityManagerFactory( >>>> "org.drools.persistence.jpa" ); >>>> Environment env = KnowledgeBaseFactory.newEnvironment(); >>>> env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf ); >>>> >>>> // create a new knowledge session that uses JPA to store the runtime >>>> state >>>> StatefulKnowledgeSession ksession = >>>> JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env ); >>>> >>>> I put persistence.xml to webRoot/META-INF/ , persistence.xml: >>>> >>>> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> >>>> <persistence >>>> version="1.0" >>>> 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" >>>> xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" >>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>>> xmlns="http://java.sun.com/xml/ns/persistence"> >>>> >>>> <persistence-unit name="org.drools.persistence.jpa" >>>> transaction-type="JTA"> >>>> <provider>org.hibernate.ejb.HibernatePersistence</provider> >>>> >>>> <jta-data-source>java:comp/env/jdbc/mysql</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> >>>> >>>> >>>> <properties> >>>> <property name="hibernate.dialect" >>>> value="org.hibernate.dialect.MySQLDialect"/> >>>> <property name="hibernate.max_fetch_depth" value="3"/> >>>> <property name="hibernate.hbm2ddl.auto" value="create" /> >>>> <property name="hibernate.show_sql" value="true" /> >>>> <property name="hibernate.transaction.manager_lookup_class" >>>> value="org.hibernate.transaction.BTMTransactionManagerLookup" /> >>>> </properties> >>>> </persistence-unit> >>>> >>>> </persistence> >>>> >>>> I use resin 3.1.10, $resin-home/conf/resin.conf: >>>> >>>> <database> >>>> <jndi-name>jdbc/mysql</jndi-name> >>>> <driver type="org.gjt.mm.mysql.Driver"> >>>> <url>jdbc:mysql://127.0.0.1:3306/test</url> >>>> <user>root</user> >>>> <password></password> >>>> </driver> >>>> >>>> <prepared-statement-cache-size>8</prepared-statement-cache-size> >>>> <max-connections>20</max-connections> >>>> <max-idle-time>30s</max-idle-time> >>>> </database> >>>> >>>> when i run this webapp , i got this exception: >>>> >>>> java.lang.NullPointerException >>>> at >>>> com.caucho.amber.manager.AmberPersistenceProvider.createEntityManagerFactory(AmberPersistenceProvider.java:65) >>>> at >>>> javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69) >>>> at com.abc.abc.service.VdcService.exec(VdcService.java:32) >>>> at com.abc.abc.resources.Apply.apply(Apply.java:55) >>>> 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 >>>> com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:156) >>>> at >>>> com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67) >>>> at >>>> com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:208) >>>> at >>>> com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:75) >>>> at >>>> com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:115) >>>> at >>>> com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:67) >>>> at >>>> com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:724) >>>> at >>>> com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:689) >>>> at >>>> com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:680) >>>> at >>>> com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:324) >>>> at >>>> com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:425) >>>> at >>>> com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:604) >>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:91) >>>> at >>>> com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:103) >>>> at >>>> org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:416) >>>> at >>>> com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87) >>>> at >>>> org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99) >>>> at >>>> com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87) >>>> at >>>> com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:187) >>>> at >>>> com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:265) >>>> at >>>> com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:273) >>>> at com.caucho.server.port.TcpConnection.run(TcpConnection.java:682) >>>> at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:743) >>>> at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:662) >>>> at java.lang.Thread.run(Thread.java:619) >>>> >>>> i can't solve it.How to solve it?help me ,THS >>>> >>>> _______________________________________________ >>>> rules-users mailing list >>>> [email protected] >>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>> >>>> >>> >>> _______________________________________________ >>> rules-users mailing list >>> [email protected] >>> https://lists.jboss.org/mailman/listinfo/rules-users >>> >>> >> > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > >
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
