[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jboss-user
Subject:    [jboss-user] [jBPM] - Non JPA transaction management for JBPM 5.3.0 or how to integrate JBPM with cu
From:       Anatoliy Kalenskiy <do-not-reply () jboss ! com>
Date:       2012-08-30 16:41:06
Message-ID: 2-757060-3-113054-1346344851825.jivesbs.jivemailuser () https://community ! jboss ! org
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Anatoliy Kalenskiy [https://community.jboss.org/people/cybiks] created the discussion

"Non JPA transaction management for JBPM 5.3.0 or how to integrate JBPM with current \
application that use HibernateTransactionManager ?"

To view the discussion, visit: https://community.jboss.org/message/757060#757060

--------------------------------------------------------------
Hi all,

I have an application - Spring+Hibernate.
All transactions management described in spring config:

 <bean id="transactionManager"
                   class="org.springframework.orm.hibernate4.HibernateTransactionManager">
  <property name="dataSource" ref="dataSource"/>
               <property name="sessionFactory" ref="sessionFactory"/>
       </bean>

       <!-- enables the configuration of transactional behavior based on annotations \
-->  <tx:annotation-driven transaction-manager="transactionManager"/>

So in code we just use:

@Transactional(propagation = Propagation.REQUIRES_NEW)
       public void handleEvent(Event event) {
         List<EventAction> eventActions =   event.getEventactions();
                   for(EventAction action : eventActions) {
                               actions.run();
           }
}

   So all actions runs in one transaction. Now we want to use   JBPM process to run \
such actions. We create some jbpm process com.example.process and   rewrite our code \
to : @Transactional(propagation = Propagation.REQUIRES_NEW)
       public void handleEvent(Event event) {
         List<EventAction> eventActions =   event.getEventactions();
         Map<String, EventAction> actions = new HashMap<String, EventAction>();
  
           for(EventAction action : eventActions) {
                               actions.put(action.getDisplayName(), action);
             }
                   
                   Map<String, Object> params = new HashMap<String, Object>();
                   params.put("event", event);
                   params.put("actions", actions);
                   ksession.startProcess("com.example.process", params);
}


The main Idea to run each actions in order depending on some specisic order (by \
DisplayName). So my diagram of the process consist of sequential Service task which \
hadler looks like:

public class EventActionHandler implements WorkItemHandler {
       @Override
       public void executeWorkItem(WorkItem workItem, WorkItemManager \
workItemManager) {  
               String displayName= (String) workItem.getParameter("DisplayName");
               Map<String, EventAction> actions = ( Map<String, EventAction>)   \
workItem.getParameter("actions");  
               try {
                       (actions.get(displayName)).run();
                       System.out.println("run "+displayName+" done");
               } catch (Exception e) {
                       System.out.println("Exception "+displayName+" : " + e);
               }
               workItemManager.completeWorkItem(workItem.getId(),null);
       }
...
 }

 So each Service Task has it display name and this display name defines order . All \
works fine. I even can debug it. But now I want to see current status of the process \
-which one Service Task is executing now.  I what to use for it JBPM console. I have \
configured all war-s from jbpm-installer_5.3.0 to use my Oracle schema. And I can see \
my process in JBPM Console -> process-> Process Overview . But I whant to see current \
instances of such processes. As I understand (to store in DB nessesary data for \
process instancess) I should do steps described in : \
jbpm-5.3.0.Final-docs/jbpm-docs/html_single/index.html h2. 19.3. Spring

After words :
The following example shows a slightly more complex example, where the session is \
configured to use persistence (JPA using an in-memory database) and transaction \
(using the Spring transaction manager). I've done it and my configuration is:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:jbpm="http://drools.org/schema/drools-spring"
             xsi:schemaLocation="http://www.springframework.org/schema/beans \
                http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                                                     \
http://drools.org/schema/drools-spring http://drools.org/schema/drools-spring.xsd ">  \
                
       <bean id="entityManagerFactory" \
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">  \
                <property name="dataSource" ref="dataSource"/>
                 <property name="persistenceUnitName" \
value="org.jbpm.persistence.jpa"/>  </bean>

         <bean id="JPAtxManager" \
                class="org.springframework.orm.jpa.JpaTransactionManager">
                     <property name="entityManagerFactory" \
ref="entityManagerFactory"/>  </bean>

       <jbpm:kbase id="kbase">
               <jbpm:resources>
                       <jbpm:resource type="BPMN2" source="classpath:Events.bpmn"/>
                 </jbpm:resources>
       </jbpm:kbase>
       <jbpm:ksession id="ksession" type="stateful" kbase="kbase">
               <jbpm:configuration>
                         <jbpm:work-item-handlers>
                               <jbpm:work-item-handler name="Event Action" \
ref="eventActionHandler"/>  </jbpm:work-item-handlers>
                       <jbpm:jpa-persistence>
                               <jbpm:transaction-manager ref="JPAtxManager"/>
                               <jbpm:entity-manager-factory \
ref="entityManagerFactory"/>  </jbpm:jpa-persistence>
               </jbpm:configuration>
       </jbpm:ksession>

       <bean id="eventActionHandler" class="com.example.events.EventActionHandler">
       </bean>
</beans>

As you can see I use the same datasource as used in my application .

My persistance file is:
<?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.jbpm.persistence.jpa" >
           <provider>org.hibernate.ejb.HibernatePersistence</provider>
           <mapping-file>META-INF/JBPMorm.xml</mapping-file>
           <mapping-file>META-INF/ProcessInstanceInfo.hbm.xml</mapping-file>

           <class>org.drools.persistence.info.SessionInfo</class>
           <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
           <class>org.drools.persistence.info.WorkItemInfo</class>

           <properties>
               <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.dialect" \
value="org.hibernate.dialect.Oracle10gDialect"/>  </properties>
         </persistence-unit>
 </persistence>

When I launch JBOSS I can   see:

19:24:14,006 WARN   [org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager] \
(eventProcessingTimerFactoryBean) Unable to begin transaction: \
java.lang.NullPointerException  at \
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:696) \
[spring-tx-3.1.1.RELEASE.jar:3.1.1.RELEASE]  at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.getStatus(DroolsSpringTransactionManager.java:131) \
[drools-spring-5.4.0.Final.jar:5.4.0.Final]  at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.begin(DroolsSpringTransactionManager.java:45) \
                [drools-spring-5.4.0.Final.jar:5.4.0.Final]
       at org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:347) \
[drools-persistence-jpa-5.4.0.Final.jar:5.4.0.Final]  at \
org.drools.command.impl.CommandBasedStatefulKnowledgeSession.startProcess(CommandBasedStatefulKnowledgeSession.java:223) \
                [drools-core-5.4.0.Final.jar:5.4.0.Final]
       at com.example.EventHandlerImpl.EventHandlerImpl.handleEvent(EventHandlerImpl.java:84) \
                [classes:]
       at sun.reflect.GeneratedMethodAccessor658.invoke(Unknown Source) [:1.6.0_29]
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) \
                [rt.jar:1.6.0_29]
       at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_29]
         ...

19:24:14,065 ERROR [org.drools.persistence.SingleSessionCommandService] \
(eventProcessingTimerFactoryBean) Could not commit session: \
java.lang.RuntimeException: Unable to begin transaction  at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.begin(DroolsSpringTransactionManager.java:56) \
                [drools-spring-5.4.0.Final.jar:5.4.0.Final]
       at org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:347) \
[drools-persistence-jpa-5.4.0.Final.jar:5.4.0.Final]  at \
org.drools.command.impl.CommandBasedStatefulKnowledgeSession.startProcess(CommandBasedStatefulKnowledgeSession.java:223) \
                [drools-core-5.4.0.Final.jar:5.4.0.Final]
         at om.example.EventHandlerImpl.EventHandlerImpl.handleEvent(EventHandlerImpl.java:84) \
                [classes:]
       ...

Caused by: java.lang.NullPointerException
       at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:696) \
[spring-tx-3.1.1.RELEASE.jar:3.1.1.RELEASE]  at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.getStatus(DroolsSpringTransactionManager.java:131) \
[drools-spring-5.4.0.Final.jar:5.4.0.Final]  at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.begin(DroolsSpringTransactionManager.java:45) \
                [drools-spring-5.4.0.Final.jar:5.4.0.Final]
       ... 40 more

19:24:17,761 ERROR [stderr] (eventProcessingTimerFactoryBean) \
java.lang.RuntimeException: Unable to begin transaction 19:24:17,765 ERROR [stderr] \
(eventProcessingTimerFactoryBean)         at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.begin(DroolsSpringTransactionManager.java:56)
 19:24:17,767 ERROR [stderr] (eventProcessingTimerFactoryBean)         at \
org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:347)
 19:24:17,769 ERROR [stderr] (eventProcessingTimerFactoryBean)         at \
org.drools.command.impl.CommandBasedStatefulKnowledgeSession.startProcess(CommandBasedStatefulKnowledgeSession.java:223)
                
..
19:24:17,771 ERROR [stderr] (eventProcessingTimerFactoryBean)         at \
eterra.ca.core.gate.alternative.impl.GateEventHandlerImpl.handleGateEventJBPM(GateEventHandlerImpl.java:141)
 19:24:17,775 ERROR [stderr] (eventProcessingTimerFactoryBean)         at \
eterra.ca.core.gate.alternative.impl.GateEventHandlerImpl.handleGateEvent(GateEventHandlerImpl.java:84)
 19:24:17,777 ERROR [stderr] (eventProcessingTimerFactoryBean)         at \
sun.reflect.GeneratedMethodAccessor658.invoke(Unknown Source) 19:24:17,779 ERROR \
[stderr] (eventProcessingTimerFactoryBean)         at \
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) \
19:24:17,781 ERROR [stderr] (eventProcessingTimerFactoryBean)         at \
java.lang.reflect.Method.invoke(Method.java:597) 19:24:17,841 ERROR [stderr] \
(gateProcessingTimerFactoryBean) Caused by: java.lang.NullPointerException \
19:24:17,842 ERROR [stderr] (gateProcessingTimerFactoryBean)         at \
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:696)
 19:24:17,844 ERROR [stderr] (gateProcessingTimerFactoryBean)         at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.getStatus(DroolsSpringTransactionManager.java:131)
 19:24:17,846 ERROR [stderr] (gateProcessingTimerFactoryBean)         at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.begin(DroolsSpringTransactionManager.java:45)
 19:24:17,847 ERROR [stderr] (gateProcessingTimerFactoryBean)         ... 40 more

So what should I do with it? Looks like problems is in two dirfferent transaction \
managers.   How can I configure in spring to use one TM for both application and JBPM \
stuff? Looks like <jbpm:configuration> has only <jbpm:jpa-persistence> tag inside ? \
                How can I configure my application in right way?
--------------------------------------------------------------

Reply to this message by going to Community
[https://community.jboss.org/message/757060#757060]

Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034]



[Attachment #5 (text/html)]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; \
margin: 0; padding: 20px;">

<div>
	<table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: \
1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; \
-webkit-border-radius: 6px;">  <tbody>
			<tr>

				<td>

					<table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" \
style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: \
6px; -webkit-border-radius: 6px;">  <tbody>
							<tr>
								<td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px \
solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; \
-moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; \
                -webkit-border-top-left-radius: 5px;">
									<h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; \
                margin: 0; display: block !important;">
									<!-- To have a header image/logo replace the name below with your img tag \
                -->
									<!-- Email clients will render the images when the message is read so any \
                image -->
									<!-- must be made available on a public server, so that all recipients can \
                load the image. -->
									<a href="https://community.jboss.org/index.jspa" style="text-decoration: \
none; color: #E1E1E1">JBoss Community</a></h1>  </td>

							</tr>
							<tr>
								<td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; \
color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; \
-moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; \
-webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: \
17px; font-weight: normal;">  Non JPA transaction management for JBPM 5.3.0 or how to \
integrate JBPM with current application that use HibernateTransactionManager ? </h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/cybiks">Anatoliy \
Kalenskiy</a> in <i>jBPM</i> - <a \
href="https://community.jboss.org/message/757060#757060">View the full discussion</a> \
</span> <hr style="margin: 20px 0; border: none; background-color: #dadada; height: \
1px;">

<div class="jive-rendered-content"><p>Hi all,</p><p style="min-height: 8pt; height: \
8pt; padding: 0px;">&#160;</p><p>I have an application - Spring+Hibernate.</p><p>All \
transactions management described in spring config:</p><p style="min-height: 8pt; \
height: 8pt; padding: 0px;">&#160;</p><p> &lt;bean \
id="transactionManager"</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
class="org.springframework.orm.hibernate4.HibernateTransactionManager"&gt;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
&lt;property name="dataSource" \
ref="dataSource"/&gt;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property \
name="sessionFactory" ref="sessionFactory"/&gt;</p><p>&#160;&#160;&#160; \
&lt;/bean&gt;</p><p style="min-height: 8pt; height: 8pt; padding: \
0px;">&#160;</p><p>&#160;&#160;&#160; &lt;!-- enables the configuration of \
transactional behavior based on annotations --&gt;</p><p>&#160;&#160;&#160; \
&lt;tx:annotation-driven transaction-manager="transactionManager"/&gt;</p><p \
style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>So in code we just \
use:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre \
class="jive-pre"><code class="jive-code jive-java">@Transactional(propagation = \
Propagation.REQUIRES_NEW) &#160;&#160;&#160; <font color="navy"><b>public</b></font> \
<font color="navy"><b>void</b></font> handleEvent(Event event) <font \
color="navy">{</font> &#160;&#160;&#160;&#160; List&lt;EventAction&gt; eventActions \
=&#160; event.getEventactions(); \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font \
color="navy"><b>for</b></font>(EventAction action : eventActions) <font \
color="navy">{</font> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
actions.run(); &#160;&#160;&#160;&#160;&#160; <font color="navy">}</font>
<font color="navy">}</font>
</code></pre><p>&#160; So all actions runs in one transaction. Now we want to \
use&#160; JBPM process to run such actions.</p><p>We create some jbpm process \
com.example.process and&#160; rewrite our code to :</p><pre class="jive-pre"><code \
class="jive-code jive-java">@Transactional(propagation = Propagation.REQUIRES_NEW) \
&#160;&#160;&#160; <font color="navy"><b>public</b></font> <font \
color="navy"><b>void</b></font> handleEvent(Event event) <font color="navy">{</font> \
&#160;&#160;&#160;&#160; List&lt;EventAction&gt; eventActions =&#160; \
event.getEventactions(); &#160;&#160;&#160;&#160; Map&lt;String, EventAction&gt; \
actions = <font color="navy"><b>new</b></font> HashMap&lt;String, EventAction&gt;(); \
&#160; &#160;&#160;&#160;&#160;&#160; <font \
color="navy"><b>for</b></font>(EventAction action : eventActions) <font \
color="navy">{</font> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
actions.put(action.getDisplayName(), action); &#160;&#160;&#160;&#160;&#160;&#160; \
<font color="navy">}</font> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Map&lt;String, Object&gt; \
params = <font color="navy"><b>new</b></font> HashMap&lt;String, Object&gt;(); \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; params.put(<font \
color="red">"event"</font>, event); \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; params.put(<font \
color="red">"actions"</font>, actions); \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ksession.startProcess(<font \
color="red">"com.example.process"</font>, params); <font color="navy">}</font>
</code></pre><p>&#160; </p><p>The main Idea to run each actions in order depending on \
some specisic order (by DisplayName). So my diagram of the process consist of \
sequential Service task which hadler looks like:</p><p style="min-height: 8pt; \
height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code \
jive-java"><font color="navy"><b>public</b></font> <font \
color="navy"><b>class</b></font> EventActionHandler <font \
color="navy"><b>implements</b></font> WorkItemHandler <font color="navy">{</font> \
&#160;&#160;&#160; @Override &#160;&#160;&#160; <font \
color="navy"><b>public</b></font> <font color="navy"><b>void</b></font> \
executeWorkItem(WorkItem workItem, WorkItemManager workItemManager) <font \
color="navy">{</font> &#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160; String displayName= (String) \
workItem.getParameter(<font color="red">"DisplayName"</font>); \
&#160;&#160;&#160;&#160;&#160;&#160;&#160; Map&lt;String, EventAction&gt; actions = ( \
Map&lt;String, EventAction&gt;)&#160; workItem.getParameter(<font \
color="red">"actions"</font>); &#160;&#160;&#160;&#160;&#160;&#160;&#160; 
&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="navy"><b>try</b></font> <font \
color="navy">{</font> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
(actions.get(displayName)).run(); \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
System.out.println(<font color="red">"run "</font>+displayName+<font color="red">" \
done"</font>); &#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="navy">}</font> \
<font color="navy"><b>catch</b></font> (Exception e) <font color="navy">{</font> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
System.out.println(<font color="red">"Exception "</font>+displayName+<font \
color="red">" : "</font> + e); &#160;&#160;&#160;&#160;&#160;&#160;&#160; <font \
color="navy">}</font> &#160;&#160;&#160;&#160;&#160;&#160;&#160; \
workItemManager.completeWorkItem(workItem.getId(),<font \
color="navy"><b>null</b></font>); &#160;&#160;&#160; <font color="navy">}</font>
...
 <font color="navy">}</font>
</code></pre><p> So each Service Task has it display name and this display name \
defines order . All works fine. I even can debug it. But now I want to see current \
status of the process -which one Service Task is executing now.</p><p> I what to use \
for it JBPM console. I have configured all war-s from jbpm-installer_5.3.0 to use my \
Oracle schema. And I can see my process in JBPM Console -&gt; process-&gt; Process \
Overview .</p><p>But I whant to see current instances of such processes. As I \
understand (to store in DB nessesary data for process instancess) I should do steps \
described in :</p><p>jbpm-5.3.0.Final-docs/jbpm-docs/html_single/index.html</p><h2 \
class="title"><a class="jive-link-anchor-small">19.3. Spring</a></h2><p \
style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>After words \
:</p><p><a class="jive-link-anchor-small">The following example shows a slightly more \
complex example, where the session is configured to use persistence (JPA using an \
in-memory database) and transaction (using the Spring transaction \
manager).</a></p><p>I've done it and my configuration is:</p><pre \
class="jive-pre"><code class="jive-code jive-xml"><span class="jive-xml-tag">&lt;?xml \
version="1.0" encoding="UTF-8"?&gt;</span> <span class="jive-xml-tag"><span>&lt;beans \
xmlns="</span><a class="jive-link-external-small" \
href="http://www.springframework.org/schema/beans" \
target="_blank">http://www.springframework.org/schema/beans</a><span>" \
&#160;&#160;&#160;&#160;&#160;&#160; xmlns:xsi="</span><a \
class="jive-link-external-small" href="http://www.w3.org/2001/XMLSchema-instance" \
target="_blank">http://www.w3.org/2001/XMLSchema-instance</a><span>" \
&#160;&#160;&#160;&#160;&#160;&#160; xmlns:jbpm="</span><a \
class="jive-link-external-small" href="http://drools.org/schema/drools-spring" \
target="_blank">http://drools.org/schema/drools-spring</a><span>" \
&#160;&#160;&#160;&#160;&#160;&#160; xsi:schemaLocation="</span><a \
class="jive-link-external-small" href="http://www.springframework.org/schema/beans" \
target="_blank">http://www.springframework.org/schema/beans</a><span> </span><a \
class="jive-link-external-small" \
href="http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" \
target="_blank">http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</a><span>
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
</span><a class="jive-link-external-small" \
href="http://drools.org/schema/drools-spring" \
target="_blank">http://drools.org/schema/drools-spring</a><span> </span><a \
class="jive-link-external-small" href="http://drools.org/schema/drools-spring.xsd" \
target="_blank">http://drools.org/schema/drools-spring.xsd</a><span> \
"&gt;</span></span> &#160; 
&#160;&#160;&#160; <span class="jive-xml-tag">&lt;bean id="entityManagerFactory" \
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;property name="dataSource" ref="dataSource"/&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;property name="persistenceUnitName" \
value="org.jbpm.persistence.jpa"/&gt;</span> &#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;/bean&gt;</span>

&#160;&#160;&#160;&#160; <span class="jive-xml-tag">&lt;bean id="JPAtxManager" \
class="org.springframework.orm.jpa.JpaTransactionManager"&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;property name="entityManagerFactory" \
ref="entityManagerFactory"/&gt;</span> &#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;/bean&gt;</span>

&#160;&#160;&#160; <span class="jive-xml-tag">&lt;jbpm:kbase id="kbase"&gt;</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;jbpm:resources&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;jbpm:resource type="BPMN2" \
source="classpath:Events.bpmn"/&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;/jbpm:resources&gt;</span> &#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;/jbpm:kbase&gt;</span> &#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;jbpm:ksession id="ksession" type="stateful" \
kbase="kbase"&gt;</span> &#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;jbpm:configuration&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;jbpm:work-item-handlers&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
<span class="jive-xml-tag">&lt;jbpm:work-item-handler name="Event Action" \
ref="eventActionHandler"/&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;/jbpm:work-item-handlers&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;jbpm:jpa-persistence&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
<span class="jive-xml-tag">&lt;jbpm:transaction-manager \
ref="JPAtxManager"/&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
<span class="jive-xml-tag">&lt;jbpm:entity-manager-factory \
ref="entityManagerFactory"/&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;/jbpm:jpa-persistence&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;/jbpm:configuration&gt;</span> &#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;/jbpm:ksession&gt;</span>

&#160;&#160;&#160; <span class="jive-xml-tag">&lt;bean id="eventActionHandler" \
class="com.example.events.EventActionHandler"&gt;</span> &#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;/bean&gt;</span> <span \
class="jive-xml-tag">&lt;/beans&gt;</span> </code></pre><p>As you can see I use the \
same datasource as used in my application .</p><p style="min-height: 8pt; height: \
8pt; padding: 0px;">&#160;</p><p>My persistance file is:</p><pre \
class="jive-pre"><code class="jive-code jive-xml"><span class="jive-xml-tag">&lt;?xml \
version="1.0" encoding="UTF-8" standalone="yes"?&gt;</span> <span \
class="jive-xml-tag"><span>&lt;persistence version="1.0" \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
xsi:schemaLocation="</span><a class="jive-link-external-small" \
href="http://java.sun.com/xml/ns/persistence" \
target="_blank">http://java.sun.com/xml/ns/persistence</a><span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# \
160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
</span><a class="jive-link-external-small" \
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><span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# \
160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
</span><a class="jive-link-external-small" \
href="http://java.sun.com/xml/ns/persistence/orm" \
target="_blank">http://java.sun.com/xml/ns/persistence/orm</a><span>  \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# \
160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
</span><a class="jive-link-external-small" \
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><span>" \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
xmlns:orm="</span><a class="jive-link-external-small" \
href="http://java.sun.com/xml/ns/persistence/orm" \
target="_blank">http://java.sun.com/xml/ns/persistence/orm</a><span>" \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
xmlns:xsi="</span><a class="jive-link-external-small" \
href="http://www.w3.org/2001/XMLSchema-instance" \
target="_blank">http://www.w3.org/2001/XMLSchema-instance</a><span>" \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \
xmlns="</span><a class="jive-link-external-small" \
href="http://java.sun.com/xml/ns/persistence" \
target="_blank">http://java.sun.com/xml/ns/persistence</a><span>"&gt;</span></span>

&#160; <span class="jive-xml-tag">&lt;persistence-unit \
name="org.jbpm.persistence.jpa" &gt;</span> &#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;provider&gt;</span>org.hibernate.ejb.HibernatePersistence<span \
class="jive-xml-tag">&lt;/provider&gt;</span> &#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;mapping-file&gt;</span>META-INF/JBPMorm.xml<span \
class="jive-xml-tag">&lt;/mapping-file&gt;</span> &#160;&#160;&#160;&#160;&#160; \
<span class="jive-xml-tag">&lt;mapping-file&gt;</span>META-INF/ProcessInstanceInfo.hbm.xml<span \
class="jive-xml-tag">&lt;/mapping-file&gt;</span>

&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;class&gt;</span>org.drools.persistence.info.SessionInfo<span \
class="jive-xml-tag">&lt;/class&gt;</span> &#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;class&gt;</span>org.jbpm.persistence.processinstance.ProcessInstanceInfo<span \
class="jive-xml-tag">&lt;/class&gt;</span> &#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;class&gt;</span>org.drools.persistence.info.WorkItemInfo<span \
class="jive-xml-tag">&lt;/class&gt;</span>

&#160;&#160;&#160;&#160;&#160; <span class="jive-xml-tag">&lt;properties&gt;</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="jive-xml-tag">&lt;property \
name="hibernate.max_fetch_depth" value="3"/&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="jive-xml-tag">&lt;property \
name="hibernate.hbm2ddl.auto" value="update"/&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="jive-xml-tag">&lt;property \
name="hibernate.show_sql" value="false"/&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;property name="hibernate.dialect" \
value="org.hibernate.dialect.Oracle10gDialect"/&gt;</span> \
&#160;&#160;&#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;/properties&gt;</span> &#160;&#160;&#160;&#160; <span \
class="jive-xml-tag">&lt;/persistence-unit&gt;</span>  <span \
class="jive-xml-tag">&lt;/persistence&gt;</span> </code></pre><p>When I launch JBOSS \
I can&#160; see:</p><p style="min-height: 8pt; height: 8pt; padding: \
0px;">&#160;</p><p>19:24:14,006 WARN&#160; \
[org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager] \
(eventProcessingTimerFactoryBean) Unable to begin transaction: \
java.lang.NullPointerException</p><p>&#160;&#160;&#160; at \
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:696) \
[spring-tx-3.1.1.RELEASE.jar:3.1.1.RELEASE]</p><p>&#160;&#160;&#160; at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.getStatus(DroolsSpringTransactionManager.java:131) \
[drools-spring-5.4.0.Final.jar:5.4.0.Final]</p><p>&#160;&#160;&#160; at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.begin(DroolsSpringTransactionManager.java:45) \
[drools-spring-5.4.0.Final.jar:5.4.0.Final]</p><p>&#160;&#160;&#160; at \
org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:347) \
[drools-persistence-jpa-5.4.0.Final.jar:5.4.0.Final]</p><p>&#160;&#160;&#160; at \
org.drools.command.impl.CommandBasedStatefulKnowledgeSession.startProcess(CommandBasedStatefulKnowledgeSession.java:223) \
[drools-core-5.4.0.Final.jar:5.4.0.Final]</p><p>&#160;&#160;&#160; at \
com.example.EventHandlerImpl.EventHandlerImpl.handleEvent(EventHandlerImpl.java:84) \
[classes:]</p><p>&#160;&#160;&#160; at \
sun.reflect.GeneratedMethodAccessor658.invoke(Unknown Source) \
[:1.6.0_29]</p><p>&#160;&#160;&#160; at \
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) \
[rt.jar:1.6.0_29]</p><p>&#160;&#160;&#160; at \
java.lang.reflect.Method.invoke(Method.java:597) \
[rt.jar:1.6.0_29]</p><p>&#160;&#160;&#160;&#160; ...</p><p style="min-height: 8pt; \
height: 8pt; padding: 0px;">&#160;</p><p>19:24:14,065 ERROR \
[org.drools.persistence.SingleSessionCommandService] \
(eventProcessingTimerFactoryBean) Could not commit session: \
java.lang.RuntimeException: Unable to begin transaction</p><p>&#160;&#160;&#160; at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.begin(DroolsSpringTransactionManager.java:56) \
[drools-spring-5.4.0.Final.jar:5.4.0.Final]</p><p>&#160;&#160;&#160; at \
org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:347) \
[drools-persistence-jpa-5.4.0.Final.jar:5.4.0.Final]</p><p>&#160;&#160;&#160; at \
org.drools.command.impl.CommandBasedStatefulKnowledgeSession.startProcess(CommandBasedStatefulKnowledgeSession.java:223) \
[drools-core-5.4.0.Final.jar:5.4.0.Final]</p><p>&#160;&#160;&#160;&#160; at \
om.example.EventHandlerImpl.EventHandlerImpl.handleEvent(EventHandlerImpl.java:84) \
[classes:]</p><p>&#160;&#160;&#160; ...</p><p style="min-height: 8pt; height: 8pt; \
padding: 0px;">&#160;</p><p>Caused by: \
java.lang.NullPointerException</p><p>&#160;&#160;&#160; at \
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:696) \
[spring-tx-3.1.1.RELEASE.jar:3.1.1.RELEASE]</p><p>&#160;&#160;&#160; at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.getStatus(DroolsSpringTransactionManager.java:131) \
[drools-spring-5.4.0.Final.jar:5.4.0.Final]</p><p>&#160;&#160;&#160; at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.begin(DroolsSpringTransactionManager.java:45) \
[drools-spring-5.4.0.Final.jar:5.4.0.Final]</p><p>&#160;&#160;&#160; ... 40 \
more</p><p style="min-height: 8pt; height: 8pt; padding: \
0px;">&#160;</p><p>19:24:17,761 ERROR [stderr] (eventProcessingTimerFactoryBean) \
java.lang.RuntimeException: Unable to begin transaction</p><p>19:24:17,765 ERROR \
[stderr] (eventProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.begin(DroolsSpringTransactionManager.java:56)</p><p>19:24:17,767 \
ERROR [stderr] (eventProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; at \
org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:347)</p><p>19:24:17,769 \
ERROR [stderr] (eventProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; at \
org.drools.command.impl.CommandBasedStatefulKnowledgeSession.startProcess(CommandBasedStatefulKnowledgeSession.java:223)</p><p>..</p><p>19:24:17,771 \
ERROR [stderr] (eventProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; at \
eterra.ca.core.gate.alternative.impl.GateEventHandlerImpl.handleGateEventJBPM(GateEventHandlerImpl.java:141)</p><p>19:24:17,775 \
ERROR [stderr] (eventProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; at \
eterra.ca.core.gate.alternative.impl.GateEventHandlerImpl.handleGateEvent(GateEventHandlerImpl.java:84)</p><p>19:24:17,777 \
ERROR [stderr] (eventProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; at \
sun.reflect.GeneratedMethodAccessor658.invoke(Unknown Source)</p><p>19:24:17,779 \
ERROR [stderr] (eventProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; at \
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)</p><p>19:24:17,781 \
ERROR [stderr] (eventProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; at \
java.lang.reflect.Method.invoke(Method.java:597)</p><p>19:24:17,841 ERROR [stderr] \
(gateProcessingTimerFactoryBean) Caused by: \
java.lang.NullPointerException</p><p>19:24:17,842 ERROR [stderr] \
(gateProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; at \
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:696)</p><p>19:24:17,844 \
ERROR [stderr] (gateProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.getStatus(DroolsSpringTransactionManager.java:131)</p><p>19:24:17,846 \
ERROR [stderr] (gateProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; at \
org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager.begin(DroolsSpringTransactionManager.java:45)</p><p>19:24:17,847 \
ERROR [stderr] (gateProcessingTimerFactoryBean)&#160;&#160;&#160;&#160; ... 40 \
more</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>So what \
should I do with it? Looks like problems is in two dirfferent transaction \
managers.&#160; How can I configure in spring to use one TM for both application and \
JBPM stuff?</p><p>Looks like &lt;jbpm:configuration&gt; has only \
&lt;jbpm:jpa-persistence&gt; tag inside ? How can I configure my application in right \
way?</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a \
href="https://community.jboss.org/message/757060#757060">going to Community</a></p>  \
<p style="margin: 0;">Start a new discussion in jBPM at <a \
href="https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034">Community</a></p>
 </div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>



_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic