11 Replies Latest reply on Oct 16, 2009 1:52 PM by Stephen Lin

    Problem configuring jBPM4 with Spring

    Bogdan Jarnea Newbie

      Hi

      I have a problem related to configuring jBPM 4 and Spring.

      Here is jbpm.cfg.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      
      <jbpm-configuration>
      
       <import resource="jbpm.jpdl.cfg.xml" />
       <import resource="jbpm.identity.cfg.xml" />
       <import resource="jbpm.jobexecutor.cfg.xml" />
      
       <process-engine-context>
       <repository-service />
       <repository-cache />
       <execution-service />
       <history-service />
       <management-service />
       <identity-service />
       <task-service />
      
       <!-- Here we needed to change the transaction interceptor to spring-transaction-interceptor -->
       <command-service>
       <spring-transaction-interceptor />
       <retry-interceptor type="jta" />
       <environment-interceptor />
       </command-service>
      
       <!-- Added spring as read-context -->
       <script-manager default-expression-language="juel"
       default-script-language="juel"
       read-contexts="execution, environment, process-engine, spring"
       write-context="">
       <script-language name="juel"
       factory="org.jbpm.pvm.internal.script.JuelScriptEngineFactory" />
       </script-manager>
      
       <authentication />
      
       <id-generator />
       <types resource="jbpm.variable.types.xml" />
      
       <address-resolver />
      
       <business-calendar>
       <monday hours="9:00-12:00 and 12:30-17:00" />
       <tuesday hours="9:00-12:00 and 12:30-17:00" />
       <wednesday hours="9:00-12:00 and 12:30-17:00" />
       <thursday hours="9:00-12:00 and 12:30-17:00" />
       <friday hours="9:00-12:00 and 12:30-17:00" />
       <holiday period="01/07/2008 - 31/08/2008" />
       </business-calendar>
      
       <mail-template name='task-notification'>
       <to users="${task.assignee}" />
       <subject>${task.name}</subject>
       <text><![CDATA[Hi ${task.assignee},
      Task "${task.name}" has been assigned to you.
      ${task.description}
      
      Sent by JBoss jBPM
      ]]></text>
       </mail-template>
      
       <mail-template name='task-reminder'>
       <to users="${task.assignee}" />
       <subject>${task.name}</subject>
       <text><![CDATA[Hey ${task.assignee},
      Do not forget about task "${task.name}".
      ${task.description}
      
      Sent by JBoss jBPM
      ]]></text>
       </mail-template>
      
      
      
       </process-engine-context>
      
       <transaction-context>
       <transaction type="jta" />
      
       <repository-session />
       <db-session />
      
       <message-session />
       <timer-session />
       <history-session />
       <mail-session>
       <mail-server>
       <session-properties resource="jbpm.mail.properties" />
       </mail-server>
       </mail-session>
      
       <!-- Need to set explicitly that we don't want jbpm to create sessions -->
       <hibernate-session current="true" />
       </transaction-context>
      </jbpm-configuration>
      


      In Spring applicationContext I have defined the following

      <!--
       jBPM related beans
       -->
      
       <bean id="jbpmConfiguration" class="org.jbpm.pvm.internal.cfg.SpringConfiguration">
       <constructor-arg value="jbpm.cfg.xml" />
       </bean>
      
       <bean id="processEngine" factory-bean="jbpmConfiguration" factory-method="buildProcessEngine" />
       <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
       <bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService" />


      When trying to execute something like:

      NewDeployment deployment = repositoryService.createDeployment();
      deployment.addResourceFromClasspath("com/webmedia/bes/jbpm/hello-world.jpdl.xml");
      deployment.deploy();
      


      I end up with:


      by: org.jbpm.api.JbpmException: no environment for managing hibernate transaction
       at org.jbpm.pvm.internal.tx.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:53)
       at org.jbpm.pvm.internal.repository.DeploymentImpl.deploy(DeploymentImpl.java:89)
       at com.webmedia.bes.web.action.BudgetsBrowser.browse(BudgetsBrowser.java:87)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)


      I guess I am missing something obvious in the configuration. It wouldn't be the first time, if somebody can help, I would be very thankful.