<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Sorry, to be clear: a github link to the code you quoted is what I
    was after. <br>
    <br>
    03/19/2012 10:33 PM, Marco Rietveld:
    <blockquote cite="mid:4F67A60C.9020409@redhat.com" type="cite">
      <meta content="text/html; charset=ISO-8859-1"
        http-equiv="Content-Type">
      Alberto, <br>
      <br>
      Sorry to hear that the bug isn't fixed. <br>
      <br>
      Could you clarify what you mean by these points? <br>
      &nbsp;&nbsp; - Drools and JBPM have different persistence managers.<br>
      &nbsp;&nbsp; - Drools uses JTA for persistence and JBPM does not.<br>
      <br>
      I was pretty sure you could specify a JTA data source in the
      persistence.xml that jBPM uses. <br>
      <br>
      As for the persistence managers, what do you mean exactly? <br>
      <br>
      Also, if you could maybe give me a github link referring to the
      code you're using, that would be great. <br>
      <br>
      (Just to make sure, you are referring to jbpm <b>5</b>, right?)<br>
      <br>
      Thanks,<br>
      Marco<br>
      <br>
      <br>
      03/19/2012 06:23 PM, Alberto R. Galdo:
      <blockquote
cite="mid:CADrEBQHW+GWVP1fyj_zak+b_a_XRnFwhY-SBFpMv5COgz4+_FQ@mail.gmail.com"
        type="cite">I'm afraid this bug is not resolved and doesn't have
        nothing to do with lazy evaluation.<br>
        <br>
        We've been able to get to the source of the problem and this are
        the facts:<br>
        <br>
        &nbsp;&nbsp; - Drools and JBPM have different persistence managers.<br>
        &nbsp;&nbsp; - Drools uses JTA for persistence and JBPM does not.<br>
        &nbsp;&nbsp; - When any JPA enabled object is persisted in Drools, a
        transaction begins, it's EntityManager ( Hibernate ) joins the
        transaction and the entity gets persisted. <br>
        &nbsp;&nbsp; - When any JPA enabled object ( in this case a
        ProcessInstanceInfo ) is persisted in JBPM, there are no
        transactions involved, and so the EntityManager ( Hibernate )
        decides to delay the insert ( queuing it as there's no
        transaction in progress ). Then the processId never gets updated
        and the NPE arises.<br>
        <br>
        The problem here seems to be that both Drools and JBPM manage
        persistence in different and incompatible ways. We've been able
        to modify jbpm-persistence-jpa to open a JTA transaction before
        persisting ProcessInstanceInfo, getting the EntityManager
        joining that transaction and using the current Bitronix
        implementation already running in Drools ( to assist persistence
        for their objects ) .. like so:<br>
        <br>
        &nbsp;&nbsp;&nbsp; public void setKnowledgeRuntime(InternalKnowledgeRuntime
        kruntime) {<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.kruntime = kruntime;<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Environment env = kruntime.getEnvironment();<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object tm = env.get( EnvironmentName.TRANSACTION_MANAGER
        );<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(tm instanceof
        javax.transaction.TransactionManager)) {<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // &nbsp;&nbsp;&nbsp; get Bitronix instance inside ...<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; java.lang.reflect.Field field =
        tm.getClass().getDeclaredField("tm");<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // who says private in Java is really private
        ... xD<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; field.setAccessible(true);<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tm = field.get(tm);<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Exception e){<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.printStackTrace();<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.txm = new JtaTransactionManager( env.get(
        EnvironmentName.TRANSACTION ), env.get(
        EnvironmentName.TRANSACTION_SYNCHRONIZATION_REGISTRY ), tm );<br>
        &nbsp;&nbsp;&nbsp; }<br>
        <br>
        &nbsp;&nbsp;&nbsp; public void addProcessInstance(ProcessInstance
        processInstance) {<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProcessInstanceInfo processInstanceInfo = new
        ProcessInstanceInfo( processInstance,
        this.kruntime.getEnvironment() );<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProcessPersistenceContext context =
        ((ProcessPersistenceContextManager)
        this.kruntime.getEnvironment().get(
        EnvironmentName.PERSISTENCE_CONTEXT_MANAGER
        )).getProcessPersistenceContext();<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.txm.begin();<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context.persist( processInstanceInfo );<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.txm.commit();<br>
        <br>
        <br>
        <br>
        I think we can agree that the previous lines of code are not the
        most elegant solution&nbsp; ( at least not for me ).<br>
        <br>
        So, Is there any timeline for merging DROOLS and JBPM 5
        persistence managers?&nbsp;&nbsp; <br>
        <br>
        If someone gives me advice and architectural hints ( and if it
        is doable in a reasonable ammount of time ) I would be eager to
        submit a patch for this ....<br>
        <br>
        <br clear="all">
        Alberto R. Galdo<br>
        <a moz-do-not-send="true" href="mailto:argaldo@gmail.com">argaldo@gmail.com</a><br>
        <br>
        <br>
        <div class="gmail_quote">On Wed, Mar 14, 2012 at 13:56, Alberto
          R. Galdo <span dir="ltr">&lt;<a moz-do-not-send="true"
              href="mailto:argaldo@gmail.com">argaldo@gmail.com</a>&gt;</span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">Great
            news!<br>
            <br>
            We were in the process of debugging JBPM trying to find the
            source of the bug ... and maybe days away from the solution
            ...<br>
            <br>
            Is there any bug report in Jira and/or a patch we can apply
            without having to wait for the next release so we can
            quick-patch our systems?<span class="HOEnZb"><font
                color="#888888"><br>
                <br>
                <br clear="all">
                Alberto R. Galdo<br>
                <a moz-do-not-send="true"
                  href="mailto:argaldo@gmail.com" target="_blank">argaldo@gmail.com</a></font></span>
            <div class="HOEnZb">
              <div class="h5"><br>
                <br>
                <br>
                <div class="gmail_quote">On Wed, Mar 14, 2012 at 13:09,
                  Marco Rietveld <span dir="ltr">&lt;<a
                      moz-do-not-send="true"
                      href="mailto:mrietvel@redhat.com" target="_blank">mrietvel@redhat.com</a>&gt;</span>
                  wrote:<br>
                  <blockquote class="gmail_quote" style="margin:0 0 0
                    .8ex;border-left:1px #ccc solid;padding-left:1ex">
                    <div bgcolor="#FFFFFF" text="#000000"> <br>
                      Hi Alberto, <br>
                      <br>
                      This is a bug that has been fixed in jBPM. It had
                      to do with lazy initialization of a <font
                        face="Default Sans
                        Serif,Verdana,Arial,Helvetica,sans-serif">JPAProcessInstanceManager</font>
                      field. <br>
                      <br>
                      We'll be releasing a new jBPM version sometime
                      soon (synchronous with Drools, I think). The bug
                      is fixed in there. <br>
                      <br>
                      Regards,<br>
                      Marco<br>
                      <br>
                      03/08/2012 11:32 AM, Alberto R. Galdo:
                      <blockquote type="cite">
                        <div>
                          <div><font face="Default Sans
                              Serif,Verdana,Arial,Helvetica,sans-serif">
                              <div>Hi,&nbsp;</div>
                              <div><br>
                              </div>
                              <div>&nbsp; We're running an application that
                                uses Drools + JBPM 5 + Drools
                                integration our set-up can be seen as:&nbsp;</div>
                              <div> <br>
                              </div>
                              <div>&nbsp; Some rule fires and creates a JBPM
                                process ( a fact gets inserted into
                                drools using
                                "kcontext.getKnowledgeRuntime().startProcess("testProcess")"
                                ). We have a problem with the
                                persistence of this processes.
                                Persistence is implemented with JPA and
                                JTA. Our application runs with
                                fireUntilHalt() and when a process is
                                launched from the consequence of any of
                                the rules the persistence of the process
                                fails. If the application runs with
                                fireAllRules(), the persistence works
                                like a charm.</div>
                              <div>&nbsp;&nbsp;</div>
                              <div>&nbsp; The error shown is as follow:</div>
                              <div>&nbsp;&nbsp;</div>
                              <div>&nbsp; Exception in thread "Thread-5"
                                Exception executing consequence for rule
                                "Run Process" in com.sample:
                                java.lang.NullPointerException</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1101)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1029)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireUntilHalt(DefaultAgenda.java:1229)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.drools.common.AbstractWorkingMemory.fireUntilHalt(AbstractWorkingMemory.java:754)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.drools.common.AbstractWorkingMemory.fireUntilHalt(AbstractWorkingMemory.java:730)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.drools.command.runtime.rule.FireUntilHaltCommand$1.run(FireUntilHaltCommand.java:50)</div>
                              <div><span style="white-space:pre-wrap"> </span>at


                                java.lang.Thread.run(Thread.java:662)</div>
                              <div>Caused by:
                                java.lang.NullPointerException</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.jbpm.persistence.processinstance.JPAProcessInstanceManager.addProcessInstance(JPAProcessInstanceManager.java:44)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.jbpm.process.instance.AbstractProcessInstanceFactory.createProcessInstance(AbstractProcessInstanceFactory.java:36)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.jbpm.process.instance.ProcessRuntimeImpl.startProcess(ProcessRuntimeImpl.java:182)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.jbpm.process.instance.ProcessRuntimeImpl.createProcessInstance(ProcessRuntimeImpl.java:154)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.jbpm.process.instance.ProcessRuntimeImpl.startProcess(ProcessRuntimeImpl.java:135)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.jbpm.process.instance.ProcessRuntimeImpl.startProcess(ProcessRuntimeImpl.java:130)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1074)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.drools.impl.StatefulKnowledgeSessionImpl.startProcess(StatefulKnowledgeSessionImpl.java:301)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
com.sample.Rule_Run_Process.defaultConsequence(Rule_Run_Process.java:9)</div>
                              <div><span style="white-space:pre-wrap"> </span>at


                                com.sample.Rule_Run_ProcessDefaultConsequenceInvoker.evaluate(Unknown


                                Source)</div>
                              <div><span style="white-space:pre-wrap"> </span>at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1091)</div>
                              <div><span style="white-space:pre-wrap"> </span>...

                                6 more</div>
                              <div><span style="white-space:pre-wrap"> </span></div>
                              <div><span style="white-space:pre-wrap"> </span>The

                                problem is in this function:</div>
                              <div><span style="white-space:pre-wrap"> </span></div>
                              <div><span style="white-space:pre-wrap"> </span>public

                                void addProcessInstance(ProcessInstance
                                processInstance) {</div>
                              <div>&nbsp; &nbsp; &nbsp; &nbsp; ProcessInstanceInfo
                                processInstanceInfo = new
                                ProcessInstanceInfo( processInstance,
                                this.kruntime.getEnvironment() );</div>
                              <div>&nbsp; &nbsp; &nbsp; &nbsp; ProcessPersistenceContext
                                context&nbsp;</div>
                              <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
                                ((ProcessPersistenceContextManager)
                                this.kruntime.getEnvironment()</div>
                              <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .get(
                                EnvironmentName.PERSISTENCE_CONTEXT_MANAGER
                                ))</div>
                              <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                .getProcessPersistenceContext();</div>
                              <div>&nbsp; &nbsp; &nbsp; &nbsp; // @PrePersist added to
                                ProcessInstanceInfo because of this</div>
                              <div>&nbsp; &nbsp; &nbsp; &nbsp; context.persist(
                                processInstanceInfo );</div>
                              <div>&nbsp; &nbsp; &nbsp; &nbsp;
                                ((org.jbpm.process.instance.ProcessInstance)
                                processInstance).setId(
                                processInstanceInfo.getId() );</div>
                              <div>&nbsp; &nbsp; &nbsp; &nbsp;
                                processInstanceInfo.updateLastReadDate();</div>
                              <div>&nbsp; &nbsp; &nbsp; &nbsp;
                                internalAddProcessInstance(processInstance);</div>
                              <div>&nbsp; &nbsp; }</div>
                              <div><span style="white-space:pre-wrap"> </span></div>
                              <div><span style="white-space:pre-wrap"> </span>We

                                think after that persist sentence, the
                                entity manager would have to run a flush
                                sentence for the process instance is
                                inserted into database and get the ID.</div>
                              <div><span style="white-space:pre-wrap"> </span></div>
                              <div><span style="white-space:pre-wrap"> </span>Greets.</div>
                            </font> <br>
                            <fieldset></fieldset>
                            <br>
                          </div>
                        </div>
                        <div>
                          <pre>_______________________________________________
rules-users mailing list
<a moz-do-not-send="true" href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a>
<a moz-do-not-send="true" href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a>
</pre>
                        </div>
                      </blockquote>
                      <span><font color="#888888"> <br>
                          <br>
                          <pre cols="72">-- 
jBPM/Drools developer
Utrecht, the Netherlands</pre>
                        </font></span></div>
                  </blockquote>
                </div>
                <br>
              </div>
            </div>
          </blockquote>
        </div>
        <br>
      </blockquote>
      <br>
      <br>
      <pre class="moz-signature" cols="72">-- 
jBPM/Drools developer
Utrecht, the Netherlands</pre>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
jBPM/Drools developer
Utrecht, the Netherlands</pre>
  </body>
</html>