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> ...