<!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;">
Exposing WorkItemHandler as an EJB (3.1) and referencing that work item handler from the BPMN process definition
</h3>
<span style="margin-bottom: 10px;">
created by <a href="https://community.jboss.org/people/xmrk">Mark Egan</a> in <i>jBPM</i> - <a href="https://community.jboss.org/message/747651#747651">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">
<div class="jive-rendered-content"><p><span> JBPM 4.4 allowed us to expose an EJB and reference that <java> node within the JPDL using the attribute ejb-jndi-name ([per devguide:</span><a class="jive-link-external-small" href="http://docs.jboss.com/jbpm/v4/devguide/html_single/#java" target="_blank">http://docs.jboss.com/jbpm/v4/devguide/html_single/#java</a><span>]).  This was remarkable as it allowed deploying new, heavy Activities without the need of cracking open the process engine component itself.</span></p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>+Does jBPM 5.x have any similar capabilities?+</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>The following two options would allow a similar pattern.  I have made an attempt to avoid Spring injection as I haven't found a need for it given the current capabilities of EJB 3.1 / CDI:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>-----</p><p>#1: Implement a configuration @Singleton internal to the process engine component that exposes the following:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>{code}public void addWorkItemHandler(String id, WorkItemHandler workItem);</p><p>public void removeWorkItemHandler(String id);{code}</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>and delegates the following:</p><p>{code}private Map<String, WorkItemHandlers> workItemHandlers;{code}</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Implement an external @Singleton EJB that provides a WorkItemHandler.  That WorkItemHandler is injected with configuration @Singleton and registers itself with that configuration during the @PostConstruct callback. </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>I used singletons here to easy state consistency (or render it unnecessary).  As such, it doesn't take advantage of pooling.  There may be ways to do something similar with other EJB 3.1 / CDI technologies - I haven't explored some of the other options.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>-----</p><p>#2: Implement a proxy WorkItemHandler internal to the process engine component that is provided a JNDI name within the parameters Map.  That WorkItemHandler would perform a lookup on the JNDI name and call executeWorkItem on the resolved resource by forwarding the original workItem and manager.  This would allow container managed pooling.  </p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>-----</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>I originally implemented #1 when I jumped into this issue only to think of #2 later.  I'll likely be refactoring to the #2 pattern if no one has a better option for me.  My hope is that jBPM 5.x already provides a community vetted and exercised solution rather than having to implement my own.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Thanks,</p><p>-mark</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/747651#747651">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>