<!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="http://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;">
Accessing Spring Beans within process definition
</h3>
<span style="margin-bottom: 10px;">
created by <a href="http://community.jboss.org/people/mstencel">Miroslav Štencel</a> in <i>jBPM</i> - <a href="http://community.jboss.org/message/601479#601479">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">
<div class="jive-rendered-content"><p>Are there any solution how to access Spring beans in process definition directly? The goal is to access custom beans in actions or other properties  without any need to map them implicitly for each process instance.</p><p>I tried one solution overriding default global resolver with a kind of Spring based, that searches an identifier in the Spring Context. Then every Spring bean id that is used should be declared as global within the rulebase.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>{code}</p><p>import org.drools.base.MapGlobalResolver;</p><p>import org.springframework.context.ApplicationContext;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>public class SpringGlobalResolver extends MapGlobalResolver {</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>    private ApplicationContext ctx;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>    public SpringGlobalResolver(ApplicationContext ctx)</p><p>    {</p><p>        this.ctx=ctx;</p><p>    }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>    @Override</p><p>    public Object resolveGlobal(String identifier) {</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>        if ( ctx!=null && ctx.containsBean(identifier))</p><p>            return ctx.getBean(identifier);</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>        return super.resolveGlobal(identifier);</p><p>    }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>}</p><p>{code}</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>And then I registered it to knowledge session by putting to environment map:</p><p>{code}</p><p>env.set(EnvironmentName.GLOBALS, </p><p>          new SpringGlobalResolver(ctx));</p><p>{code}</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Is this the correct approach or is there another solution? Maybe Spring beans could be exposed and access as parameters e.g. {noformat}#{beanId.method()}{noformat}. And I suppose they shouldn't be persisted.</p></div>
<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
<p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/601479#601479">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in jBPM at <a href="http://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>