CDI Support
Imixs-Workflow supports CDI for all service components which makes it easy to tie different services together. For example an EJB or a Resource can be easily injected into a plugin class by the corresponding annotation. See the following example:
public class DemoPlugin extends AbstractPlugin {
// inject services...
@EJB
ModelService modelService;
...
}
EJB JNDI Lookup
In some situations where CDI does not work, it can be necessary to fetch a Service EJB by a JNDI lookup.
The following Example shows a JNDI Lookup for an external Service EJB from the WorkflowService:
MyServiceBean myService;
try {
String ejbName="ejb/MyServiceBean";
InitialContext ic = new InitialContext();
myService = (MyServiceBean) ic.lookup(ejbName);
} catch (Exception e) {
e.printStackTrace();
workflowService = null;
}
The JNDI Name is defined by the application server. To lookup a EJB or resoure by JNDI name, the name need to be configured in ejb-jar.xml. The following example shows the configuration for wildfly:
...
<session>
<ejb-name>WorkflowService</ejb-name>
<ejb-class>org.imixs.workflow.engine.WorkflowService</ejb-class>
<session-type>Stateless</session-type>
....
<!-- MyServiceBean -->
<ejb-ref>
<ejb-ref-name>ejb/MyServiceBean</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<remote>org.foo.MyServiceBean</remote>
</ejb-ref>
....
</session>
</enterprise-beans>
...