[jboss-user] [jBPM Development] - JBPM4.3 Integration with Spring3.0.1 and Hibernate standalone
Satish Raju
do-not-reply at jboss.com
Mon Apr 19 06:26:41 EDT 2010
Satish Raju [http://community.jboss.org/people/satishkr] created the discussion
"JBPM4.3 Integration with Spring3.0.1 and Hibernate standalone"
To view the discussion, visit: http://community.jboss.org/message/538238#538238
--------------------------------------------------------------
I wanted to create a basic standalone application as a test environment for JBPM 4.3 and spring before I used it in my application. So I had the following configuration
I am using oracle 10g DBMS, Hibernate 3.x, Spring 3.0.1 Release with JBPM 4.3. Here goes my configuration
jbpm.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<jbpm-configuration spring="enabled">
<process-engine-context>
<repository-service />
<repository-cache />
<execution-service />
<history-service />
<management-service />
<identity-service />
<task-service />
<command-service name="txRequiredCommandService">
<retry-interceptor />
<environment-interceptor />
<spring-transaction-interceptor current="true"/>
</command-service>
<object>
<field name="commandService">
<ref object="txRequiredCommandService" />
</field>
</object>
<object init="eager" />
<transaction-context>
<repository-session />
<db-session />
<message-session />
<timer-session />
<history-sessions/>
<hibernate-session current="true" />
</transaction-context>
</process-engine-context>
</jbpm-configuration>
and my spring application context configuration looks like
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />
<bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
<context:annotation-config />
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method propagation="REQUIRED" name="*" />
</tx:attributes>
</tx:advice>
<!--<aop:config>
<aop:pointcut id="processDeployer" expression="execution(* com.jbpm.DeploymentService.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="deployProcess"/>
</aop:config>
--><bean id="abstractJbpmProcess" class="com.jbpm.utils.AbstractJbpmProcess" abstract="true">
<property name="processEngine" ref="processEngine"/>
</bean>
<bean id="deploymentService" class="com.jbpm.impl.DeploymentServiceImpl"
parent="abstractJbpmProcess" />
</beans>
So I can use up my processEngine in whichever service I want. So created a simple process definition as shown below
<?xml version="1.0" encoding="UTF-8"?>
<process name="GetHomeProcess" xmlns="http://jbpm.org/4.3/jpdl">
<start g="16,102,48,48">
<transition to="fork"/>
</start>
<fork g="96,102,48,48" name="fork">
<transition g="120,41:" to="send email"/>
<transition to="call ppl"/>
<transition g="120,213:" to="book tickets"/>
</fork>
<state g="176,16,149,52" name="send email">
<transition g="606,41:" to="final join"/>
</state>
<state g="176,100,149,52" name="call ppl">
<transition g="377,126:" to="shipping join"/>
</state>
<state g="176,184,149,58" name="book tickets">
<transition g="378,213:" to="shipping join"/>
</state>
<join g="353,145,48,48" name="shipping join">
<transition to="watch movie"/>
</join>
<state g="431,140,148,52" name="watch movie">
<transition g="607,165:" to="final join"/>
</state>
<join g="583,73,48,48" name="final join">
<transition to="end"/>
</join>
<end g="666,74,48,48" name="end"/>
</process>
The problem would arise when I try to deploy the process
@Test
public void testProcessInstantiator() throws FileNotFoundException, JbpmAccessException{
String deploymendId= deployProcess();
if(deploymentService.isProcessDeployed("GetHomeProcess")==false){
String deploymendId2= deployProcess();
System.out.println("Process 2 deployed = "+deploymendId2);
}
System.out.println("dep Id = "+deploymendId);
}
private String deployProcess() throws FileNotFoundException, JbpmAccessException{
return deploymentService.deployProcess("process-defs/HomeProc.jpdl.xml");
}
Deployment service here just helps me deploy the process using JBPM APIs. Doing this shows up an error stack trace as shown
10:47:35,340 FST | [WireContext] creating process-engine
10:47:35,340 FIN | [WireContext] eagerly initializing org.jbpm.pvm.internal.id.DatabaseIdComposer
10:47:35,340 FST | [WireContext] constructing org.jbpm.pvm.internal.id.DatabaseIdComposer
10:47:35,355 FST | [WireContext] initializing org.jbpm.pvm.internal.id.DatabaseIdComposer
10:47:35,355 FST | [WireContext] constructing txRequiredCommandService
10:47:35,355 FST | [WireContext] initializing txRequiredCommandService
10:47:35,355 FST | [SpringProcessEngine] opening jbpm-springPvmEnvironment[31639999]
10:47:35,355 FST | [WireContext] creating transaction
10:47:35,355 FST | [WireContext] org.springframework.transaction.PlatformTransactionManager not found in transaction 1108447
10:47:35,355 FST | [WireContext] org.springframework.transaction.PlatformTransactionManager not found in process-engine 22106538
10:47:35,449 FST | [WireContext] org.hibernate.Session not found in transaction 1108447
10:47:35,449 FST | [WireContext] org.hibernate.Session not found in process-engine 22106538
### EXCEPTION ###########################################
10:47:35,449 INF | [DefaultCommandService] exception while executing command org.jbpm.pvm.internal.cmd.CheckDbCmd at 18b9a72
org.jbpm.api.JbpmException: no org.hibernate.Session in current environment
at org.jbpm.pvm.internal.env.EnvironmentImpl.getFromCurrent(EnvironmentImpl.java:204)
at org.jbpm.pvm.internal.env.EnvironmentImpl.getFromCurrent(EnvironmentImpl.java:190)
at org.jbpm.pvm.internal.cmd.CheckDbCmd.execute(CheckDbCmd.java:44)
at org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
at org.jbpm.pvm.internal.tx.SpringCommandCallback.doInTransaction(SpringCommandCallback.java:45)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
at org.jbpm.pvm.internal.tx.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:55)
at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)
at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:55)
at org.jbpm.pvm.internal.processengine.ProcessEngineImpl.checkDb(ProcessEngineImpl.java:152)
at org.jbpm.pvm.internal.processengine.SpringProcessEngine.create(SpringProcessEngine.java:70)
at org.jbpm.pvm.internal.cfg.ConfigurationImpl.buildProcessEngine(ConfigurationImpl.java:92)
at org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine(SpringHelper.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:146)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:540)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:964)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:870)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:562)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:871)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.testcases.TestProcessTransaction.setUpBeforeClass(TestProcessTransaction.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
### EXCEPTION ###########################################
10:47:35,449 FST | [WireContext] closing transaction...
10:47:35,449 FST | [BasicEnvironment] closing PvmEnvironment[31639999]
10:47:35,449 FST | [PvmEnvironment] closed PvmEnvironment[31639999]
10:47:35,496 INF | [SessionFactoryImpl] closing
I want every transaction of JBPM to use Spring created transaction, which looks like is happening. If you notice the log statements shown before the stack trace.
10:47:35,355 FST | [WireContext] org.springframework.transaction.PlatformTransactionManager not found in transaction 1108447
10:47:35,355 FST | [WireContext] org.springframework.transaction.PlatformTransactionManager not found in process-engine 22106538
10:47:35,449 FST | [WireContext] org.hibernate.Session not found in transaction 1108447
10:47:35,449 FST | [WireContext] org.hibernate.Session not found in process-engine 22106538
I want to know why this error is showing up. Am I missing anything in my configuration? Is there any documentation or references on how the environments are being used in JBPM? Or is there any way in which I can put the session so that this stand alone application finds it.
PS: I have also attached my Maven POM.xml, which might help you see the jar dependencies in the project
Thanks,
Satish
--------------------------------------------------------------
Reply to this message by going to Community
[http://community.jboss.org/message/538238#538238]
Start a new discussion in jBPM Development at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2035]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20100419/3f1717ee/attachment.html
More information about the jboss-user
mailing list