[jboss-svn-commits] JBL Code SVN: r38273 - labs/jbossesb/branches/JBESB_4_11_CP/product/services/jbpm5/src/main/java/org/jboss/soa/esb/services/jbpm5/actions.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jan 15 15:28:49 EST 2013


Author: tcunning
Date: 2013-01-15 15:28:48 -0500 (Tue, 15 Jan 2013)
New Revision: 38273

Modified:
   labs/jbossesb/branches/JBESB_4_11_CP/product/services/jbpm5/src/main/java/org/jboss/soa/esb/services/jbpm5/actions/AbstractBpm5Action.java
Log:
JBESB-3862
Use one static session and one handler for human task.


Modified: labs/jbossesb/branches/JBESB_4_11_CP/product/services/jbpm5/src/main/java/org/jboss/soa/esb/services/jbpm5/actions/AbstractBpm5Action.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_11_CP/product/services/jbpm5/src/main/java/org/jboss/soa/esb/services/jbpm5/actions/AbstractBpm5Action.java	2013-01-15 18:22:07 UTC (rev 38272)
+++ labs/jbossesb/branches/JBESB_4_11_CP/product/services/jbpm5/src/main/java/org/jboss/soa/esb/services/jbpm5/actions/AbstractBpm5Action.java	2013-01-15 20:28:48 UTC (rev 38273)
@@ -61,7 +61,6 @@
 import org.drools.runtime.KnowledgeSessionConfiguration;
 import org.drools.runtime.conf.ClockTypeOption;
 import org.drools.runtime.process.WorkItemHandler;
-
 import org.drools.runtime.StatefulKnowledgeSession;
 
 /**
@@ -71,37 +70,38 @@
  * @since Version 4.11
  */
 public abstract class AbstractBpm5Action extends AbstractActionPipelineProcessor {
-    protected ConfigTree configTree;
     protected Logger logger;
-    
+	protected ConfigTree configTree;
+
+	/* ksession */
+    public static StatefulKnowledgeSession _ksession = null;
+    public static WorkItemHandler khandler = null;
+	
     /* Defaults are HornetQ default settings to match the BRMS defaults */
     public static final String DEFAULT_HANDLER_CLASS = "org.jbpm.task.service.hornetq.CommandBasedHornetQWSHumanTaskHandler";
     public static final String DEFAULT_HANDLER_HOST = "127.0.0.1";
-    public static final String DEFAULT_HANDLER_PORT = "5446";
-    
-    private UserTransaction emfUserTransaction;
-    
-    protected String entityFactoryName;
-    
-    protected String processDefName;
+    public static final String DEFAULT_HANDLER_PORT = "5153";
 
     /* Handler settings */
     protected String handlerClass;
     protected String handlerHost;
     protected String handlerPort;
-    
+    protected String entityFactoryName;    
+    protected String processDefName;
+
+    protected KnowledgeBase kbase;
     protected KnowledgeBuilder kbuilder;
-    protected Environment kenvironment;
     protected KnowledgeSessionConfiguration config;
-    protected KnowledgeBase kbase;
-            
+
+    protected Environment kenvironment;
+    protected UserTransaction emfUserTransaction;
+    
 	public AbstractBpm5Action(ConfigTree configTree, Logger logger) throws ConfigurationException
 	{
-		this.configTree = configTree;
 		this.logger = logger;
+		this.configTree = configTree;
 
-		this.entityFactoryName = configTree.getAttribute(ProcessConstants.ENTITY_FACTORY_NAME, "jbpm5Persistence.jpa");
-		
+		this.entityFactoryName = configTree.getAttribute(ProcessConstants.ENTITY_FACTORY_NAME, "jbpm5Persistence.jpa");		
         this.processDefName = configTree.getRequiredAttribute(ProcessConstants.PROCESS_DEFINITION_NAME);
 
 		this.handlerClass = configTree.getAttribute(ProcessConstants.PROCESS_HANDLER_CLASS, DEFAULT_HANDLER_CLASS);
@@ -121,6 +121,27 @@
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
         kbuilder.add(ResourceFactory.newClassPathResource(processDefName), ResourceType.BPMN2);
         kbase = kbuilder.newKnowledgeBase();
+        
+        // Create session
+        synchronized (this) {
+            if (_ksession == null) {
+	        	_ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, config, kenvironment);
+				try {
+					khandler = getHandler(_ksession);
+				} catch (Exception e) {
+					throw new ActionLifecycleException(e);
+				}
+			
+				logger.debug("Session id: " + _ksession.getId());
+			
+				// Register ESB WorkItemHandler as well
+				ESBServiceWorkItemHandler esbhandler = new ESBServiceWorkItemHandler();
+				ESBActionWorkItemHandler actionhandler = new ESBActionWorkItemHandler();
+				_ksession.getWorkItemManager().registerWorkItemHandler("JBossESB", esbhandler);
+				_ksession.getWorkItemManager().registerWorkItemHandler("ESBAction", actionhandler);
+				_ksession.getWorkItemManager().registerWorkItemHandler("Human Task", khandler);		
+        	}
+        }
 	}
 	
 	public WorkItemHandler getHandler(StatefulKnowledgeSession session) throws ClassNotFoundException,
@@ -132,25 +153,6 @@
 	}
 		
 	/**
-	 * @param wih
-	 * @throws ClassNotFoundException
-	 * @throws InstantiationException
-	 * @throws NoSuchMethodException
-	 * @throws IllegalAccessException
-	 * @throws InvocationTargetException
-	 */
-	public void connectHandler(WorkItemHandler wih) 
-	    throws ClassNotFoundException, InstantiationException, NoSuchMethodException, IllegalAccessException,
-	    InvocationTargetException {
-		Class handlerKlass = ClassUtil.forName(handlerClass, AbstractBpm5Action.class);
-		Method connectionMethod = handlerKlass.getMethod("setConnection", String.class, Integer.TYPE);
-		connectionMethod.invoke(wih, handlerHost, Integer.valueOf(handlerPort));
-				
-		Method connectMethod = handlerKlass.getMethod("connect");
-		connectMethod.invoke(wih);
-	}
-	
-	/**
 	 * Get the StatefulKnowledgeSession - using an ID from the message - or create a new one.
 	 * @param message Message to search for session information
 	 * @return StatefulKnowledgeSession, either loaded or new 
@@ -158,35 +160,13 @@
 	 */
 	public StatefulKnowledgeSession getSession(Message message) throws ActionProcessingException {
 	    StatefulKnowledgeSession ksession;
-	    WorkItemHandler khandler;
 	    
 		int sessionId = getSessionId(message);
 		if (sessionId >= 0) {
+	        kenvironment = getEnvironment(new HashMap<String, Object>());
 			ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( sessionId, kbase, config, kenvironment );		
 		} else {		
-			ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, config, kenvironment );
-
-			try {
-				khandler = getHandler(ksession);
-			} catch (Exception e) {
-				throw new ActionProcessingException(e);
-			}
-
-	                // Register ESB WorkItemHandler as well
-			ESBServiceWorkItemHandler esbhandler = new ESBServiceWorkItemHandler();
-			ESBActionWorkItemHandler actionhandler = new ESBActionWorkItemHandler();
-			ksession.getWorkItemManager().registerWorkItemHandler("JBossESB", esbhandler);
-			ksession.getWorkItemManager().registerWorkItemHandler("ESBAction", actionhandler);
-			
-			ksession.getWorkItemManager().registerWorkItemHandler("Human Task", khandler);
-			 
-
-			try {
-				connectHandler(khandler);
-			} catch (Exception e) {
-				throw new ActionProcessingException(e);
-			}
-			
+			ksession = _ksession;
 		}
 		return ksession;
 	}



More information about the jboss-svn-commits mailing list