I got a bit further on this: it appears that for 5.1 there are a couple of extra mapped classes:<br><br><class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class> <class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class><br>
<br>This got me much further, but no success yet: the tables are created in the database, but apparently at the point some data is inserted an error occurs, see below.<br>I've updated BTM to 1.3.3, but that didn't help.<br>
<br>Any ideas? <br>Thanks, <br>Nol<br><br>Mar 25, 2010 11:00:33 PM bitronix.tm.journal.DiskJournal open<br>WARNING: active log file is unclean, previous server crash ?<br>Mar 25, 2010 11:00:33 PM bitronix.tm.recovery.Recoverer run<br>
INFO: recovery committed 0 dangling transaction(s) and rolled back 0 aborted transaction(s) on 1 resource(s) [jdbc/processInstanceDS] (restricted to serverId '192.168.178.32')<br>line 2:47 mismatched character '<EOF>' expecting '\n'<br>
Hibernate: insert into SessionInfo (dirty, lastModificationDate, rulesByteArray, startDate) values (?, ?, ?, ?)<br>Mar 25, 2010 11:00:35 PM bitronix.tm.BitronixTransaction fireAfterCompletionEvent<br>WARNING: Synchronization.afterCompletion() call failed for a DeferredReleaseSynchronization of a JdbcPooledConnection from datasource jdbc/processInstanceDS in state NOT_ACCESSIBLE wrapping com.mysql.jdbc.jdbc2.optional.JDBC4MysqlXAConnection@1d3c66d8<br>
java.lang.IllegalArgumentException: null source<br> at java.util.EventObject.<init>(EventObject.java:38)<br> at javax.sql.StatementEvent.<init>(StatementEvent.java:39)<br> at com.mysql.jdbc.jdbc2.optional.JDBC4PreparedStatementWrapper.close(JDBC4PreparedStatementWrapper.java:70)<br>
at bitronix.tm.resource.jdbc.JdbcPooledConnection.stateChanging(JdbcPooledConnection.java:205)<br> at bitronix.tm.resource.common.AbstractXAStatefulHolder.fireStateChanging(AbstractXAStatefulHolder.java:61)<br> at bitronix.tm.resource.common.AbstractXAStatefulHolder.setState(AbstractXAStatefulHolder.java:30)<br>
at bitronix.tm.resource.common.DeferredReleaseSynchronization.afterCompletion(DeferredReleaseSynchronization.java:33)<br> at bitronix.tm.BitronixTransaction.fireAfterCompletionEvent(BitronixTransaction.java:416)<br>
at bitronix.tm.BitronixTransaction.rollback(BitronixTransaction.java:227)<br> at bitronix.tm.BitronixTransactionManager.rollback(BitronixTransactionManager.java:104)<br> at org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:128)<br>
at org.drools.persistence.jpa.impl.JPAKnowledgeServiceProviderImpl.newStatefulKnowledgeSession(JPAKnowledgeServiceProviderImpl.java:44)<br> at org.drools.persistence.jpa.JPAKnowledgeService.newStatefulKnowledgeSession(JPAKnowledgeService.java:93)<br>
at pilot.tests.DroolFlowPersistenceTest.main(DroolFlowPersistenceTest.java:60)<br>java.lang.RuntimeException: Could not commit session<br> at org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:133)<br>
at org.drools.persistence.jpa.impl.JPAKnowledgeServiceProviderImpl.newStatefulKnowledgeSession(JPAKnowledgeServiceProviderImpl.java:44)<br> at org.drools.persistence.jpa.JPAKnowledgeService.newStatefulKnowledgeSession(JPAKnowledgeService.java:93)<br>
at pilot.tests.DroolFlowPersistenceTest.main(DroolFlowPersistenceTest.java:60)<br>Caused by: java.lang.IllegalArgumentException: null source<br> at java.util.EventObject.<init>(EventObject.java:38)<br> at javax.sql.StatementEvent.<init>(StatementEvent.java:39)<br>
at com.mysql.jdbc.jdbc2.optional.JDBC4PreparedStatementWrapper.close(JDBC4PreparedStatementWrapper.java:70)<br> at org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:563)<br> at org.hibernate.jdbc.AbstractBatcher.closeStatement(AbstractBatcher.java:291)<br>
at org.hibernate.id.insert.AbstractReturningDelegate.releaseStatement(AbstractReturningDelegate.java:82)<br> at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:60)<br>
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2186)<br> at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2666)<br> at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)<br>
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)<br> at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)<br> at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)<br>
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)<br> at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)<br>
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154)<br> at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110)<br>
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)<br> at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:645)<br> at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:619)<br>
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623)<br> at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)<br> at org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:118)<br>
... 3 more<br><br><br><br><br><br><br><div class="gmail_quote">On Thu, Mar 25, 2010 at 5:47 PM, Nol de Wit <span dir="ltr"><<a href="mailto:noldewit@gmail.com">noldewit@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hi,<br>
<br>
(using Droolw Flow 5.1.M1)<br>
<br>
I've made a reasonably simple Drool Flow model, containing a ForEach,<br>
a split and and a couple of actions. Without Persistence it works<br>
nicely: I start it with one variable/parameter, a class I call Report<br>
with 4 Lines of data . Each of the lines get's worked on correctly in<br>
the ForEach.<br>
<br>
Next I want to add Persistence to the model; I made a persistence.xml,<br>
which is based on the one as shown in chapter 5 of the online Drools<br>
Flow documentation. See below.<br>
<br>
I changed the H2 db to a mysql DB.<br>
<br>
The firs call (after creating the datasource) in my test now gives an<br>
exception. See the call and exception below.<br>
<br>
1) what's wrong? I think my persistence.xml is correct. So what is the<br>
error trying to tell me? Is saying that I should map my parameters<br>
data (Report and Line)? I just read an article from salaboy about<br>
variable persistence 5.1, but I'm not using that...<br>
<br>
2) What puzzles me is the link between the persistence.xml (containing<br>
mapping info), and the datasource (containing the credentials of the<br>
DB). In the doc and PerformanceTest.java class in the examples I don't<br>
see any link. Is creating the DataSource enough to get it in JNDI?<br>
<br>
Thanks,<br>
Nol<br>
<br>
<br>
Some of my code and config:<br>
<br>
// See makeDataSource() below<br>
PoolingDataSource ds = makeDataSource();<br>
<br>
// this call gives an exception:<br>
EntityManagerFactory emf =<br>
Persistence.createEntityManagerFactory( "nl.dnb.avb.drools.jpa" );<br>
<br>
<br>
25-mrt-2010 14:30:00 org.hibernate.cfg.AnnotationBinder bindClass<br>
INFO: Binding entity from annotated class:<br>
org.drools.persistence.processinstance.WorkItemInfo<br>
25-mrt-2010 14:30:00 org.hibernate.cfg.annotations.EntityBinder bindTable<br>
INFO: Bind entity org.drools.persistence.processinstance.WorkItemInfo<br>
on table WorkItemInfo<br>
javax.persistence.PersistenceException: [PersistenceUnit:<br>
nl.dnb.avb.drools.jpa] Unable to configure EntityManagerFactory<br>
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:265)<br>
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:125)<br>
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)<br>
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)<br>
at pilot.tests.DroolFlowPersistenceTest.main(DroolFlowPersistenceTest.java:41)<br>
Caused by: org.hibernate.AnnotationException: Use of @OneToMany or<br>
@ManyToMany targeting an unmapped class:<br>
org.drools.persistence.processinstance.ProcessInstanceInfo.variables[org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo]<br>
at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1071)<br>
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:602)<br>
at org.hibernate.cfg.annotations.MapBinder$1.secondPass(MapBinder.java:79)<br>
<br>
<br>
Persistence.xml:<br>
<br>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><br>
<persistence<br>
version="1.0"<br>
xsi:schemaLocation=<br>
"<a href="http://java.sun.com/xml/ns/persistence" target="_blank">http://java.sun.com/xml/ns/persistence</a><br>
<a href="http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" target="_blank">http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd</a><br>
<a href="http://java.sun.com/xml/ns/persistence/orm" target="_blank">http://java.sun.com/xml/ns/persistence/orm</a><br>
<a href="http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" target="_blank">http://java.sun.com/xml/ns/persistence/orm_1_0.xsd</a>"<br>
xmlns:orm="<a href="http://java.sun.com/xml/ns/persistence/orm" target="_blank">http://java.sun.com/xml/ns/persistence/orm</a>"<br>
xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance" target="_blank">http://www.w3.org/2001/XMLSchema-instance</a>"<br>
xmlns="<a href="http://java.sun.com/xml/ns/persistence" target="_blank">http://java.sun.com/xml/ns/persistence</a>"><br>
<br>
<persistence-unit name="nl.dnb.avb.drools.jpa"><br>
<provider>org.hibernate.ejb.HibernatePersistence</provider><br>
<jta-data-source>jdbc/processInstanceDS</jta-data-source><br>
<class>org.drools.persistence.session.SessionInfo</class><br>
<class>org.drools.persistence.processinstance.ProcessInstanceInfo</class><br>
<class>org.drools.persistence.processinstance.ProcessInstanceEventInfo</class><br>
<class>org.drools.persistence.processinstance.WorkItemInfo</class><br>
<br>
<properties><br>
<!-- property name="hibernate.dialect"<br>
value="org.hibernate.dialect.H2Dialect"/ --><br>
<property name="hibernate.dialect"<br>
value="org.hibernate.dialect.MySQLDialect"/><br>
<property name="hibernate.max_fetch_depth" value="3"/><br>
<property name="hibernate.hbm2ddl.auto" value="update"/><br>
<property name="hibernate.show_sql" value="true"/><br>
<property name="hibernate.transaction.manager_lookup_class"<br>
value="org.hibernate.transaction.BTMTransactionManagerLookup"/><br>
</properties><br>
</persistence-unit><br>
</persistence><br>
<br>
<br>
<br>
private static PoolingDataSource makeDataSource() {<br>
<br>
PoolingDataSource ds = new PoolingDataSource();<br>
ds.setUniqueName("jdbc/processInstanceDS");<br>
ds.setClassName("com.mysql.jdbc.jdbc2.optional.MysqlXADataSource");<br>
ds.setMaxPoolSize(3);<br>
ds.setAllowLocalTransactions(true);<br>
ds.getDriverProperties().put("user", "drools");<br>
ds.getDriverProperties().put("password", "drools");<br>
ds.getDriverProperties().put("URL", "jdbc:mysql://DNB35362:3306/drools");<br>
ds.init();<br>
<br>
return ds;<br>
<br>
}<br>
</blockquote></div><br>