Chapter 16. CDI Integration

16.1. About CDI

Apart from the API based approach, Red Hat JBoss BPM Suite 6 also provides the Context and Dependency Injection (CDI) to build your custom applications. CDI is a collection of component management services for the Java EE platform that enables developers to use enterprise beans in web applications. The benefits of CDI include a simplified architecture and more resuable code.

The jbpm-services-cdi module provides CDI wrappers of Kie Services that enable these services to be injected in any CDI bean.

Warning

A workaround is needed on the Oracle WebLogic Server for CDI to work. For more information, see Additional Notes in the Red Hat JBoss BPM Suite Oracle WebLogic Installation and Configuration Guide.

16.2. Defining MBeans for CDI Integration

To make use of jbpm-kie-services in your system, you must provide some MBeans to satisfy all dependencies of the services. There are several MBeans that depend on actual scenarios.

  • Entity manager and entity manager factory
  • User group callback for human tasks
  • Identity provider to pass authenticated user information to the services

Procedure

  1. When running in a JEE environment such as JBoss Application Server, ensure that the mbean satisfies all requirements of the jbpm-kie-services:

    public class EnvironmentProducer {
    
        @PersistenceUnit(unitName = "org.jbpm.domain")
        private EntityManagerFactory emf;
    
        @Inject
        @Selectable
        private UserGroupCallback userGroupCallback;
    
        @Produces
        public EntityManagerFactory getEntityManagerFactory() {
            return this.emf;
        }
    
        @Produces
        @RequestScoped
        public EntityManager getEntityManager() {
            EntityManager em = emf.createEntityManager();
            return em;
        }
    
        public void close(@Disposes EntityManager em) {
            em.close();
        }
    
        @Produces
        public UserGroupCallback produceSelectedUserGroupCalback() {
            return userGroupCallback;
        }
        @Produces
    
        public IdentityProvider produceIdentityProvider {
            return new IdentityProvider() {
                 // implement IdentityProvider
            };
        }
    }
  2. Configure the deployments/business-central.war/WEB-INF/beans.xml file to change the current settings of the new usergroupcallback implementation:

    <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd">
    
    <alternatives>
      <class>org.jbpm.services.task.identity.JAASUserGroupCallbackImpl</class>
    </alternatives>
    
    </beans>
    Note

    org.jbpm.services.task.identity.JAASUserGroupCallbackImpl is just an example here to demonstrate the settings of the application server regardless of what it actually is (LDAP, DB, etc).