[jboss-jira] [JBoss JIRA] (JBFORUMS-301) Session Closed Exception

Kiran Kumar A (JIRA) jira-events at lists.jboss.org
Thu Sep 12 02:45:04 EDT 2013


Kiran Kumar A created JBFORUMS-301:
--------------------------------------

             Summary: Session Closed Exception
                 Key: JBFORUMS-301
                 URL: https://issues.jboss.org/browse/JBFORUMS-301
             Project: JBoss Forums
          Issue Type: Bug
         Environment: JBPM 5.3 Persistence, Hibernate 4, JPA 2, Tomcat
            Reporter: Kiran Kumar A
            Assignee: Luca Stancapiano


The below is exception I am getting after some time of successful runs.



java.lang.Exception: java.lang.IllegalStateException: java.lang.reflect.InvocationTargetException
	at com.sts.inv.bpm.biz.impl.invBPMServiceImpl.signalEvent(InvBPMServiceImpl.java:78)
	at com.sts.inv.data.biz.impl.invServiceImpl.sendSignal(InvServiceImpl.java:120)
	at com.sts.inv.data.biz.impl.invServiceImpl.sendSignal(InvServiceImpl.java:132)
	at com.sts.inv.ws.impl.invWebServiceImpl.getinvStatus(InvWebServiceImpl.java:339)
	at sun.reflect.GeneratedMethodAccessor794.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)
	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
	at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:167)
	at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:94)
	at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
	at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:211)
	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:213)
	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:154)
	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:130)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:221)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:146)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:197)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.sts.catalog.filter.ProductsFilter.doFilter(ProductsFilter.java:59)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.sts.catalog.filter.LocationsFilter.doFilter(LocationsFilter.java:58)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.sts.security.api.UserInfoFilter.doFilter(UserInfoFilter.java:66)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.sts.ws.filter.ApiOriginFilter.doFilter(ApiOriginFilter.java:19)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.IllegalStateException: java.lang.reflect.InvocationTargetException
	at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:116)
	at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.loadStatefulKnowledgeSession(KnowledgeStoreServiceImpl.java:84)
	at org.drools.persistence.jpa.JPAKnowledgeService.loadStatefulKnowledgeSession(JPAKnowledgeService.java:131)
	at com.sts.bpm.engine.impl.BpmEngineImpl.signalEvent(BpmEngineImpl.java:302)
	at com.sts.inv.bpm.biz.impl.invBPMServiceImpl.signalEvent(invBPMServiceImpl.java:76)
	... 50 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedConstructorAccessor159.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
	at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:101)
	... 54 more
Caused by: org.hibernate.SessionException: Session is closed!
	at org.hibernate.internal.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:127)
	at org.hibernate.internal.SessionImpl.getTransactionCoordinator(SessionImpl.java:1960)
	at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1198)
	at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1173)
	at org.drools.persistence.jpa.JpaPersistenceContext.joinTransaction(JpaPersistenceContext.java:29)
	at org.drools.persistence.SingleSessionCommandService.<init>(SingleSessionCommandService.java:194)
	... 58 more




package com.sts.bpm.engine.impl;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.naming.InitialContext;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.transaction.UserTransaction;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.impl.EnvironmentFactory;
import org.drools.io.ResourceFactory;
import org.drools.persistence.jpa.JPAKnowledgeService;
import org.drools.runtime.Environment;
import org.drools.runtime.EnvironmentName;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.ProcessInstance;
import org.drools.runtime.process.WorkItemHandler;
import org.jbpm.process.audit.JPAWorkingMemoryDbLogger;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.io.Resource;

import bitronix.tm.TransactionManagerServices;
import bitronix.tm.resource.jdbc.PoolingDataSource;

import com.sts.bpm.engine.BpmEngine;

/**
 * BPMEngine will provide functionalities for creating a new process and
 * starting the tasks. The class implements ApplicationContextAware to load bpmn
 * files.
 * 
 * @see ApplicationContextAware
 * @author
 * 
 */
public class JBpmEngineImpl implements ApplicationContextAware {

	private static Logger logger = LogManager.getLogger(BpmEngineImpl.class);

	private KnowledgeBase kbase;

	/**
	 * Available resource patterns which are used to read bpmn files.
	 */
	private List<String> resourcePatterns;

	private PoolingDataSource poolingDataSource;
	
	private String initialFactoryClassName;

	/**
	 * Spring application context
	 */
	private ApplicationContext applicationContext;
	
	private Environment env;
	
	private String uniqueName;
	
	private String className;
	
	private int minPoolSize;
	
	private int maxPoolSize;
	
	private boolean allowLocalTransactions;
	
	private String isolationLevel;
	
	
	
	private Properties driverProperties;
	
	public void init() {
		try {
			setUp();
			createKnowledgebase();
		} catch (Throwable e) {
			logger.info("Error while creating knowledge base",e);
		}
	}

	public void setUp() {
		try{
			System.setProperty("java.naming.factory.initial",initialFactoryClassName);
			poolingDataSource = new bitronix.tm.resource.jdbc.PoolingDataSource();
			
			poolingDataSource.setUniqueName(uniqueName);
			poolingDataSource.setClassName(className);
			poolingDataSource.setMinPoolSize(minPoolSize);
			poolingDataSource.setMaxPoolSize(maxPoolSize);
			poolingDataSource.setAllowLocalTransactions(allowLocalTransactions);
			poolingDataSource.setIsolationLevel(isolationLevel);
			/*
			Properties driverProperties = new Properties();
			driverProperties.setProperty("user", "root");
			driverProperties.setProperty("password", "");
			driverProperties.setProperty("serverName", "localhost");
			driverProperties.setProperty("databaseName", "jbpm");
			driverProperties.setProperty("port", "3306");
			driverProperties.setProperty("URL", "jdbc:mysql://localhost:3306/jbpm");
			*/
			poolingDataSource.setDriverProperties(driverProperties);
			poolingDataSource.init();
		}catch(Throwable t){
			logger.error("Error while initating data source", t);
		}
	}

	
	@Override
	public Map<String, Object> createProcessInstance(String processDefinitionId,
			Map<String, Object> parameters,
			Map<String, WorkItemHandler> wiHandlers) throws Exception{
		Map<String, Object> resultMap = new HashMap<String, Object>();
		StatefulKnowledgeSession ksession = null;
		JPAWorkingMemoryDbLogger wmlogger = null;
		UserTransaction ut = null;
		try{
			//Result values
			// Let's create a Persistence Knowledge Session
			logger.info("Creating Persistent Knowledge Session for "
					+ processDefinitionId);
			logger.info("Enabling BAM for " + processDefinitionId);
			ksession = createKnowledgeSession();
			// Enable BAM to log history of the instance
			wmlogger = new JPAWorkingMemoryDbLogger(ksession);
			// Register WorkItemHandlers
			registerWorkItemHandlers(ksession, wiHandlers);
			
			// Each Command will generate an interaction
			logger.info(">>> Creating Process Instance " + processDefinitionId);
			ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
			ut.begin();
			ProcessInstance processInstance = ksession.createProcessInstance(
					processDefinitionId, parameters);
			long processInstanceId = processInstance.getId();
			logger.info(">>> Let's Start the Process Instance "
					+ processDefinitionId + " " + processInstance.getId());
			ksession.startProcessInstance(processInstance.getId());
			ut.commit();
			int sessionId = ksession.getId();
			logger.info("Session id and the process id "+sessionId+" and process id "+processInstanceId);
			logger.info("Disposing session and BAM for Process Instance "
					+ processDefinitionId + " " + processInstance.getId());
			//Set values in result map
			resultMap.put("processInstanceId", processInstanceId);
			resultMap.put("sessionId", sessionId);
			
		}catch(Throwable t){
			logger.error("Error while creating process "+processDefinitionId, t);
			if(ut != null){
				ut.rollback();
			}
			throw new Exception("Error while creating process "+processDefinitionId,t);
		}finally{
			// We need to dispose the session, because the reference to this
			// ksession object will no longer be valid
			// because another thread could load the same session and execute a
			// different command.
			if(wmlogger != null){
				wmlogger.dispose();
			}if(ksession != null){
				ksession.dispose();
			}
		}
		return resultMap;
	}
	
	private Environment getEnvironment() throws Exception{
		Environment env = EnvironmentFactory.newEnvironment();
		EntityManagerFactory emf = Persistence
		.createEntityManagerFactory("org.jbpm.runtime");
		
		env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
		env.set(EnvironmentName.TRANSACTION_MANAGER,TransactionManagerServices.getTransactionManager());

		InitialContext ctx = new InitialContext();
		UserTransaction ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
		//UserTransaction ut = null;//(UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
		env.set(EnvironmentName.TRANSACTION, ut);
		return env;
	}

	protected final StatefulKnowledgeSession createKnowledgeSession() throws Exception{
		
		// Let's create a Persistence Knowledge Session
		final StatefulKnowledgeSession ksession = JPAKnowledgeService
				.newStatefulKnowledgeSession(kbase, null, env);
		return ksession;
	}

	protected final void registerWorkItemHandlers(
			StatefulKnowledgeSession ksession,
			Map<String, WorkItemHandler> wiHandlers) {
		if (wiHandlers != null) {
			Iterator<String> wihNameIter = wiHandlers.keySet().iterator();
			while (wihNameIter.hasNext()) {
				String name = wihNameIter.next();
				ksession.getWorkItemManager().registerWorkItemHandler(name,
						wiHandlers.get(name));
			}
		}
	}

	protected KnowledgeBase createKnowledgebase() throws Exception {
		try{
			KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
					.newKnowledgeBuilder();
			
			if (resourcePatterns != null) {
				for (String resourcePattern : resourcePatterns) {
					logger.info("Reading files using resource pattern "
							+ resourcePattern);
					Resource[] bpmnResources = applicationContext
							.getResources(resourcePattern);
					if (bpmnResources != null) {
						for (int i = 0; i < bpmnResources.length; i++) {
							logger.info("Registering BPMN process definition "
									+ bpmnResources[i].getURL().toString());
							kbuilder.add(ResourceFactory
									.newInputStreamResource(bpmnResources[i]
											.getInputStream()), ResourceType.BPMN2);
						}
					} else {
						logger.info("There are no files available matching the resource pattern "
								+ resourcePattern);
					}
				}
			}
			if (kbuilder.hasErrors()) {
				for (KnowledgeBuilderError error : kbuilder.getErrors()) {
					logger.info(">>> Error:" + error.getMessage());
				}
			}
			
			kbase = KnowledgeBaseFactory.newKnowledgeBase();
			
			kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
			
			env = getEnvironment();
			
		}catch(Throwable t){
			logger.error("Error while creating knowledge base", t);
		}
		return kbase;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.springframework.context.ApplicationContextAware#setApplicationContext
	 * (org.springframework.context.ApplicationContext)
	 */
	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		this.applicationContext = applicationContext;

	}

	/**
	 * @param resourcePatterns
	 *            the resourcePatterns to set
	 */
	public void setResourcePatterns(List<String> resourcePatterns) {
		this.resourcePatterns = resourcePatterns;
	}

	/**
	 * @return the resourcePatterns
	 */
	public List<String> getResourcePatterns() {
		return resourcePatterns;
	}

	@Override
	public void signalEvent(String type, Object event,int sessionId, long processInstanceId,
			Map<String, WorkItemHandler> wiHandlers) throws Exception{
		//Evaluate loading an existing session
		StatefulKnowledgeSession ksession = null;
		try{
			logger.info("Sending a event to bpm process: type "+type);
			ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(sessionId, kbase, null, env );
			registerWorkItemHandlers(ksession, wiHandlers);
			ksession.signalEvent(type, event, processInstanceId);
		}catch(Exception e){
			logger.error("Error while sending signal to bpm process,  type:"+type,e);
			throw e;
		}finally{
			if(ksession != null){
				ksession.dispose();
			}
		}
	}
	
	/**
	 * @param poolingDataSource the poolingDataSource to set
	 */
	public void setPoolingDataSource(PoolingDataSource poolingDataSource) {
		this.poolingDataSource = poolingDataSource;
	}
	
	/**
	 * @return the poolingDataSource
	 */
	public PoolingDataSource getPoolingDataSource() {
		return poolingDataSource;
	}

	/**
	 * @param initialFactoryClassName the initialFactoryClassName to set
	 */
	public void setInitialFactoryClassName(String initialFactoryClassName) {
		this.initialFactoryClassName = initialFactoryClassName;
		
	}

	/**
	 * @return the initialFactoryClassName
	 */
	public String getInitialFactoryClassName() {
		return initialFactoryClassName;
	}

	/**
	 * @param driverProperties the driverProperties to set
	 */
	public void setDriverProperties(Properties driverProperties) {
		this.driverProperties = driverProperties;
		
	}

	/**
	 * @return the driverProperties
	 */
	public Properties getDriverProperties() {
		return driverProperties;
	}

	/**
	 * @param uniqueName the uniqueName to set
	 */
	public void setUniqueName(String uniqueName) {
		this.uniqueName = uniqueName;
		
	}

	/**
	 * @return the uniqueName
	 */
	public String getUniqueName() {
		return uniqueName;
	}

	/**
	 * @param minPoolSize the minPoolSize to set
	 */
	public void setMinPoolSize(int minPoolSize) {
		this.minPoolSize = minPoolSize;
		
	}

	/**
	 * @return the minPoolSize
	 */
	public int getMinPoolSize() {
		return minPoolSize;
	}

	/**
	 * @param maxPoolSize the maxPoolSize to set
	 */
	public void setMaxPoolSize(int maxPoolSize) {
		this.maxPoolSize = maxPoolSize;
		
	}

	/**
	 * @return the maxPoolSize
	 */
	public int getMaxPoolSize() {
		return maxPoolSize;
	}

	/**
	 * @param isolationLevel the isolationLevel to set
	 */
	public void setIsolationLevel(String isolationLevel) {
		this.isolationLevel = isolationLevel;
		
	}

	/**
	 * @return the isolationLevel
	 */
	public String getIsolationLevel() {
		return isolationLevel;
	}

	/**
	 * @return the className
	 */
	public String getClassName() {
		return className;
	}

	/**
	 * @param className the className to set
	 */
	public void setClassName(String className) {
		this.className = className;
		
	}

	/**
	 * @return the allowLocalTransactions
	 */
	public boolean isAllowLocalTransactions() {
		return allowLocalTransactions;
	}

	/**
	 * @param allowLocalTransactions the allowLocalTransactions to set
	 */
	public void setAllowLocalTransactions(boolean allowLocalTransactions) {
		this.allowLocalTransactions = allowLocalTransactions;
		
	}

}


peristence.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence version="2.0"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
	xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/persistence">
	<persistence-unit name="org.jbpm.runtime"
		transaction-type="JTA">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<!-- <jta-data-source>jdbc/testDS1</jta-data-source> -->
		<jta-data-source>jdbc/testDS1</jta-data-source>
		<mapping-file>META-INF/JBPMorm-JPA2.xml</mapping-file>

		<class>org.drools.persistence.info.SessionInfo</class>
		<class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
		<class>org.drools.persistence.info.WorkItemInfo</class>
		<!-- Added -->
		<class>org.jbpm.process.audit.ProcessInstanceLog</class>
		<class>org.jbpm.process.audit.NodeInstanceLog</class>
		<class>org.jbpm.process.audit.VariableInstanceLog</class>
		<!-- Commented out <exclude-unlisted-classes>true</exclude-unlisted-classes> -->
		<properties>
			<property name="hibernate.max_fetch_depth" value="3" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.transaction.manager_lookup_class"
				value="org.hibernate.transaction.BTMTransactionManagerLookup" />
			<!-- 
			 <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.BitronixJtaPlatform" />
			 -->
			<!-- <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> -->
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
			<!-- 
			
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jbpm" />
			<property name="hibernate.connection.username" value="root" />
			<property name="hibernate.connection.password" value="" />
			 -->
			<property name="hibernate.connection.autocommit" value="true" />
		</properties>
	</persistence-unit>
</persistence>

Spring files

<bean id="bpmEngine" class="com.sts.bpm.engine.impl.JBpmEngineImpl" init-method="init" >
		<property name="initialFactoryClassName" value="bitronix.tm.jndi.BitronixInitialContextFactory"></property>
		<!-- 
		<property name="poolingDataSource"  ref="poolingDataSource"></property>
		 -->
		<property name="resourcePatterns">
			<list>
				<value>classpath*:/META-INF/process/*.bpmn</value>
				<value>classpath*:/META-INF/process/*.bpmn2</value>
			</list>
		</property>
		<property name="uniqueName" value="jdbc/testDS1"></property>
    	<property name="className" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"></property>
    	<property name="minPoolSize" value="1"></property>
    	<property name="maxPoolSize" value="20"></property>
    	<property name="allowLocalTransactions" value="true"></property>
    	<property name="isolationLevel" value="READ_COMMITTED"></property>
    	<property name="driverProperties">
    		<props>
    			<prop key="user">${jbpm.db.user}</prop>
    			<prop key="password">${jbpm.db.password}</prop>
    			<prop key="serverName">${jbpm.db.serverName}</prop>
    			<prop key="databaseName">${jbpm.db.databaseName}</prop>
    			<prop key="port">${jbpm.db.port}</prop>
    			<prop key="URL">${jbpm.db.URL}</prop>
    		</props>
    	</property>
	</bean>

<bean id="invStatusWIH" class="com.sts.inv.bpm.handler.SetinvStatusWIH">
    	
	</bean>

<bean id="invWihInitializer" class="com.sts.bpm.initializer.StandardHandlerInitializer">
		<property name="workItemHandlers">
			<map>
				<entry key="Set inv Status" value-ref="invStatusWIH"/>
				
			</map>
		</property>
	</bean>
	<bean id="invWihRegistry" class="com.sts.bpm.handler.registry.WorkItemHandlerRegistry" >
		<property name="initializers">
			<map>
				<entry key="invProcess" value-ref="invWihInitializer"/>
			</map>
		</property>
	</bean>
	<bean id="invBPMService" class="com.sts.inv.bpm.biz.impl.invBPMServiceImpl" >
		<property name="bpmEngine" ref="bpmEngine" />
		<property name="workItemHandlerRegistry" ref="invWihRegistry" />
	</bean>


Tomcat conf.xml

<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
	
	<Transaction factory="bitronix.tm.BitronixUserTransactionObjectFactory" />

 

    <Resource name="jdbc/testDS1" auth="Container" type="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" maxActive="15" maxIdle="2" maxWait="10000" logAbandoned="true"
               username="root" password="" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/jbpm"/>


    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->

</Context>


Test case

package com.sts.inv.bpm.test;

import java.util.Date;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.sts.bpm.vo.InvSignalEventDetails;
import com.sts.bpm.vo.InvSignalEventType;
import com.sts.dao.entity.Inv;
import com.sts.inv.bpm.biz.InvBPMService;

/**
 * 
 *
 *
 */
public class InvLifecycleProcessTest{

	private InvBPMService invBPMService;


	@Before
	public void setUp() throws Exception {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				new String[]{
						"META-INF/spring/beans.xml"});
		invBPMService = (InvBPMService)context.getBean("invBPMService");
	}

	/**
	 * Creates a new order process
	 */
	@Test
	public void startProcess() throws Exception{
		try{
			Thread.sleep(6 * 60 * 1000);
			//for(
				int invId = 2; 
				
				//invId <= 20; invId++){
				Inv inv = new Inv();
				inv.setInvitedBy("Admin");
				inv.setInvitedDate(new Date());
				inv.setInvId(invId);
				InvSignalEventDetails eventDetails = new InvSignalEventDetails();
				eventDetails.setInvId(invId);
				eventDetails.setSessionId(invId);
				eventDetails.setProcessInstanceId(invId);
				//Set the other details of order if necessary
				
				
				eventDetails = invBPMService.createInvProcess(inv,"test","invProcess");
				Thread.sleep(6 * 60 * 1000);
				inv.setInvId(eventDetails.getInvId());
				eventDetails.setEventData(InvSignalEventType.INV_CREATED.toString());
				eventDetails.setType(InvSignalEventType.INV_CREATED);
				invBPMService.signalEvent(eventDetails.getType(),"","invProcess",
						eventDetails.getSessionId(),eventDetails.getProcessInstanceId());
				Thread.sleep(6 * 60 * 1000);
				eventDetails.setEventData(InvSignalEventType.INV_SENT.toString());
				eventDetails.setType(InvSignalEventType.INV_SENT);
				invBPMService.signalEvent(eventDetails.getType(),"","invProcess",
						eventDetails.getSessionId(),eventDetails.getProcessInstanceId());
				
						
			//}

		}catch(Throwable t){
			throw new Exception(t);
		}
	}
}






--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list