hi gustavo, has a big different between tomcat5.5 and tomcat6? According to your guide,i cannot bind JNDI,maybe i must set resource in tomcat conf/context.xml, i am confusing……can you send a example to me?THS
在 2010年9月3日 下午11:49,Gustavo Tenrreiro <[email protected]>写道: > If it helps at all; I spent almost a full week trying to get JPA to > work with Tomcat 5.5 + Hibernate + Bitronix and this is what I found. > > The instructions for Bitronix in > http://docs.codehaus.org/display/BTM/Tomcat13 did not help me much. > The datasource that gets created via the resource.properties could > never be found. > > - So to get it to work, do deploy the Bitronix jar files into your > server / context > > - In the Tomcat conf/context.xml I do have "<Transaction > factory="bitronix.tm.BitronixUserTransactionObjectFactory" />" but I > am not sure if it is required ( haven't tested removing it ). > > - In the web.xml I do have: > > <resource-env-ref> > > > <resource-env-ref-name>java:comp/env/jdbc/processInstanceDS</resource-env-ref-name> > <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type> > </resource-env-ref> > > where jdbc/processInstanceDS is your jdbc/mysql > > - In the Hibernate persistence.xml I do have: > > <property name="hibernate.transaction.manager_lookup_class" > value="org.hibernate.transaction.BTMTransactionManagerLookup" /> > <property name="hibernate.jndi.class" > value="bitronix.tm.jndi.BitronixInitialContextFactory" /> > > although I don't think it is using the jndi.class specified there, so > the second line might be redundant. > > Then in my code I create the datasource by hand ( in a > ServletContextListener ): > > PoolingDataSource ds = new PoolingDataSource(); > ds.setUniqueName( "jdbc/processInstanceDS" ); > ds.setClassName( > "bitronix.tm.resource.jdbc.lrc.LrcXADataSource"); > ds.setMaxPoolSize( 3 ); > ds.setAllowLocalTransactions( true ); > > > ds.getDriverProperties().put("driverClassName","com.microsoft.sqlserver.jdbc.SQLServerDriver"); > ds.getDriverProperties().put( "user", "xxxxxxx" ); > ds.getDriverProperties().put( "password", "xxxxxxxx" > ); > ds.getDriverProperties().put( "url", > "mySqlServerUrl..." ); > > replace the driverClassName, user, password, and url for your setup. I > am using SQLServer, but I guess you are on MySql. > > After that the JPA stuff works, and persistence works as advertised. > This is the only setup that worked for me. I tried creating the > datasource from Spring but that didn't work either. > > Please let me know what you find out. > > Thanks > > > 2010/9/3 Pablo Nussembaum <[email protected]>: > > You need to configure bitronix[0] to provide JTA. Or use drools-spring > that > > allows you to use drools-persisntece-jpa without JTA. > > > > [0] http://docs.codehaus.org/display/BTM/Tomcat13 > > On 09/03/2010 08:53 AM, liang wrote: > > > > 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 > > > > > > _______________________________________________ > 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
