10 Replies Latest reply on Feb 13, 2009 1:08 PM by hkapoor

    Invoke jBPM workflow from external app

      Hi All,
      I am trying to figure out how can I invoke a jBPM workflow from an external java application because as per my understanding someone has to invoke the start state and then the flow can pass through.

      Here is the processdefinition.xml

      <?xml version="1.0" encoding="UTF-8"?>
      
      <process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="http-demo-process">
      
       <swimlane name="initiator">
       <assignment actor-id="manager" />
       </swimlane>
       <start-state name="start-state1">
       <task swimlane="initiator" />
       <transition to="node1"></transition>
       </start-state>
       <node name="node1">
       <action class="com.sample.action.MessageActionHandler">
       <message>Sending Message</message>
       </action>
       <transition to="end-state1"></transition>
       </node>
       <end-state name="end-state1"></end-state>
      </process-definition>


      If I deploy this code to jbpm-console i can login as a user and invoke this workflow, but instead what i want to do is write a separate java application (public static void main) from which I can invoke this workflow...

      Any examples, sample code, links, docs etc will be very helpful...

      Thanks
      Ashish

        • 1. Re: Invoke jBPM workflow from external app
          hmuller

          Hi there,

          I wrote the following class, which will invoke a workflow process. I use this from a servlet which takes normal xml over http (not soap) and then calls the process with the parameters.

          /**
           *
           */
          public class WFProcessFactory {
          
           JbpmConfiguration jbpmConfig = null;
          
           /**
           *
           * @param processId
           * @param processName
           * @param key
           * @param processVariables
           * @param signalStart
           * @return
           */
           public long startProcess(long processId, String processName, String key, HashMap processVariables, boolean signalStart) {
           long tokenId = 0;
          
           if (jbpmConfig == null) {
           jbpmConfig = JbpmConfiguration.getInstance();
           }
           JbpmContext jbpmContext = jbpmConfig.createJbpmContext();
           try {
           // get the session and process definition according to the process id
           GraphSession graphSession = jbpmContext.getGraphSession();
          
           ProcessDefinition processDefinition = null;
           if (processName.length() > 0) {
           processDefinition = graphSession.findLatestProcessDefinition(processName);
           } else {
           processDefinition = graphSession.getProcessDefinition(processId);
           }
          
           // if there are no process variables, then create an empty variable list
           if (processVariables == null) {
           processVariables = new HashMap();
           }
           // startup the process, set its business key (for correlation purposes, and
           // signal it to start going with the flow
           ProcessInstance processInstance = processDefinition.createProcessInstance(processVariables);
          
           processInstance.setKey(key);
           tokenId = processInstance.getRootToken().getId();
           if (signalStart) {
           processInstance.signal();
           }
           } finally {
           jbpmContext.close();
           }
           return tokenId;
           }
          }
          


          The XML that I post to my servlet looks something like this.

          Input:
          
           <launch_workflow>
           <process_id>401</process_id> OPTIONAL if process_name is specified
           <process_name>SomeProcessName</process_name> OPTIONAL if process_id is specified
           <process_key>401_00001</process_key>
           <process_input>
           <process_var>
           <var_name>item1</var_name>
           <var_value>value1</var_value>
           </process_var>
           <process_var>
           <var_name>item2</var_name>
           <var_value>value2</var_value>
           </process_var>
           <process_var>
           <var_name>item3</var_name>
           <var_value>value3</var_value>
           </process_var>
           <process_var>
           <var_name>item4</var_name>
           <var_value>value4</var_value>
           </process_var>
           </process_input>
           </launch_workflow>
          
          
          Output:
          
           <launch_result>
           <token_id>499</token_id>
           </launch_result>
          


          One thing to take note of: Don't re-instantiate the JBPMConfiguration object with each call, as this causes the server to run out of memory really quickly.

          I hope that this helps.

          Regards

          • 2. Re: Invoke jBPM workflow from external app

            Hi hmuller,
            I am still not able to use this with the servlet also. I used the sample which you provided and created a servlet and deployed it...but then also i am getting an error

            couldn't parse jbpm configuration from resource 'jbpm.cfg.xml'


            I am using Netbeans for my deployment of servlets and have configured the default server as jboss under the jbpm-suite path.

            Also now when i try to start the jboss server using
            run.bat -c jbpm


            I am not able to do that and its giving me errors, JbpmDS not bound.

            Please provide your inputs on how to get this deployed and working ...

            thanks
            ashish

            • 3. Re: Invoke jBPM workflow from external app

              hi Ashish,

              Were u able to solve this problem (couldn't parse jbpm configuration from resource 'jbpm.cfg.xml')?
              If yes, can you provide me with the steps.
              I am trying to call it from external java standalone program.

              Any help will be greatly appreciated.

              Regards,
              Ruchika

              • 4. Re: Invoke jBPM workflow from external app
                kukeltje

                it is all just classpath issues.... the config file has to be available

                • 5. Re: Invoke jBPM workflow from external app

                  Hello,

                  Thanks for reply.
                  I try adding 'jbpm.cfg.xml' in class path but i am getting same error.
                  Below is the complete error stack trace:

                  log4j:WARN No appenders could be found for logger (org.jbpm.JbpmConfiguration).
                  log4j:WARN Please initialize the log4j system properly.
                  Exception in thread "main" org.jbpm.JbpmException: couldn't parse jbpm configuration from resource 'jbpm.cfg.xml'
                  at org.jbpm.JbpmConfiguration.getInstance(JbpmConfiguration.java:292)
                  at org.jbpm.JbpmConfiguration.getInstance(JbpmConfiguration.java:257)
                  at org.jbpm.JbpmConfiguration$Configs.getObjectFactory(JbpmConfiguration.java:425)
                  at org.jbpm.JbpmConfiguration$Configs.getObject(JbpmConfiguration.java:437)
                  at org.jbpm.JbpmConfiguration$Configs.getString(JbpmConfiguration.java:441)
                  at org.jbpm.graph.def.ProcessDefinition.createNewProcessDefinition(ProcessDefinition.java:97)
                  at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:138)
                  at org.jbpm.graph.def.ProcessDefinition.parseXmlInputStream(ProcessDefinition.java:179)
                  at org.jbpm.graph.def.ProcessDefinition.parseXmlResource(ProcessDefinition.java:160)
                  at EvenNumbersTest.main(EvenNumbersTest.java:42)
                  Caused by: org.jbpm.JbpmException: jbpm configuration resource 'jbpm.cfg.xml' is not available
                  at org.jbpm.JbpmConfiguration.getInstance(JbpmConfiguration.java:286)
                  ... 9 more

                  I am not sure what I am missing.

                  Regards,
                  Ruchika

                  • 6. Re: Invoke jBPM workflow from external app
                    dhanushgopinath

                    Hi HMuller.

                    I too am doing the same thing, only difference is I am using a bpel process to be invoked.

                    I am using the same code. But I am getting this error.

                    Have you seen this any time. If so what must be wrong ?

                    org.jbpm.JbpmException: token 'Token(/)' can't be signalled cause it is currently not positioned in a node


                    thanks
                    dhanush

                    • 7. Re: Invoke jBPM workflow from external app

                      Hi Ruchika/Dhanush,
                      Have you guys been able to figure it out yet?

                      Let me know if not, I can send you a sample code to look at.

                      Thanks
                      Ashish

                      • 8. Re: Invoke jBPM workflow from external app
                        dhanushgopinath

                        not yet man.. any help is appreciated

                        • 9. Re: Invoke jBPM workflow from external app

                          Hi,

                          I have deployed workflow in jBPM using jbpm-console.
                          but when I am using Java class to start it I am getting folloeing exception.
                          Exception in thread "main" org.hibernate.HibernateException: Could not locate TransactionManager
                          at org.hibernate.transaction.JNDITransactionManagerLookup.getTransactionManager(JNDITransactionManagerLookup.java:26)
                          at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:325)
                          at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1300)
                          at org.jbpm.persistence.db.DbPersistenceServiceFactory.getSessionFactory(DbPersistenceServiceFactory.java:105)
                          at org.jbpm.persistence.db.DbPersistenceService.getSessionFactory(DbPersistenceService.java:95)
                          at org.jbpm.persistence.db.DbPersistenceService.getSession(DbPersistenceService.java:99)
                          at org.jbpm.persistence.db.DbPersistenceService.getGraphSession(DbPersistenceService.java:355)
                          at org.jbpm.JbpmContext.getGraphSession(JbpmContext.java:639)
                          at com.sample.action.WFProcessFactory.startProcess(WFProcessFactory.java:77)
                          at com.sample.action.WFProcessFactory.main(WFProcessFactory.java:107)
                          Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
                          at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
                          at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
                          at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
                          at javax.naming.InitialContext.lookup(Unknown Source)
                          at org.hibernate.transaction.JNDITransactionManagerLookup.getTransactionManager(JNDITransactionManagerLookup.java:23)
                          ... 9 more

                          Please Help

                          -Harshit

                          • 10. Re: Invoke jBPM workflow from external app

                            Code by hmuller worked however I had to use following jbpm.cfg.xml


                            <jbpm-configuration>
                            
                             <jbpm-context>
                             <service name="persistence">
                             <factory>
                             <bean class='org.jbpm.persistence.db.DbPersistenceServiceFactory'>
                             <field name='isCurrentSessionEnabled'><false /></field>
                             <field name='isTransactionEnabled'><false /></field>
                             </bean>
                             </factory>
                             </service>
                             <service name="message" factory="org.jbpm.msg.jms.JmsMessageServiceFactory" />
                             <service name="scheduler" factory="org.jbpm.scheduler.ejbtimer.EntitySchedulerServiceFactory" />
                             <service name="tx" factory="org.jbpm.tx.TxServiceFactory" />
                             <service name="logging" factory="org.jbpm.logging.db.DbLoggingServiceFactory" />
                             <service name="authentication" factory="org.jbpm.security.authentication.DefaultAuthenticationServiceFactory" />
                             </jbpm-context>
                            
                             <!--
                             Note, that the default job executor needs to be overwritten with a null value.
                             In the enterprise configuration there should be no job executor.
                             Async messaging is there bound to jms and timers to ejb timers.
                             -->
                             <null name="jbpm.job.executor" />
                            
                            
                             <!-- configuration resource files pointing to default configuration files in jbpm-{version}.jar -->
                             <string name='resource.hibernate.cfg.xml' value='hibernate.cfg.xml' />
                            
                            </jbpm-configuration>


                            and the following hibernate.cfg.xml


                            <?xml version='1.0' encoding='utf-8'?>
                            
                            <!DOCTYPE hibernate-configuration PUBLIC
                            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
                            
                            <hibernate-configuration>
                            <session-factory>
                            
                             <!-- hibernate dialect -->
                             <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
                            
                             <!-- JDBC connection properties (begin) === -->
                             <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
                             <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/workflowdb</property>
                             <property name="hibernate.connection.username">user</property>
                             <property name="hibernate.connection.password">paswd</property>
                             <!-- ==== JDBC connection properties (end) -->
                            
                             <!-- DataSource properties (begin) -->
                             <!-- <property name="hibernate.connection.datasource">java:/JbpmDS</property> -->
                            
                             <!-- DataSource properties (end) -->
                            
                             <!-- JTA transaction properties (begin) -->
                             <!-- <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
                             <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>
                             <property name="jta.UserTransaction">UserTransaction</property> -->
                             <!-- JTA transaction properties (end) -->
                            
                             <!-- CMT transaction properties (begin) ===
                             <property name="hibernate.transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</property>
                             <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>
                             ==== CMT transaction properties (end) -->
                            
                             <!-- ################################### -->
                             <!-- # common settings # -->
                             <!-- ################################### -->
                            
                             <!-- Automatic schema creation (begin) ===
                             <property name="hibernate.hbm2ddl.auto">create</property>
                             ==== Automatic schema creation (end) -->
                            
                             <!-- Simple memory-only cache -->
                             <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
                            
                             <!-- logging properties -->
                             <property name="hibernate.format_sql">true</property>
                             <property name="hibernate.use_sql_comments">true</property>
                            
                             <!-- ############################################ -->
                             <!-- # mapping files with external dependencies # -->
                             <!-- ############################################ -->
                            
                             <!-- Additional mappings defined per module go here -->
                             <mapping resource="hibernate.extra.hbm.xml" />
                             <mapping resource="hibernate.identity.hbm.xml" />
                            
                            
                             <!-- ###################### -->
                             <!-- # jbpm mapping files # -->
                             <!-- ###################### -->
                            
                             <!-- hql queries and type defs -->
                             <mapping resource="org/jbpm/db/hibernate.queries.hbm.xml" />
                             <!-- hql queries used in simulation for querying historical data
                             uncomment if you want to use the GetSimulationInputCommand
                             or maybe you also want to use the queries yourself
                             be patient: the queries need the stddev function to be enabled in your dialect
                             more information on this can be found here: http://www.camunda.com/business_process_simulation_news/mysql_and_stddev.html -->
                             <!--
                             <mapping resource="org/jbpm/sim/bam/hibernate.queries.hbm.xml" />
                             -->
                            
                             <!-- graph.action mapping files -->
                             <mapping resource="org/jbpm/graph/action/MailAction.hbm.xml"/>
                            
                             <!-- graph.def mapping files -->
                             <mapping resource="org/jbpm/graph/def/ProcessDefinition.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/def/Node.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/def/Transition.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/def/Event.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/def/Action.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/def/SuperState.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/def/ExceptionHandler.hbm.xml"/>
                             <mapping resource="org/jbpm/instantiation/Delegation.hbm.xml"/>
                            
                             <!-- ############################################ -->
                             <!-- # another mapping file with external dependencies # -->
                             <!-- ############################################ -->
                             <!-- following mapping file has a dependency on -->
                             <!-- 'bsh-{version}.jar'. -->
                             <!-- uncomment this if you don't have bsh on your -->
                             <!-- classpath. you won't be able to use the -->
                             <!-- script element in process definition files -->
                             <!-- has to be defined below org/jbpm/graph/def/Action.hbm.xml -->
                             <!-- due to the inline collection-cache elements below -->
                             <mapping resource="org/jbpm/graph/action/Script.hbm.xml"/>
                            
                             <!-- graph.node mapping files -->
                             <mapping resource="org/jbpm/graph/node/StartState.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/node/EndState.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/node/ProcessState.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/node/Decision.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/node/Fork.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/node/Join.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/node/MailNode.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/node/State.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/node/TaskNode.hbm.xml"/>
                            
                             <!-- context.def mapping files -->
                             <mapping resource="org/jbpm/context/def/ContextDefinition.hbm.xml"/>
                             <mapping resource="org/jbpm/context/def/VariableAccess.hbm.xml"/>
                            
                             <!-- bytes mapping files -->
                             <mapping resource="org/jbpm/bytes/ByteArray.hbm.xml"/>
                            
                             <!-- module.def mapping files -->
                             <mapping resource="org/jbpm/module/def/ModuleDefinition.hbm.xml"/>
                            
                             <!-- file.def mapping files -->
                             <mapping resource="org/jbpm/file/def/FileDefinition.hbm.xml"/>
                            
                             <!-- taskmgmt.def mapping files -->
                             <mapping resource="org/jbpm/taskmgmt/def/TaskMgmtDefinition.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/def/Swimlane.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/def/Task.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/def/TaskController.hbm.xml"/>
                            
                             <!-- scheduler.def mapping files -->
                             <mapping resource="org/jbpm/scheduler/def/CreateTimerAction.hbm.xml"/>
                             <mapping resource="org/jbpm/scheduler/def/CancelTimerAction.hbm.xml"/>
                            
                             <!-- graph.exe mapping files -->
                             <mapping resource="org/jbpm/graph/exe/Comment.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/exe/ProcessInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/exe/Token.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/exe/RuntimeAction.hbm.xml"/>
                            
                             <!-- module.exe mapping files -->
                             <mapping resource="org/jbpm/module/exe/ModuleInstance.hbm.xml"/>
                            
                             <!-- context.exe mapping files -->
                             <mapping resource="org/jbpm/context/exe/ContextInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/context/exe/TokenVariableMap.hbm.xml"/>
                             <mapping resource="org/jbpm/context/exe/VariableInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/context/exe/variableinstance/ByteArrayInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/context/exe/variableinstance/DateInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/context/exe/variableinstance/DoubleInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/context/exe/variableinstance/HibernateLongInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/context/exe/variableinstance/HibernateStringInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/context/exe/variableinstance/LongInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/context/exe/variableinstance/NullInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/context/exe/variableinstance/StringInstance.hbm.xml"/>
                            
                             <!-- job mapping files -->
                             <mapping resource="org/jbpm/job/Job.hbm.xml"/>
                             <mapping resource="org/jbpm/job/Timer.hbm.xml"/>
                             <mapping resource="org/jbpm/job/ExecuteNodeJob.hbm.xml"/>
                             <mapping resource="org/jbpm/job/ExecuteActionJob.hbm.xml"/>
                             <mapping resource="org/jbpm/job/CleanUpProcessJob.hbm.xml"/>
                            
                             <!-- taskmgmt.exe mapping files -->
                             <mapping resource="org/jbpm/taskmgmt/exe/TaskMgmtInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/exe/TaskInstance.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/exe/PooledActor.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/exe/SwimlaneInstance.hbm.xml"/>
                            
                             <!-- logging mapping files -->
                             <mapping resource="org/jbpm/logging/log/ProcessLog.hbm.xml"/>
                             <mapping resource="org/jbpm/logging/log/MessageLog.hbm.xml"/>
                             <mapping resource="org/jbpm/logging/log/CompositeLog.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/log/ActionLog.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/log/NodeLog.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/log/ProcessInstanceCreateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/log/ProcessInstanceEndLog.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/log/ProcessStateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/log/SignalLog.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/log/TokenCreateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/log/TokenEndLog.hbm.xml"/>
                             <mapping resource="org/jbpm/graph/log/TransitionLog.hbm.xml"/>
                             <mapping resource="org/jbpm/context/log/VariableLog.hbm.xml"/>
                             <mapping resource="org/jbpm/context/log/VariableCreateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/context/log/VariableDeleteLog.hbm.xml"/>
                             <mapping resource="org/jbpm/context/log/VariableUpdateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/context/log/variableinstance/ByteArrayUpdateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/context/log/variableinstance/DateUpdateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/context/log/variableinstance/DoubleUpdateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/context/log/variableinstance/HibernateLongUpdateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/context/log/variableinstance/HibernateStringUpdateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/context/log/variableinstance/LongUpdateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/context/log/variableinstance/StringUpdateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/log/TaskLog.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/log/TaskCreateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/log/TaskAssignLog.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/log/TaskEndLog.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/log/SwimlaneLog.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/log/SwimlaneCreateLog.hbm.xml"/>
                             <mapping resource="org/jbpm/taskmgmt/log/SwimlaneAssignLog.hbm.xml"/>
                            
                             <!-- ################################### -->
                             <!-- # cache settings # -->
                             <!-- # strategy="nonstrict-read-write" # -->
                             <!-- # can be used with hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider # -->
                             <!-- ################################### -->
                            
                             <class-cache class="org.jbpm.context.def.VariableAccess" usage="nonstrict-read-write" />
                            
                             <collection-cache collection="org.jbpm.file.def.FileDefinition.processFiles" usage="nonstrict-read-write" />
                            
                             <collection-cache collection="org.jbpm.graph.action.Script.variableAccesses" usage="nonstrict-read-write" />
                            
                             <class-cache class="org.jbpm.graph.def.Action" usage="nonstrict-read-write" />
                            
                             <class-cache class="org.jbpm.graph.def.Event" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.Event.actions" usage="nonstrict-read-write" />
                            
                             <class-cache class="org.jbpm.graph.def.ExceptionHandler" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.ExceptionHandler.actions" usage="nonstrict-read-write" />
                            
                             <class-cache class="org.jbpm.graph.def.Node" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.Node.events" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.Node.exceptionHandlers" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.Node.leavingTransitions" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.Node.arrivingTransitions" usage="nonstrict-read-write" />
                            
                             <class-cache class="org.jbpm.graph.def.ProcessDefinition" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.ProcessDefinition.events" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.ProcessDefinition.exceptionHandlers" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.ProcessDefinition.nodes" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.ProcessDefinition.actions" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.ProcessDefinition.definitions" usage="nonstrict-read-write" />
                            
                             <collection-cache collection="org.jbpm.graph.def.SuperState.nodes" usage="nonstrict-read-write" />
                            
                             <class-cache class="org.jbpm.graph.def.Transition" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.Transition.events" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.graph.def.Transition.exceptionHandlers" usage="nonstrict-read-write" />
                            
                             <collection-cache collection="org.jbpm.graph.node.Decision.decisionConditions" usage="nonstrict-read-write" />
                            
                             <collection-cache collection="org.jbpm.graph.node.ProcessState.variableAccesses" usage="nonstrict-read-write" />
                            
                             <collection-cache collection="org.jbpm.graph.node.TaskNode.tasks" usage="nonstrict-read-write" />
                            
                             <class-cache class="org.jbpm.instantiation.Delegation" usage="nonstrict-read-write" />
                            
                             <class-cache class="org.jbpm.module.def.ModuleDefinition" usage="nonstrict-read-write" />
                            
                             <collection-cache collection="org.jbpm.taskmgmt.def.Swimlane.tasks" usage="nonstrict-read-write" />
                            
                             <class-cache class="org.jbpm.taskmgmt.def.TaskController" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.taskmgmt.def.TaskController.variableAccesses" usage="nonstrict-read-write" />
                            
                             <class-cache class="org.jbpm.taskmgmt.def.Task" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.taskmgmt.def.Task.events" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.taskmgmt.def.Task.exceptionHandlers" usage="nonstrict-read-write" />
                            
                             <collection-cache collection="org.jbpm.taskmgmt.def.TaskMgmtDefinition.swimlanes" usage="nonstrict-read-write" />
                             <collection-cache collection="org.jbpm.taskmgmt.def.TaskMgmtDefinition.tasks" usage="nonstrict-read-write" />
                            
                            
                            </session-factory>
                            </hibernate-configuration>


                            basically I have commented JTA transaction properties and CMT transaction properties. I am unaware of the implications.
                            Can someone throw some light on it.

                            -Harshit