org.camunda.bpm.application.impl
Class EjbProcessApplication

java.lang.Object
  extended by org.camunda.bpm.application.AbstractProcessApplication
      extended by org.camunda.bpm.application.impl.EjbProcessApplication
All Implemented Interfaces:
ProcessApplicationInterface

public class EjbProcessApplication
extends AbstractProcessApplication

Common base class for writing EJB process applications.

An EJB Process Application exposes itself as a Session Bean Component inside the EJB container. This determines the invocation semantics when invoking code from the process application and the nature of the ProcessApplicationReference held by the process engine.

Usage

In order to add a custom EJB process application to your application, extend this class and configure it as follows:

 @ProcessApplication("my process application")
 @Singleton
 @Startup 
 @ConcurrencyManagement(ConcurrencyManagementType.BEAN) 
 @TransactionAttribute(TransactionAttributeType.REQUIRED)
 public class DefaultEjbProcessApplication extends EjbProcessApplication {
   
   @PostConstruct
   public void deploy() {
     super.deploy();
   }
 
   @PreDestroy
   public void undeploy() {
     super.undeploy();
   }
 }
 

(the same Metadata can of course be provided using an XML-based ejb-jar.xml deployment descriptor

Invocation Semantics

This allows the process engine as well as other applications to invoke this EJB Process Application and get EJB invocation semantics for the invocation. For example, if your process application provides a JavaDelegate implementation, the process engine will call the EjbProcessApplication's execute(java.util.concurrent.Callable) Method and from that method invoke the JavaDelegate. This makes sure that

                        Big pile of EJB interceptors
                                     |
                                     |  +--------------------+    
                                     |  |Process Application |
                       invoke        v  |                    |
      ProcessEngine ----------------OOOOO--> Java Delegate   |
                                        |                    |
                                        |                    |
                                        +--------------------+
                                        
 

Process Application Reference

When the process application registers with a process engine (see ManagementService.registerProcessApplication(String, ProcessApplicationReference), the process application passes a reference to itself to the process engine. This reference allows the process engine to reference the process application. The EjbProcessApplication takes advantage of the Ejb Containers naming context and passes a reference containing the EJBProcessApplication's Component Name to the process engine. Whenever the process engine needs access to process application, the actual component instance is looked up and invoked.

Author:
Daniel Meyer

Field Summary
protected static String EJB_CONTEXT_PATH
           
protected static String JAVA_APP_APP_NAME_PATH
           
protected static String MODULE_NAME_PATH
           
 
Fields inherited from class org.camunda.bpm.application.AbstractProcessApplication
isDeployed, processApplicationBeanElResolver, processApplicationElResolver
 
Constructor Summary
EjbProcessApplication()
           
 
Method Summary
protected  String autodetectProcessApplicationName()
          Override this method to autodetect an application name in case the ProcessApplication annotation was used but without parameter.
protected  void ensureInitialized()
           
<T> T
execute(Callable<T> callable)
          The default implementation simply modifies the Context ClassLoader
protected  Class<? extends ProcessApplicationInterface> getBusinessInterface()
          allows subclasses to provide a custom business interface
 ProcessApplicationReference getReference()
          Returns a globally sharable reference to this process application.
protected  String lookupEeApplicationName()
          determine the ee application name based on information obtained from JNDI.
protected  ProcessApplicationInterface lookupSelfReference()
          lookup a proxy object representing the invoked business view of this component.
 
Methods inherited from class org.camunda.bpm.application.AbstractProcessApplication
createDeployment, deploy, getBeanElResolver, getElResolver, getExecutionListener, getName, getProcessApplicationClassloader, getProperties, getRawObject, getTaskListener, initProcessApplicationElResolver, undeploy
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MODULE_NAME_PATH

protected static String MODULE_NAME_PATH

JAVA_APP_APP_NAME_PATH

protected static String JAVA_APP_APP_NAME_PATH

EJB_CONTEXT_PATH

protected static String EJB_CONTEXT_PATH
Constructor Detail

EjbProcessApplication

public EjbProcessApplication()
Method Detail

getReference

public ProcessApplicationReference getReference()
Description copied from interface: ProcessApplicationInterface

Returns a globally sharable reference to this process application. This reference may be safely passed to the process engine. And other applications.

Returns:
a globally sharable reference to this process application.

autodetectProcessApplicationName

protected String autodetectProcessApplicationName()
Description copied from class: AbstractProcessApplication
Override this method to autodetect an application name in case the ProcessApplication annotation was used but without parameter.

Specified by:
autodetectProcessApplicationName in class AbstractProcessApplication

getBusinessInterface

protected Class<? extends ProcessApplicationInterface> getBusinessInterface()
allows subclasses to provide a custom business interface


execute

public <T> T execute(Callable<T> callable)
          throws ProcessApplicationExecutionException
Description copied from interface: ProcessApplicationInterface
The default implementation simply modifies the Context ClassLoader

Specified by:
execute in interface ProcessApplicationInterface
Overrides:
execute in class AbstractProcessApplication
Parameters:
callable - the callable to be executed "within" the context of this process application.
Returns:
the result of the callback
Throws:
ProcessApplicationExecutionException

ensureInitialized

protected void ensureInitialized()

lookupSelfReference

protected ProcessApplicationInterface lookupSelfReference()
lookup a proxy object representing the invoked business view of this component.


lookupEeApplicationName

protected String lookupEeApplicationName()
determine the ee application name based on information obtained from JNDI.



Copyright © 2015 camunda services GmbH. All rights reserved.