<!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;">
    How to actually run process defined by Process API?
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/espinosa_cz">Jan Uhlir</a> in <i>jBPM</i> - <a href="https://community.jboss.org/message/719649#719649">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Manual chapter <a class="jive-link-external-small" href="http://docs.jboss.org/jbpm/v5.2/userguide/ch05.html#d0e783">5.1.3. Defining Processes Using the Process API</a> is an exciting reading cut short. There is no hint how to run just defined process, how to add the process to Knowledge API.</p><p>I rummaged forums and mail list I found this two approaches, both works me, but both have issues.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><strong>Way 1 &ndash; casting to inner implementations</strong></p><p>Casting KnowledgeBase and RulesBase to their particular implementations. This does no good to design. What is the point to have all nice and tidy interfaces like KnowledgeBuilder, KnowledgeBase, KnowledgeSession, when you have to cast to their particular impelementations in one crucial step.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Code snipplet:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code jive-java">RuleFlowProcessFactory factory = RuleFlowProcessFactory.createProcess(<font color="red">"org.jbpm.HelloWorld"</font>);
factory.name(<font color="red">"HelloWorldProcess"</font>).packageName(<font color="red">"org.jbpm"</font>).startNode(1).... <font color="darkgreen">//finish definition</font>
<font color="darkgreen">// add process definition to KnowledgeBase</font>
RuleFlowProcess processDef1 = factory.validate().getProcess();
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
KnowledgeBase kbase = kbuilder.newKnowledgeBase();
((AbstractRuleBase)((InternalKnowledgeBase)kbase).getRuleBase()).addProcess(processDef1);
<font color="darkgreen">// run the process</font>
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.startProcess(<font color="red">"org.jbpm.HelloWorld"</font>);
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><strong>Way 2 -&#160; XmlBPMNProcessDumper</strong></p><p>Using XmlBPMNProcessDumper is better on design side but (unnecessary) subsequent marshalling and unmarshalling making it not very effective variant.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Code snipplet:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code jive-java">RuleFlowProcessFactory factory = RuleFlowProcessFactory.createProcess(<font color="red">"org.jbpm.process"</font>);
factory.name(<font color="red">"My process"</font>).packageName(<font color="red">"org.jbpm"</font>).startNode(1).... <font color="darkgreen">//finish definition</font>
<font color="darkgreen">// add process definition to KnowledgeBuilder</font>
RuleFlowProcess process = factory.validate().getProcess();
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(
 ResourceFactory.newByteArrayResource(
 XmlBPMNProcessDumper.INSTANCE.dump(process).getBytes()),
 ResourceType.BPMN2);
KnowledgeBase kbase = kbuilder.newKnowledgeBase();
<font color="darkgreen">// run the process</font>
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.startProcess(<font color="red">"org.jbpm.process"</font>);
</code></pre><p style="margin-top: 0.3cm;">Source: <a class="" href="https://community.jboss.org/message/644606#644606">https://community.jboss.org/message/644606</a></p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Is there another, official, better way?</p><p>Whatever way, please amend the documentation and include some.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><strong>Underline notes</strong></p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I also checked original Drools Flow documentation - <a class="jive-link-external-small" href="http://downloads.jboss.com/drools/docs/5.1.1.34858.FINAL/drools-flow/html/ch04.html#d0e381">4.1.3. Defining Processes Using the Process API</a>. It contains 3 examples how to define process, an abundance compared to jBPM manual, but any hint how to add it to KnowledgeBase and run it.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>In the jBPM chapter &ndash; 5.1.3. - RuleFlowProcessFactory, creating RuleFlowProcess. All of sudden, from jBPM API back to Drools Flow API. Is this area of jBPM under development? Is this going to change? Covered by jBPM only APIs?</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/719649#719649">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>