[overlord-commits] Overlord SVN: r141 - in cdl/trunk/runtime/jbossesb: src/main/java/org/jboss/soa/overlord/conversation and 1 other directories.

overlord-commits at lists.jboss.org overlord-commits at lists.jboss.org
Sat Jul 12 13:45:13 EDT 2008


Author: jeff.yuchang
Date: 2008-07-12 13:45:12 -0400 (Sat, 12 Jul 2008)
New Revision: 141

Removed:
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/PersistentTest.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ConversationActionException.java
Modified:
   cdl/trunk/runtime/jbossesb/pom.xml
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/HibernateUtil.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/Identity.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/JoinState.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/ScheduleItem.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/Session.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/SessionManager.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ConversationAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/CreateSessionAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/IfAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/MessageRouterAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ParallelAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/PerformAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ReceiveMessageAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/RetrieveSessionAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ScheduleStateAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SendMessageAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SetVariableAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SwitchAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/WhenAction.java
   cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/WhileAction.java
Log:
* Updating the jbossesb-rosetta 4.3GA release.
* Make the hibernate transacation demarcation is 'Action' based unit.
* Remove ConversationActionException, throw Exception directly. otherwise, the standalone client also need to have this dependency.



Modified: cdl/trunk/runtime/jbossesb/pom.xml
===================================================================
--- cdl/trunk/runtime/jbossesb/pom.xml	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/pom.xml	2008-07-12 17:45:12 UTC (rev 141)
@@ -30,7 +30,7 @@
 			<dependency>
 				<groupId>org.jboss.jbossesb</groupId>
 				<artifactId>rosetta</artifactId>
-				<version>4.2.1</version>
+				<version>4.3</version>
 			</dependency>
 			<dependency>
 				<groupId>org.jboss.jbossesb</groupId>

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/HibernateUtil.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/HibernateUtil.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/HibernateUtil.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,6 +19,8 @@
  */
 package org.jboss.soa.overlord.conversation;
 
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.hibernate.cfg.AnnotationConfiguration;
 
@@ -27,11 +29,12 @@
 	
 	private static SessionFactory sessionFactory;
 	
+	private static final ThreadLocal<Session> session = new ThreadLocal<Session>();
+	
 	static {
 		try {
 			sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
 		} catch (Throwable t) {
-			t.printStackTrace();
 			throw new ExceptionInInitializerError(t);
 		}
 	}
@@ -45,5 +48,22 @@
 			getSessionFactory().close();
 		}
 	}
+	
+	public static synchronized Session currentSession() throws HibernateException {
+		Session s = session.get();
+		if (s == null) {
+			s = sessionFactory.openSession();
+			session.set(s);
+		}
+		return s;
+	}
+	
+	public static void closeSession() throws HibernateException {
+		Session s = session.get();
+		if (s!= null) {
+			s.close();
+		}
+		session.set(null);
+	}
 
 }

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/Identity.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/Identity.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/Identity.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,7 +19,6 @@
  */
 package org.jboss.soa.overlord.conversation;
 
-import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -43,7 +42,7 @@
 
 @Entity
 @Table(name="T_IDENTITY")
-public class Identity implements Serializable {
+public class Identity implements HibernateObject {
 	
 	private static final long serialVersionUID = 1112L;
 

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/JoinState.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/JoinState.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/JoinState.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,8 +19,6 @@
  */
 package org.jboss.soa.overlord.conversation;
 
-import java.io.Serializable;
-
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
@@ -35,7 +33,7 @@
  */
 @Entity
 @Table(name="T_JOIN_STATES")
-public class JoinState implements Serializable {
+public class JoinState implements HibernateObject {
 
 	private static final long serialVersionUID = 1113L;
 

Deleted: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/PersistentTest.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/PersistentTest.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/PersistentTest.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -1,75 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, JBoss Inc., and others contributors as indicated 
- * by the @authors tag. All rights reserved. 
- * See the copyright.txt in the distribution for a
- * full listing of individual contributors. 
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License, v. 2.1.
- * This program is distributed in the hope that it will be useful, but WITHOUT A 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
- * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
- * You should have received a copy of the GNU Lesser General Public License,
- * v.2.1 along with this distribution; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
- * MA  02110-1301, USA.
- * 
- * (C) 2008,
- */
-package org.jboss.soa.overlord.conversation;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.hibernate.HibernateException;
-import org.hibernate.SessionFactory;
-import org.hibernate.Transaction;
-
-/**
- * @author jeffyu
- *
- */
-public class PersistentTest {
-
-	
-	public static void main(String[] args) throws Exception{
-		Session s = SessionManager.createSession("com.acme.services.broker.PurchaseGoods");
-		Identity id = new Identity();
-		id.setSession(s);
-		id.setServiceName(s.getServiceName());
-		id.setType(IdentityType.Primary);
-		
-		Map<String, String> properties = new HashMap<String, String>();
-		properties.put("id", "8");
-		
-		id.setProperties(properties);
-		
-		SessionManager.saveObject(id);
-		
-		Session newSession = SessionManager.getSession(id);
-		System.out.println("================================");
-		System.out.println(newSession.getServiceName());
-		System.out.println(newSession.getPojoClass());
-	}
-
-	public static void testScheduleItem() {
-		try {
-			SessionFactory sf = HibernateUtil.getSessionFactory();
-			org.hibernate.Session session = sf.openSession();
-			Transaction transaction= session.getTransaction();
-			transaction.begin();
-			
-			ScheduleItem si = new ScheduleItem("PurchasingBroker", "creditagency");
-			session.save(si);
-			transaction.commit();
-			session.close();
-			sf.close();
-
-		} catch (HibernateException e) {
-			System.out.println("=========ERROR==============");
-			e.printStackTrace();
-		}
-	}
-
-}

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/ScheduleItem.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/ScheduleItem.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/ScheduleItem.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,8 +19,6 @@
  */
 package org.jboss.soa.overlord.conversation;
 
-import java.io.Serializable;
-
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
@@ -32,7 +30,7 @@
 
 @Entity
 @Table(name="T_SCHEDULE_ITEM")
-public class ScheduleItem implements Serializable {
+public class ScheduleItem implements HibernateObject {
 	
 	private static final long serialVersionUID = 1114L;
 

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/Session.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/Session.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/Session.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,7 +19,6 @@
  */
 package org.jboss.soa.overlord.conversation;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -44,7 +43,7 @@
 
 @Entity
 @Table(name="T_SESSION")
-public class Session implements Serializable {
+public class Session implements HibernateObject {
 
 	private static final long serialVersionUID = 1115L;
 
@@ -108,7 +107,7 @@
 		return this.status;
 	}
 	
-	public void setEPR(String name, EPR epr) {
+	public void setEPR(String name, EPR epr) throws Exception{
 		try {
 			EPRWrapper theEPRWrapper = null;
 			for(EPRWrapper eprWrapper : eprWrappers) {
@@ -129,8 +128,7 @@
 			eprWrappers.add(eprWrapper);
 			SessionManager.saveObject(eprWrapper);
 		} catch (Exception e) {
-			e.printStackTrace();
-			throw new RuntimeException("Error in storing EPR!!");
+			throw new Exception("Error in storing EPR!!" + e, e);
 		}
 	}
 
@@ -146,28 +144,27 @@
         return null;
 	}
 	
-	public void schedule(String category, String name, boolean immediate,
-							Message message) throws Exception {
+	public void schedule(String category, String name, Message message) throws Exception {
 		
-		logger.info("Schedule '"+category+"/"+name+"' immediate="+immediate);
-		
 		ScheduleItem si=new ScheduleItem(category, name);
 		si.setSession(this);
 		
+		logger.info("Scheduling: " + si + " by thread of " + Thread.currentThread().getName());
+		
 		synchronized(joinStates) {
 			JoinState joinState = getJoinStateByScheduleItem(si);
 			if (joinState != null) {
 				joinState.join();
 				SessionManager.updateObject(joinState);
-				System.out.println("---<><><>----" + getJoinStateByScheduleItem(si).getSpawnPath());
+				logger.debug("Join State is: " + joinState);
 				if (joinState.getSpawnPath() <= 0) {
 					joinStates.remove(joinState);
 					SessionManager.removeObject(joinState);
-					logger.info("About to schedule joined state: "+joinState);				
+			
 					ServiceInvoker invoker= new ServiceInvoker(category, name);
 					invoker.deliverAsync(message);
 				} else {
-					logger.info("Don't join yet: "+si);				
+					logger.info("Don't join yet: "+ joinState);				
 					return;
 				}
 			}
@@ -176,24 +173,20 @@
 		synchronized(scheduleItems) {
 			// Check if already exists
 			if (scheduleItems.contains(si)) {
-				logger.error("Schedule already contains item for " + si);
+				throw new Exception("Schedule already contains item for " + si);
 			}
 			
 			scheduleItems.add(si);
 			SessionManager.saveObject(si);
-			logger.info("Scheduled: "+si);				
-
-			if (immediate) {
-				ServiceInvoker invoker= new ServiceInvoker(category, name);
-		    	invoker.deliverAsync(message);					
-			}
+			
+			logger.info("Finished scheduling "+si);
 		}
 		
 	}
 
 	public void unschedule(String category, String name) throws Exception {
 		
-		logger.info("Unschedule '"+category+"/"+name+"'");
+		logger.info("Unscheduling: '"+category+"/"+name+"' by thread of " + Thread.currentThread().getName() );
 		
 		synchronized(joinStates) {
 			if (isScheduleItemInJoinState(category, name)) {
@@ -203,13 +196,13 @@
 			
 		synchronized(scheduleItems) {
 			ScheduleItem si = getScheduleItem(category, name);
-			if (scheduleItems.remove(si) == false) {
-				logger.error("Unable to unschedule: "+si);	
-				throw new Exception("Unable to unschedule item : "+si);
-			} else {
-				SessionManager.removeObject(si);
-				logger.info("Successfully Unscheduled: "+si);				
+			if (si.getId() == 0) {
+				throw new Exception("The scheduleItem of " + si + " is not existed !");
 			}
+			
+			scheduleItems.remove(si);
+			SessionManager.removeObject(si);
+			logger.info("Finished unscheduling: " + si);
 		}
 	}
 	
@@ -223,7 +216,7 @@
 	}
 	
 	
-	protected JoinState getJoinStateByScheduleItem(ScheduleItem si) {
+	protected synchronized JoinState getJoinStateByScheduleItem(ScheduleItem si) {
 		for(JoinState joinState : joinStates) {
 			if (si.getName().equals(joinState.getName()) && si.getCategory().equals(joinState.getCategory())) {
 				return joinState;
@@ -239,18 +232,20 @@
 				return si;
 			}
 		}
-		return new ScheduleItem(category, name);
+		ScheduleItem item = new ScheduleItem(category, name);
+		item.setSession(this);
+		return item;
 	}
 
 	public void join(String category, String name, int count) throws Exception {
 		JoinState joinState=new JoinState(category, name, count);
 		joinState.setSession(this);
 		if (joinStates.contains(joinState)) {
-			logger.error("Join already exists for '"+category+ "/"+name+"'");
+			throw new Exception("The '"+category+ "/"+name+"' of JoinState is already existed.");
 		}		
 		joinStates.add(joinState);
 		SessionManager.saveObject(joinState);
-		logger.info("Added Join State: " + joinState);
+		logger.debug("Added Join State: " + joinState);
 	}
 	
 	public void assimulateIdentities(java.util.List<Identity> ids) throws Exception {

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/SessionManager.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/SessionManager.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/conversation/SessionManager.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -25,9 +25,7 @@
 import java.util.Map;
 
 import org.apache.log4j.Logger;
-import org.hibernate.Transaction;
 import org.jboss.soa.esb.message.Message;
-import org.jboss.soa.overlord.jbossesb.actions.ConversationActionException;
 import org.jboss.soa.overlord.jbossesb.actions.MessageProperties;
 import org.jboss.soa.overlord.jbossesb.actions.Service;
 import org.mvel.MVEL;
@@ -42,93 +40,64 @@
 	
 	public static Session createSession(String sessionName) throws Exception {
 		
-		org.hibernate.Session hibernateSession = HibernateUtil.getSessionFactory().openSession();
-		Transaction transaction = null;
-		try {
-			
-			Class<?> pojoclass= ClassLoaderUtil.loadClass(sessionName);
-			Object businessState = pojoclass.newInstance();
-			
-			transaction = hibernateSession.beginTransaction();
-			hibernateSession.save(businessState);
-			
-			Session conversationSession = new Session();
-			conversationSession.setPojoClass(sessionName);
-			conversationSession.setStatus(SessionStatus.Active);
-			if (businessState instanceof HibernateObject) {
-				HibernateObject ho = (HibernateObject) businessState;
-				conversationSession.setPojoID(ho.getId());
-				logger.debug("Set Business State Object ID : " + ho.getId());
-			}
-			conversationSession.setBusinessObject(businessState);
-			
-			Service service = pojoclass.getAnnotation(Service.class);
-			if (service != null) {
-				conversationSession.setServiceName(service.name());
-				conversationSession.setConversationType(service.conversationType());
-			}
-			
-			hibernateSession.save(conversationSession);
-			
-			transaction.commit();
-			
-			return conversationSession;
-
-		}catch (Exception e) {
-			if (transaction != null) {
-				transaction.rollback();
-			}
-			throw new Exception (e);
-		} finally {
-			hibernateSession.close();
+		org.hibernate.Session hibernateSession = HibernateUtil.currentSession();
+		Class<?> pojoclass= ClassLoaderUtil.loadClass(sessionName);
+		Object businessState = pojoclass.newInstance();
+		hibernateSession.save(businessState);
+		
+		Session conversationSession = new Session();
+		conversationSession.setPojoClass(sessionName);
+		conversationSession.setStatus(SessionStatus.Active);
+		if (businessState instanceof HibernateObject) {
+			HibernateObject ho = (HibernateObject) businessState;
+			conversationSession.setPojoID(ho.getId());
+			logger.debug("Set Business State Object ID : " + ho.getId());
 		}
+		conversationSession.setBusinessObject(businessState);
+		
+		Service service = pojoclass.getAnnotation(Service.class);
+		if (service != null) {
+			conversationSession.setServiceName(service.name());
+			conversationSession.setConversationType(service.conversationType());
+		}
+		
+		hibernateSession.save(conversationSession);
+		
+		return conversationSession;
 	}
 	
 	@SuppressWarnings("unchecked")
 	public static Session createSubSession(String sessionName, String sessionKey, Message message) throws Exception {
 		
-		org.hibernate.Session hibernateSession = HibernateUtil.getSessionFactory().openSession();
-		Transaction transaction = null;
-		try {
-			Session parentSession = (Session)hibernateSession.load(Session.class, Long.valueOf(sessionKey));
-			Class<?> pojoclass= ClassLoaderUtil.loadClass(sessionName);
-			Object businessState = pojoclass.newInstance();
-			
-			transaction = hibernateSession.beginTransaction();
-			
-			Map<String, Object> boundVariables = (Map<String, Object>)message.getProperties().
-													                  getProperty(MessageProperties.BOUND_VARIABLE_KEY);
-			for(String key : boundVariables.keySet()) {
-				MVEL.setProperty(businessState, key, boundVariables.get(key));
-				logger.info("bound to " + key);
-			}
-			
-			hibernateSession.save(businessState);
-			
-			Session conversationSession = new Session();
-			conversationSession.setPojoClass(sessionName);
-			conversationSession.setStatus(SessionStatus.Active);
-			if (businessState instanceof HibernateObject) {
-				HibernateObject ho = (HibernateObject) businessState;
-				conversationSession.setPojoID(ho.getId());
-				logger.debug("Set Business State Object ID : " + ho.getId());
-			}
-			conversationSession.setBusinessObject(businessState);
-			conversationSession.setParent(parentSession);
-			conversationSession.setServiceName(parentSession.getServiceName());
-			
-			hibernateSession.save(conversationSession);
-			transaction.commit();
-			
-			return conversationSession;
-		} catch (Exception e) {
-			if (transaction != null) {
-				transaction.rollback();
-			}
-			throw new ConversationActionException (e);
-		} finally {
-			hibernateSession.close();
+		org.hibernate.Session hibernateSession = HibernateUtil.currentSession();
+		Session parentSession = (Session)hibernateSession.load(Session.class, Long.valueOf(sessionKey));
+		Class<?> pojoclass= ClassLoaderUtil.loadClass(sessionName);
+		Object businessState = pojoclass.newInstance();
+		
+		Map<String, Object> boundVariables = (Map<String, Object>)message.getProperties().
+												                  getProperty(MessageProperties.BOUND_VARIABLE_KEY);
+		for(String key : boundVariables.keySet()) {
+			MVEL.setProperty(businessState, key, boundVariables.get(key));
+			logger.info("bound to " + key);
 		}
+		
+		hibernateSession.save(businessState);
+		
+		Session conversationSession = new Session();
+		conversationSession.setPojoClass(sessionName);
+		conversationSession.setStatus(SessionStatus.Active);
+		if (businessState instanceof HibernateObject) {
+			HibernateObject ho = (HibernateObject) businessState;
+			conversationSession.setPojoID(ho.getId());
+			logger.debug("Set Business State Object ID : " + ho.getId());
+		}
+		conversationSession.setBusinessObject(businessState);
+		conversationSession.setParent(parentSession);
+		conversationSession.setServiceName(parentSession.getServiceName());
+		
+		hibernateSession.save(conversationSession);
+
+		return conversationSession;
 	}
 	
 	public static Session retrieveSession(String sessionKey, java.util.List<Identity> ids) throws Exception {
@@ -138,26 +107,18 @@
 		}
 		
 		if (sessionKey != null) {
-			org.hibernate.Session hibernateSession = HibernateUtil.getSessionFactory().openSession();
-			Session session = null;
-			try {
-				session = (Session) hibernateSession.load(Session.class, Long.valueOf(sessionKey));
-				Class<?> pojoClass = ClassLoaderUtil.loadClass(session.getPojoClass());
-				Object pojo = hibernateSession.load(pojoClass, Long.valueOf(session.getPojoID()));
-				session.setBusinessObject(pojo);
-				session.getScheduleItems().size();
-				session.getIdentities().size();
-				session.getJoinStates().size();
-				session.getEprWrappers().size();
-			} finally {
-				hibernateSession.close();
-			}
+			org.hibernate.Session hibernateSession = HibernateUtil.currentSession();
+			Session session = (Session) hibernateSession.load(Session.class, Long.valueOf(sessionKey));
+			Class<?> pojoClass = ClassLoaderUtil.loadClass(session.getPojoClass());
+			Object pojo = hibernateSession.load(pojoClass, Long.valueOf(session.getPojoID()));
+			session.setBusinessObject(pojo);
+
 			return session;
 		}
 		
 		for (Identity id : ids) {
 			if (IdentityType.Primary.equals(id.getType())) {
-				return getSession(id);
+				return getSessionByIdentity(id);
 			}
 		}
 		
@@ -165,108 +126,58 @@
 	}
 	
 	public static Object saveObject(Object obj) throws Exception {
-		org.hibernate.Session hibernateSession = HibernateUtil.getSessionFactory().openSession();
-		Transaction transaction = null;
-		try {
-			transaction = hibernateSession.beginTransaction();
-			hibernateSession.save(obj);
-			transaction.commit();
-		} catch (Exception e) {
-			if (transaction != null) {
-				transaction.rollback();
-			}
-			throw new ConversationActionException("Error in saveObject", e);
-		} finally {
-			hibernateSession.close();
-		}
-		
+		org.hibernate.Session hibernateSession = HibernateUtil.currentSession();
+		hibernateSession.save(obj);		
 		return obj;
 	}
 	
+	
+	public static Object getObject(long id, Class<?> cls) throws Exception {
+		org.hibernate.Session hibernateSession = HibernateUtil.currentSession();
+		return hibernateSession.load(cls, id);
+	}
+	
 	@SuppressWarnings("unchecked")
 	public static Collection saveCollection(Collection col) throws Exception {
-		org.hibernate.Session hibernateSession = HibernateUtil.getSessionFactory().openSession();
-		Transaction transaction = null;
-		try {
-			transaction = hibernateSession.beginTransaction();
+		org.hibernate.Session hibernateSession = HibernateUtil.currentSession();
 		
-			for(Iterator it = col.iterator(); it.hasNext();) {
-				Object o = it.next();
-				hibernateSession.save(o);
-			}
-			
-			transaction.commit();
-		} catch (Exception e) {
-			if (transaction != null) {
-				transaction.rollback();
-			}
-			throw new ConversationActionException("Error in saveCollection", e);
-		} finally {
-			hibernateSession.close();
+		for(Iterator it = col.iterator(); it.hasNext();) {
+			Object o = it.next();
+			hibernateSession.save(o);
 		}
 		
 		return col;
 	}
 	
 	public static void updateObject(Object obj) {
-		org.hibernate.Session hibernateSession = HibernateUtil.getSessionFactory().openSession();
-		Transaction transaction = null;
-		try {
-			transaction = hibernateSession.beginTransaction();
-			hibernateSession.update(obj);
-			transaction.commit();
-		} catch (Exception e) {
-			if (transaction != null) {
-				transaction.rollback();
-			}
-			throw new ConversationActionException("Error in updateObject", e);
-		} finally {
-			hibernateSession.close();
-		}
+		org.hibernate.Session hibernateSession = HibernateUtil.currentSession();
+		hibernateSession.update(obj);
 	}
 	
 	public static void removeObject(Object obj) {
-		org.hibernate.Session hibernateSession = HibernateUtil.getSessionFactory().openSession();
-		Transaction transaction = null;
-		try {
-			transaction = hibernateSession.beginTransaction();
-			hibernateSession.delete(obj);
-			transaction.commit();
-		} catch (Exception e) {
-			if (transaction != null) {
-				transaction.rollback();
-			}
-			throw new ConversationActionException("Error in removeObject : " + obj, e);
-		} finally {
-			hibernateSession.close();
-		}
-		
+		org.hibernate.Session hibernateSession = HibernateUtil.currentSession();
+		hibernateSession.delete(obj);	
 	}
 	
 	
-	public static Session getSession(Identity id) {
-		org.hibernate.Session hibernateSession = HibernateUtil.getSessionFactory().openSession();
-		Session session = null;
-		try {
-			String query = "select b from Identity b where b.type =:type and b.propertyValues =:propertyValues and b.serviceName =:serviceName";
-			List<?> results = hibernateSession.createQuery(query)
-										   .setParameter("type", id.getType())
-										   .setParameter("propertyValues", id.getPropertyValues())
-										   .setParameter("serviceName", id.getServiceName())
-										   .list();
-			if (results.size() < 1) {
-				return null;
-			}
-			
-			Identity theID = (Identity)results.get(0);
-			session = theID.getSession();
-			session.getScheduleItems().size();
-			session.getIdentities().size();
-			session.getJoinStates().size();
-			session.getEprWrappers().size();
-		} finally {
-			hibernateSession.close();
+	public static Session getSessionByIdentity(Identity id) throws Exception{
+		org.hibernate.Session hibernateSession = HibernateUtil.currentSession();
+		String query = "select b from Identity b where b.type =:type and b.propertyValues =:propertyValues and b.serviceName =:serviceName";
+		List<?> results = hibernateSession.createQuery(query)
+									   .setParameter("type", id.getType())
+									   .setParameter("propertyValues", id.getPropertyValues())
+									   .setParameter("serviceName", id.getServiceName())
+									   .list();
+		if (results.size() < 1) {
+			return null;
 		}
+		
+		Identity theID = (Identity)results.get(0);
+		Session session = (Session)hibernateSession.load(Session.class, theID.getSession().getId());
+		Class<?> pojoClass = ClassLoaderUtil.loadClass(session.getPojoClass());
+		Object pojo = hibernateSession.load(pojoClass, Long.valueOf(session.getPojoID()));
+		session.setBusinessObject(pojo);
+			
 		return session;
 	}
 	

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ConversationAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ConversationAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ConversationAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -20,16 +20,22 @@
 package org.jboss.soa.overlord.jbossesb.actions;
 
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.log4j.Logger;
+import org.hibernate.Transaction;
 import org.jboss.soa.esb.actions.AbstractActionLifecycle;
+import org.jboss.soa.esb.client.ServiceInvoker;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.overlord.conversation.ClassLoaderUtil;
+import org.jboss.soa.overlord.conversation.HibernateUtil;
 import org.jboss.soa.overlord.conversation.Identity;
 import org.jboss.soa.overlord.conversation.IdentityType;
+import org.jboss.soa.overlord.conversation.ScheduleItem;
 import org.jboss.soa.overlord.conversation.Session;
 import org.jboss.soa.overlord.conversation.SessionManager;
 import org.jboss.soa.overlord.jbossesb.util.MessageUtil;
@@ -40,10 +46,12 @@
  */
 public abstract class ConversationAction extends AbstractActionLifecycle {
 	
-	protected static Logger logger = Logger.getLogger(ConversationAction.class);
+	private static Logger logger = Logger.getLogger(ConversationAction.class);
 	
-	private ConfigTree config;	
+	private ConfigTree config;
 	
+	private Set<ScheduleItem> scheduleItems = new HashSet<ScheduleItem>();
+	
 	public ConversationAction(ConfigTree config) {
 		this.config = config;
 	}
@@ -62,7 +70,7 @@
 		return(ret);
 	}
 	
-	public List<Identity> getIdentities(Message message, String serviceDescriptionName, ConfigTree ct) throws Exception {
+	protected List<Identity> getIdentities(Message message, String serviceDescriptionName, ConfigTree ct) throws Exception {
 		
 		ConfigTree[] children=ct.getAllChildren();
 		java.util.List<Identity> ids=new java.util.Vector<Identity>();
@@ -164,16 +172,37 @@
 	public Message process(Message message) throws Exception {
 		String sessionKey=(String)message.getProperties().getProperty(MessageProperties.SESSION_KEY);
 		logger.info("Session Key is [" + sessionKey + "] Body is: [" + message.getBody() + "]");
-		Session session = getSession(message);
-		if (session != null && isFirstConversationAction(message)) {
-			unschedule(message);
-			logger.info("This is first conversation action to unschedule the item!");
+		
+		org.hibernate.Session hibernateSession = HibernateUtil.currentSession();
+		Transaction transaction = hibernateSession.beginTransaction();
+		try {
+			Session session = getSession(message);
+			if (session != null && isFirstConversationAction(message)) {
+				logger.info("This is first conversation action to unschedule the item!");
+				unschedule(message);
+			}
+			
+			handle(message);
+			transaction.commit();
+		} catch (Exception e) {
+			transaction.rollback();
+			throw new Exception("Error in process message: " + e, e);
+		} finally {
+			HibernateUtil.closeSession();
 		}
 		
-		return handle(message);
+		sendAsyncMessage(message);
+		
+		return message;
 	}
 	
-
+	protected void sendAsyncMessage(Message message) throws Exception {
+		for(ScheduleItem si : scheduleItems) {
+			ServiceInvoker invoker = new ServiceInvoker(si.getCategory(), si.getName());
+			invoker.deliverAsync(message);
+		}
+	}
+	
 	private boolean isFirstConversationAction(Message message) throws ClassNotFoundException{
 		String sessionKey=(String)message.getProperties().getProperty(MessageProperties.SESSION_KEY);
 		if (sessionKey != null) {
@@ -212,6 +241,13 @@
 		return method + "()";
 	}
 	
+	
+	protected void addScheduleItemToDeliver(String category, String name) {
+		ScheduleItem si = new ScheduleItem(category, name);
+		scheduleItems.add(si);
+	}
+	
+	
 	/**
 	 * This is the method that deals with business logic for derived conversation actions.
 	 * @param message
@@ -219,5 +255,6 @@
 	 * @throws Exception
 	 */
 	public abstract Message handle(Message message) throws Exception;
+
 	
 }

Deleted: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ConversationActionException.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ConversationActionException.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ConversationActionException.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -1,46 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, JBoss Inc., and others contributors as indicated 
- * by the @authors tag. All rights reserved. 
- * See the copyright.txt in the distribution for a
- * full listing of individual contributors. 
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License, v. 2.1.
- * This program is distributed in the hope that it will be useful, but WITHOUT A 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
- * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
- * You should have received a copy of the GNU Lesser General Public License,
- * v.2.1 along with this distribution; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
- * MA  02110-1301, USA.
- * 
- * (C) 2008,
- */
-package org.jboss.soa.overlord.jbossesb.actions;
-
-/**
- * @author jeffyu
- *
- */
-public class ConversationActionException extends RuntimeException {
-
-	private static final long serialVersionUID = -8332666951736901905L;
-	
-	public ConversationActionException() {
-		super();
-	}
-	
-	public ConversationActionException(String message) {
-		super(message);
-	}
-	
-	public ConversationActionException(Throwable t) {
-		super(t);
-	}
-	
-	public ConversationActionException(String message, Throwable t) {
-		super(message, t);
-	}
-
-}

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/CreateSessionAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/CreateSessionAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/CreateSessionAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,6 +19,7 @@
  */
 package org.jboss.soa.overlord.jbossesb.actions;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.overlord.conversation.Session;
@@ -31,6 +32,8 @@
  */
 public class CreateSessionAction extends ConversationAction {
 	
+	private Logger logger = Logger.getLogger(CreateSessionAction.class);
+	
 	public CreateSessionAction(ConfigTree config) {
 		super(config);
 	}
@@ -58,9 +61,8 @@
 			message.getProperties().setProperty(MessageProperties.SESSION, session);
 			message.getProperties().setProperty(MessageProperties.SESSION_KEY, String.valueOf(session.getId()));
 			
-		} else {
-			logger.error("No session has been defined");		
-			throw new ConversationActionException("Session is not defined");
+		} else {		
+			throw new Exception("No session has been defined");
 		}
 		
 		return(message);

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/IfAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/IfAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/IfAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,6 +19,7 @@
  */
 package org.jboss.soa.overlord.jbossesb.actions;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.overlord.conversation.Session;
@@ -30,6 +31,8 @@
  */
 public class IfAction extends ConversationAction {
 	
+	private static Logger logger = Logger.getLogger(IfAction.class);
+	
 	public IfAction(ConfigTree config) {
 		super(config);
 	}
@@ -72,10 +75,11 @@
 			}
 			
 			if (f_register) {
-				// Schedule the service category/name
-				session.schedule(category, name,
-						immediate.equalsIgnoreCase("true"),
-						message);
+				session.schedule(category, name, message);
+				
+				if ("true".equals(immediate)) {
+					addScheduleItemToDeliver(category, name);
+				}
 			}
 		}
 		

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/MessageRouterAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/MessageRouterAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/MessageRouterAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -21,6 +21,7 @@
 
 import java.util.List;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.client.ServiceInvoker;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.message.MessageDeliverException;
@@ -35,6 +36,8 @@
  */
 public class MessageRouterAction extends ConversationAction {
 	
+	private static Logger logger = Logger.getLogger(MessageRouterAction.class);
+	
 	private boolean routerFlag = false;
 	
 	public MessageRouterAction(ConfigTree config) {
@@ -70,7 +73,7 @@
 			}
 		}
 		if (routerFlag == false) {
-			throw new ConversationActionException ("Could not find any appropriate services to proceed!");
+			throw new Exception ("Could not find any appropriate services to proceed!");
 		}
 		return null;
 	}

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ParallelAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ParallelAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ParallelAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,6 +19,7 @@
  */
 package org.jboss.soa.overlord.jbossesb.actions;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.overlord.conversation.Session;
@@ -28,6 +29,8 @@
  */
 public class ParallelAction extends ConversationAction {
 	
+	private static Logger logger = Logger.getLogger(ParallelAction.class);
+	
 	public ParallelAction(ConfigTree config) {
 		super(config);
 	}
@@ -40,22 +43,8 @@
 		
 		ConfigTree[] children=getConfig().getAllChildren();
 		
-		// NOTE: May be issue, sending message?
-		// A parallel construct should not occur prior
-		// to a receive activity within a pipeline -
-		// this might indicate incorrect projection
-		// so should check that message has been cleared?
-		if (message.getBody().get() != null) {
-			logger.error("Message has not been received prior to parallel construct");
-		}
-		
 		for (int i=0; i < children.length; i++) {
-							
-			if (children[i].getName().equals("path")) {
-				
-				// Increment the path count, but don't schedule
-				// until after the optional join has been scheduled
-				
+			if (children[i].getName().equals("path")) {				
 				pathCount++;
 			} else if (children[i].getName().equals("join")) {
 				
@@ -76,7 +65,7 @@
 				logger.error("Join cannot be performed without concurrent paths");
 			} else {
 				session.join(joinCategory, joinName, pathCount);
-
+				logger.info("Scheduling a join state of " + joinCategory + "/" + joinName);
 			}
 		}
 
@@ -89,15 +78,16 @@
 				String immediate=children[i].getAttribute("immediate","false");
 				
 				// Schedule service
-				session.schedule(category, name,
-						immediate.equalsIgnoreCase("true"),
-						message);
-				
+				session.schedule(category, name, message);
+				if ("true".equalsIgnoreCase(immediate)){
+					addScheduleItemToDeliver(category, name);
+				}
 			}
 		}
 
 		return(message);
 	}
+
 	
 	
 }

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/PerformAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/PerformAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/PerformAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -23,7 +23,6 @@
 import java.util.Map;
 
 import org.apache.log4j.Logger;
-import org.jboss.soa.esb.client.ServiceInvoker;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.overlord.conversation.Session;
@@ -64,10 +63,17 @@
 		}
 		
 		message.getProperties().setProperty(MessageProperties.BOUND_VARIABLE_KEY, bindingVal);
-		//ServiceInvoker serviceInvoker = new ServiceInvoker(serviceCategory, serviceName);
-		//serviceInvoker.deliverSync(message, 2000);
-		session.schedule(serviceCategory, serviceName, true, message);
 		
+		session.schedule(serviceCategory, serviceName, message);
+		addScheduleItemToDeliver(serviceCategory, serviceName);
+		
+		String responseCategory = getConfig().getAttribute(ActionProperties.RESPONSE_SERVICE_CATEGORY);
+		String responseName = getConfig().getAttribute(ActionProperties.RESPONSE_SERVICE_NAME);
+		
+		if (responseCategory != null && responseName != null) {
+			session.schedule(responseCategory, responseName, message);
+		}
+		
 		return message;
 	}
 

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ReceiveMessageAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ReceiveMessageAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ReceiveMessageAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,6 +19,7 @@
  */
 package org.jboss.soa.overlord.jbossesb.actions;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
@@ -30,6 +31,8 @@
  */
 public class ReceiveMessageAction extends ConversationAction {
 	
+	private static Logger logger = Logger.getLogger(ReceiveMessageAction.class);
+	
 	public ReceiveMessageAction(ConfigTree config) {
 		super(config);
 	}

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/RetrieveSessionAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/RetrieveSessionAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/RetrieveSessionAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -21,6 +21,7 @@
 
 import java.util.List;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.overlord.conversation.Identity;
@@ -31,6 +32,8 @@
  */
 public class RetrieveSessionAction extends ConversationAction {
 	
+	private static Logger logger = Logger.getLogger(RetrieveSessionAction.class);
+	
 	public RetrieveSessionAction(ConfigTree config) {
 		super(config);
 	}

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ScheduleStateAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ScheduleStateAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/ScheduleStateAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,6 +19,7 @@
  */
 package org.jboss.soa.overlord.jbossesb.actions;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.overlord.conversation.Session;
@@ -28,6 +29,8 @@
  */
 public class ScheduleStateAction extends ConversationAction {
 	
+	private static Logger logger = Logger.getLogger(ScheduleStateAction.class);
+	
 	public ScheduleStateAction(ConfigTree config) {
 		super(config);
 	}
@@ -37,11 +40,13 @@
 		String serviceCategory=getConfig().getAttribute(ActionProperties.SERVICE_CATEGORY_PROPERTY);
 		String immediate=getConfig().getAttribute(ActionProperties.IMMEDIATE);
 		        	
-		// Schedule action pipeline
-		Session session=getSession(message);
-		        	
-		session.schedule(serviceCategory, serviceName,immediate.equalsIgnoreCase("true"), message);
+		Session session=getSession(message);		        	
+		session.schedule(serviceCategory, serviceName, message);
 		
+		if ("true".equalsIgnoreCase(immediate)) {
+			addScheduleItemToDeliver(serviceCategory, serviceName);
+		}
+		
 		logger.info("Scheduled '"+serviceCategory+"/"+serviceName+"'");
 
 		return(message);

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SendMessageAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SendMessageAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SendMessageAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -52,7 +52,7 @@
 		String requiredMType=getConfig().getAttribute(ActionProperties.MESSAGE_TYPE);
 		
 		if (requiredMType == null) {
-			throw new ConversationActionException("Message type is not defined");
+			throw new Exception("Message type is not defined");
 		}
 		
 		String mesgMType=getMessageType(message);
@@ -87,32 +87,25 @@
 		        	mesg.getHeader().getCall().setReplyTo(lepr);
 		        	
 		        	// Schedule response action pipeline
-		        	session.schedule(respServiceCategory, respServiceName, false,
-		        						message);
+		        	session.schedule(respServiceCategory, respServiceName, message);
 		        }
 		        
 		        
-		        ServiceInvoker invoker = null; 
-		        if (serviceCategory != null && serviceName != null) {
-		        	invoker = new ServiceInvoker(serviceCategory, serviceName);
-		        } else {
+		        if (serviceCategory == null && serviceName == null) {
 		        	serviceCategory = (String) MVEL.eval(categoryExpression, session.getBusinessObject());
 		        	serviceName = (String) MVEL.eval(nameExpression, session.getBusinessObject());
-		        	invoker = new ServiceInvoker(serviceCategory, serviceName);
 		        }
+		        
+				ServiceInvoker invoker = new ServiceInvoker(serviceCategory, serviceName);
 				invoker.deliverAsync(mesg);
 				
-				logger.info("Sending message to '"+serviceCategory+"/"+serviceName+"'");
+				logger.info("Sent message to '"+serviceCategory+"/"+serviceName+"'");
 				
 	        } else if (clientEPR != null) {
-	        	EPR epr=null;
+	        	EPR epr = session.getEPR(clientEPR);
 				
-				epr = session.getEPR(clientEPR);
-				
-				if (epr == null) {
-					logger.error("Client EPR '"+clientEPR+"' does not exist in session");
-					
-					throw new ConversationActionException("Client EPR '"+clientEPR+"' does not exist in session");
+				if (epr == null) {					
+					throw new Exception("Client EPR '"+clientEPR+"' does not exist in session");
 				}
 				
 				Courier courier=null;
@@ -131,14 +124,14 @@
 				
 				courier.cleanup();
 	        } else {
-	        	throw new ConversationActionException("Failed to send message");
+	        	throw new Exception("Failed to send message");
 	        }
 			
 			logger.info("MESSAGE TYPE '"+mesgMType+"' SENT.");
 			
 		} else {			
-			throw new ConversationActionException("Unexpected message type="+mesgMType+
-					  ", but expecting type="+requiredMType);
+			throw new Exception("Unexpected message type="+mesgMType+
+					  			", but expecting type="+requiredMType);
 		}
 		
 		return(message);
@@ -146,4 +139,3 @@
 	
 }
 
-

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SetVariableAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SetVariableAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SetVariableAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -22,6 +22,7 @@
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.overlord.conversation.ClassLoaderUtil;
 import org.jboss.soa.overlord.conversation.Session;
 import org.jboss.soa.overlord.conversation.SessionManager;
 import org.jboss.soa.overlord.jbossesb.util.XMLUtils;
@@ -49,23 +50,27 @@
 		
 		Session session = getSession(message);
 		Object bstate = session.getBusinessObject();
-		
 		logger.info("Set value to the variable of " + variable);
 		
 		while (variable.startsWith("parent.")) {
 			variable = variable.substring(7);
 			session = session.getParent();
+			if (session.getPojoID() != 0) {
+				Class<?> pojoClass = ClassLoaderUtil.loadClass(session.getPojoClass());
+				//Object pojo = SessionManager.getObject(session.getPojoID(), pojoClass);
+				//session.setBusinessObject(pojo);
+			}
 		}
 		
 		if (stateExpression != null) {			
 			Object result = MVEL.eval(stateExpression, bstate);
-			MVEL.setProperty(bstate, variable, result);
+			MVEL.setProperty(session.getBusinessObject(), variable, result);
 			logger.info("The Variable is: " + variable + "; stateExpression is: " + stateExpression);
 		} else if (messageExpression != null) {
 			String xmlBody = (String) message.getBody().get();
 			Element element = (Element) XMLUtils.getNode(xmlBody);
 			String result = XMLUtils.executeXpath(element, messageExpression);
-			MVEL.setProperty(bstate, variable, result);
+			MVEL.setProperty(session.getBusinessObject(), variable, result);
 			logger.info("The Variable is: " + variable + "; messageExpression is: " + messageExpression);
 		}
 

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SwitchAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SwitchAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/SwitchAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,6 +19,7 @@
  */
 package org.jboss.soa.overlord.jbossesb.actions;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.overlord.conversation.Session;
@@ -29,6 +30,8 @@
  */
 public class SwitchAction extends ConversationAction {
 	
+	private static Logger logger = Logger.getLogger(SwitchAction.class);
+	
 	public SwitchAction(ConfigTree config) {
 		super(config);
 	}
@@ -62,16 +65,15 @@
 					}
 					
 					if (selected) {
-						session.schedule(category, name, true, message);
-						logger.info("Schedule service of [" + category + "/" + name + "] immediately");
+						session.schedule(category, name, message);
+						addScheduleItemToDeliver(category, name);
+						logger.info("Scheduled service of [" + category + "/" + name + "] immediately");
 					}
 				}
 			}
 		}
 		
 		if (selected == false) {
-			logger.error("Switch case statement was not selected");
-			
 			throw new Exception("Switch case statement was not selected");
 		}
 		

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/WhenAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/WhenAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/WhenAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -19,6 +19,7 @@
  */
 package org.jboss.soa.overlord.jbossesb.actions;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.overlord.conversation.Session;
@@ -30,6 +31,8 @@
  */
 public class WhenAction extends ConversationAction {
 	
+	private static Logger logger = Logger.getLogger(WhenAction.class);
+	
 	public WhenAction(ConfigTree config) {
 		super(config);
 	}
@@ -37,50 +40,28 @@
 	
 	@Override
 	public Message handle(Message message) throws Exception {
+		
 		Session session = getSession(message);
-		int pathCount = 0;
-		String joinCategory = null;
-		String joinName = null;
 		
 		for(ConfigTree ct : getConfig().getAllChildren()) {
 			if ("when".equals(ct.getName())) {
-				pathCount ++;
-			} else if ("join".equals(ct.getName())) {
-				
-				if (joinName != null) {
-					logger.error("Join details already defined");
-				}
-				
-				joinCategory = ct.getAttribute(ActionProperties.SERVICE_CATEGORY);
-				joinName = ct.getAttribute(ActionProperties.SERVICE_NAME);
-			}
-		}
-		
-		if (joinCategory != null && joinName != null && pathCount > 0) {
-			session.join(joinCategory, joinName, pathCount);
-		}
-		
-		for(ConfigTree ct : getConfig().getAllChildren()) {
-			if ("when".equals(ct.getName())) {
 				//TODO: make the expression as an method name temporarily
 				String decision = ct.getAttribute("expression");
 				String category = ct.getAttribute(ActionProperties.SERVICE_CATEGORY);
 				String name = ct.getAttribute(ActionProperties.SERVICE_NAME);
-				try {
-					if (decision != null) {
-						Object res = MVEL.eval(getMvelMethodName(decision), session.getBusinessObject());
-						if (res instanceof Boolean) {
-							Boolean ret = (Boolean)res;
-							if (ret.booleanValue()) {
-								session.schedule(category, name, true, message);
-							}
-						} else {
-							logger.error("currently doesn't support the return value other than Boolean");
+				if (decision != null) {
+					Object res = MVEL.eval(getMvelMethodName(decision), session.getBusinessObject());
+					if (res instanceof Boolean) {
+						Boolean ret = (Boolean)res;
+						if (ret.booleanValue()) {
+							session.schedule(category, name, message);
+							addScheduleItemToDeliver(category, name);
+							logger.info("Scheduled: " + category + '/' + name);
+							break;
 						}
+					} else {
+						logger.error("currently doesn't support the return value other than Boolean");
 					}
-				} catch (Exception e) {
-					logger.error("Failed to invoke decision method: " + decision);
-					throw new ConversationActionException("Failed to invoke decision method of - " + decision);
 				}
 			}
 		}

Modified: cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/WhileAction.java
===================================================================
--- cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/WhileAction.java	2008-07-12 17:38:10 UTC (rev 140)
+++ cdl/trunk/runtime/jbossesb/src/main/java/org/jboss/soa/overlord/jbossesb/actions/WhileAction.java	2008-07-12 17:45:12 UTC (rev 141)
@@ -51,7 +51,7 @@
 			} else if ("exit".equals(ct.getName())){
 				exitConfig = ct;
 			} else {
-				throw new ConversationActionException("Unrecognized configuration Node in WhileAction");
+				throw new Exception("Unrecognized configuration Node in WhileAction");
 			}
 		}
 		
@@ -66,21 +66,22 @@
 				if (flag) {
 					String category = whileConfig.getAttribute(ActionProperties.SERVICE_CATEGORY);
 					String name = whileConfig.getAttribute(ActionProperties.SERVICE_NAME);
-					session.schedule(category, name, false, message);
+					session.schedule(category, name, message);
 					ServiceInvoker serviceInvoker = new ServiceInvoker(category, name);
 					serviceInvoker.deliverSync(message, 2000);
 					logger.info("Schedule items of " + category + "/" + name + "in WhileAction");
 				} else {
 					String category = exitConfig.getAttribute(ActionProperties.SERVICE_CATEGORY);
 					String name = exitConfig.getAttribute(ActionProperties.SERVICE_NAME);
-					session.schedule(category, name, true, message);
-					logger.info("Schedule items of " + category + "/" + name + "in WhileAction of exit branch");
+					session.schedule(category, name, message);
+					addScheduleItemToDeliver(category, name);
+					logger.info("Scheduled items of " + category + "/" + name + "in WhileAction of exit branch");
 				}
 			} else {
-				throw new ConversationActionException("method return value is not an Integer.");
+				throw new Exception("method return value is not Boolean.");
 			}
 		} else {
-			throw new ConversationActionException("Haven't found the decision method in the configuration.");
+			throw new Exception("Haven't found the decision method in the configuration.");
 		}
 		
 		return message;




More information about the overlord-commits mailing list