[jboss-svn-commits] JBL Code SVN: r37978 - in labs/jbossesb/trunk/product/services/jbpm5/src/main: java/org/jboss/soa/esb/services/jbpm5/actions and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Apr 3 00:00:57 EDT 2012
Author: tcunning
Date: 2012-04-03 00:00:56 -0400 (Tue, 03 Apr 2012)
New Revision: 37978
Added:
labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/JBPMorm.xml
labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/persistence.xml
labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/hibernate.cfg.xml
labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/jBPM-ds.xml
Modified:
labs/jbossesb/trunk/product/services/jbpm5/src/main/java/org/jboss/soa/esb/service/jbpm5/model/ProcessConstants.java
labs/jbossesb/trunk/product/services/jbpm5/src/main/java/org/jboss/soa/esb/services/jbpm5/actions/Bpm5Processor.java
labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/deployment.xml
Log:
JBESB-3761
Implement persistence with bpm5processor action.
Modified: labs/jbossesb/trunk/product/services/jbpm5/src/main/java/org/jboss/soa/esb/service/jbpm5/model/ProcessConstants.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm5/src/main/java/org/jboss/soa/esb/service/jbpm5/model/ProcessConstants.java 2012-04-03 03:58:48 UTC (rev 37977)
+++ labs/jbossesb/trunk/product/services/jbpm5/src/main/java/org/jboss/soa/esb/service/jbpm5/model/ProcessConstants.java 2012-04-03 04:00:56 UTC (rev 37978)
@@ -37,14 +37,16 @@
/* Events */
public static final String PROCESS_EVENT_TYPE = "processEventType";
public static final String PROCESS_EVENT = "processEvent";
-
-
+
/* Tags */
public static final String PROCESS_DEFINITION_NAME = "process-definition-name";
public static final String PROCESS_ID = "process-id";
public static final String PROCESS_COMMAND = "command";
public static final String PROCESS_ACTION = "process-action";
public static final String ESB_TO_BPM_PARAMS = "esbToBpmParams";
-
- public static final String PROCESS_INSTANCE_ID = "processInstanceId";
+ public static final String ENTITY_FACTORY_NAME = "entityFactoryName";
+
+ /* Message context properties */
+ public static final String SESSION_ID = "jbpm5-session-id";
+ public static final String PROCESS_INSTANCE_ID = "jbpm5-processinstance-id";
}
Modified: labs/jbossesb/trunk/product/services/jbpm5/src/main/java/org/jboss/soa/esb/services/jbpm5/actions/Bpm5Processor.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm5/src/main/java/org/jboss/soa/esb/services/jbpm5/actions/Bpm5Processor.java 2012-04-03 03:58:48 UTC (rev 37977)
+++ labs/jbossesb/trunk/product/services/jbpm5/src/main/java/org/jboss/soa/esb/services/jbpm5/actions/Bpm5Processor.java 2012-04-03 04:00:56 UTC (rev 37978)
@@ -1,5 +1,5 @@
/*
- * JBoss, Home of Professional Open Source
+ * JBoss, Home of Professinal Open Source
* Copyright 2006, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
@@ -24,7 +24,15 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
-
+import javax.naming.InitialContext;
+import javax.transaction.NotSupportedException;
+import javax.transaction.TransactionManager;
+import javax.transaction.UserTransaction;
+import javax.persistence.EntityManagerFactory;
+import javax.transaction.HeuristicMixedException;
+import javax.persistence.Persistence;
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
import javax.crypto.SealedObject;
import org.apache.log4j.Logger;
@@ -55,6 +63,8 @@
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.persistence.jpa.JPAKnowledgeService;
+
import org.drools.runtime.Environment;
import org.drools.runtime.EnvironmentName;
import org.drools.runtime.KnowledgeSessionConfiguration;
@@ -71,58 +81,22 @@
public class Bpm5Processor implements ActionLifecycle {
protected ConfigTree configTree;
private static Logger logger = Logger.getLogger(Bpm5Processor.class);
+ private UserTransaction emfUserTransaction;
+ private String entityFactoryName;
private String processDefName;
private String processId;
private String processAction;
KnowledgeBuilder kbuilder;
KnowledgeBase kbase;
- private KnowledgeAgent kagent;
private Environment kenvironment;
- private KnowledgeSessionConfiguration ksessionConfig;
-
- private StatefulKnowledgeSession ksession;
+ private KnowledgeSessionConfiguration config;
+ private StatefulKnowledgeSession ksession = null;
private KnowledgeRuntimeLogger klogger;
-
private CommandBasedWSHumanTaskHandler khandler;
-
- public void initialise() throws ActionLifecycleException {
- }
-
- public void destroy() throws ActionLifecycleException {
- if (ksession != null) {
- try {
- ksession.halt();
- } finally {
- try {
- ksession.dispose();
- } finally {
- ksession = null;
- if (klogger != null) {
- try {
- klogger.close();
- } finally {
- klogger = null;
- }
- }
- }
- }
- }
-
- kbase = null;
- processId = null;
- if (kagent != null) {
- try {
- kagent.dispose();
- } finally {
- kagent = null;
- }
- }
- }
-
/**
* Verify that the process action matches one of the valid process action values.
* @param processAction process action
@@ -149,6 +123,7 @@
this.configTree = configTree;
this.processDefName = configTree.getRequiredAttribute(ProcessConstants.PROCESS_DEFINITION_NAME);
this.processId = configTree.getRequiredAttribute(ProcessConstants.PROCESS_ID);
+ this.entityFactoryName = configTree.getAttribute(ProcessConstants.ENTITY_FACTORY_NAME, "jbpm5Persistence");
// verify the process action
this.processAction = configTree.getRequiredAttribute(ProcessConstants.PROCESS_ACTION);
@@ -157,27 +132,31 @@
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource(processDefName), ResourceType.BPMN2);
kbase = kbuilder.newKnowledgeBase();
- ksessionConfig = getSessionConfiguration(new Properties());
+
kenvironment = getEnvironment(new HashMap<String, Object>());
- ksession = kbase.newStatefulKnowledgeSession(ksessionConfig, kenvironment);
- klogger = KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(ksession, "test", 1000);
+ Properties properties = new Properties();
+ properties.put("drools.processInstanceManagerFactory","org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory");
+ properties.put("drools.processSignalManagerFactory","org.jbpm.persistence.processinstance.JPASignalManagerFactory");
+ config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(properties);
+ }
+
+ public Message process(Message message) throws ConfigurationException {
+ int sessionId = getSessionId(message);
+ if ((ksession == null) || (ksession.getId() != sessionId)) {
+ if (sessionId >= 0) {
+ ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( sessionId, kbase, config, kenvironment );
+ } else {
+ ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, config, kenvironment );
+ sessionId = ksession.getId();
+ }
+
+ klogger = KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(ksession, "test", 1000);
+ }
khandler = new CommandBasedWSHumanTaskHandler(ksession);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", khandler);
khandler.connect();
- }
- public Long getProcessInstanceId(Message msg) {
- Long id = null;
- try {
- id = (Long)msg.getContext().getContext(ProcessConstants.PROCESS_INSTANCE_ID);
- } catch (Exception e) {
- }
- return id;
- }
-
- public Message process(Message message) throws ConfigurationException
- {
// Add security context to message context.
addSecurityContext(message);
// Add authentication request context to message context.
@@ -189,52 +168,82 @@
ProcessType processType = ProcessType.fromAction((String)processAction);
switch (processType) {
case START_PROCESS:
- logger.error(ProcessConstants.START_PROCESS_TYPE);
-
+ logger.info(ProcessConstants.START_PROCESS_TYPE);
Map<String, Object> params = BpmParameterMapper.mapPropertiesToParams(message, configTree);
if (params.size() > 0) {
- processInstance = ksession.startProcess(processId, params);
- } else {
- processInstance = ksession.startProcess(processId);
- }
- processInstanceId = Long.valueOf(processInstance.getId());
- break;
+ processInstance = ksession.startProcess(processId, params);
+ } else {
+ processInstance = ksession.startProcess(processId);
+ }
+ processInstanceId = Long.valueOf(processInstance.getId());
+
+ break;
case SIGNAL_EVENT:
- logger.error(ProcessConstants.SIGNAL_EVENT_TYPE);
+ logger.info(ProcessConstants.SIGNAL_EVENT_TYPE);
String processEventType = (String) message.getProperties().getProperty(ProcessConstants.PROCESS_EVENT_TYPE);
Object processEvent = message.getProperties().getProperty(ProcessConstants.PROCESS_EVENT);
processInstanceId = getProcessInstanceId(message);
- if (processInstanceId != null) {
- ksession.signalEvent(processEventType, processEvent, processInstanceId.longValue());
- } else {
- throw new ConfigurationException(ProcessConstants.SIGNAL_EVENT_TYPE
- + ": tried to abort and process id was null");
- }
+
+ if (processInstanceId != null) {
+ ksession.signalEvent(processEventType, processEvent, processInstanceId.longValue());
+ } else {
+ throw new ConfigurationException(ProcessConstants.SIGNAL_EVENT_TYPE
+ + ": tried to abort and process id was null");
+ }
break;
+
case ABORT_PROCESS_INSTANCE:
- logger.error(ProcessConstants.ABORT_PROCESS_INSTANCE_TYPE);
+ logger.info(ProcessConstants.ABORT_PROCESS_INSTANCE_TYPE);
processInstanceId = getProcessInstanceId(message);
+
if (processInstanceId != null) {
- ksession.abortProcessInstance(processInstanceId.longValue());
- } else {
- throw new ConfigurationException(ProcessConstants.ABORT_PROCESS_INSTANCE_TYPE
- + ": tried to abort and process id was null");
- }
-
+ ksession.abortProcessInstance(processInstanceId.longValue());
+ } else {
+ throw new ConfigurationException(ProcessConstants.ABORT_PROCESS_INSTANCE_TYPE
+ + ": tried to abort and process id was null");
+ }
break;
- }
-
+ }
+
+ // Set Session and ProcessInstance information
+ message.getContext().setContext(ProcessConstants.SESSION_ID, sessionId);
message.getContext().setContext(ProcessConstants.PROCESS_INSTANCE_ID,
processInstanceId);
- if (processInstance == null) {
- processInstance = ksession.getProcessInstance(processInstanceId.longValue());
- }
-
+ ksession.dispose();
+
return message;
}
+
+ /**
+ * Return the session id from the context id.
+ * @param msg
+ * @return
+ */
+ public int getSessionId(Message msg) {
+ int id = -1;
+ try {
+ id = ((Integer)msg.getContext().getContext(ProcessConstants.SESSION_ID)).intValue();
+ } catch (Exception e) {
+ }
+ return id;
+ }
/**
+ * Return the process instance id from the message context.
+ * @param msg
+ * @return
+ */
+ public Long getProcessInstanceId(Message msg) {
+ Long id = null;
+ try {
+ id = (Long)msg.getContext().getContext(ProcessConstants.PROCESS_INSTANCE_ID);
+ } catch (Exception e) {
+ }
+ return id;
+ }
+
+ /**
* Adds the current security context to the passed in message.
* The context is added, if set, to the message context keyed by {@link SecurityService#CONTEXT}.
*
@@ -280,20 +289,64 @@
}
/**
- * Returns an environment.
+ * Returns an environment with an entity manager factory, transaction manager, and user
+ * transaction configured.
* @param overrides
* @return
*/
- public static Environment getEnvironment(Map<String, Object> overrides) {
- Environment env = EnvironmentFactory.newEnvironment();
- // set the default global resolver
- env.set(EnvironmentName.GLOBALS, new MapGlobalResolver());
- // apply any overrides
- if (overrides != null) {
- for (Map.Entry<String, Object> entry : overrides.entrySet()) {
- env.set(entry.getKey(), entry.getValue());
- }
- }
+ public Environment getEnvironment(Map<String, Object> overrides) {
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+
+ emfUserTransaction= getUserTransaction();
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory("jbpm5Persistence.jpa");
+ if ((entityFactoryName != null) && (!"".equals(entityFactoryName))) {
+ logger.info("Setting entityManager");
+ env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
+ env.set(EnvironmentName.GLOBALS, new MapGlobalResolver());
+ env.set(EnvironmentName.TRANSACTION_MANAGER, getTransactionManager());
+ env.set(EnvironmentName.TRANSACTION, emfUserTransaction);
+ }
return env;
}
+
+ /**
+ * Gets the user transaction from JNDI.
+ * @return
+ */
+ public static UserTransaction getUserTransaction() {
+ UserTransaction ut = null;
+ try {
+ InitialContext ic = new InitialContext();
+ ut = (UserTransaction) ic.lookup("UserTransaction");
+ if (ut == null) throw new IllegalStateException("JNDI lookup of user transaction failed.");
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new IllegalStateException("JNDI lookup of user transaction failed.");
+ }
+ return ut;
+ }
+
+ /**
+ * Gets the transaction manager from JNDI.
+ * @return
+ */
+ public static TransactionManager getTransactionManager() {
+ TransactionManager tm = null;
+ try {
+ InitialContext ic = new InitialContext();
+ tm = (TransactionManager) ic.lookup("java:/TransactionManager");
+ if (tm == null) throw new IllegalStateException("JNDI lookup of transaction manager failed.");
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new IllegalStateException("JNDI lookup of transaction manager failed.");
+ }
+ return tm;
+ }
+
+ public void initialise() throws ActionLifecycleException {
+ }
+
+ public void destroy() throws ActionLifecycleException {
+ }
+
}
Added: labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/JBPMorm.xml
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/JBPMorm.xml (rev 0)
+++ labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/JBPMorm.xml 2012-04-03 04:00:56 UTC (rev 37978)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+ version="1.0">
+ <named-query name="ProcessInstancesWaitingForEvent">
+ <query>
+select
+ processInstanceInfo.processInstanceId
+from
+ ProcessInstanceInfo processInstanceInfo join processInstanceInfo.eventTypes eventTypes
+where
+ eventTypes = :type
+ </query>
+ </named-query>
+</entity-mappings>
Modified: labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/deployment.xml
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/deployment.xml 2012-04-03 03:58:48 UTC (rev 37977)
+++ labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/deployment.xml 2012-04-03 04:00:56 UTC (rev 37978)
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<jbossesb-deployment>
+<?xml version="1.0" encoding="UTF-8"?><jbossesb-deployment>
<depends>jboss.esb:deployment=jbossesb.esb</depends>
</jbossesb-deployment>
Added: labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/persistence.xml (rev 0)
+++ labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/META-INF/persistence.xml 2012-04-03 04:00:56 UTC (rev 37978)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<persistence version="1.0"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
+ http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
+ http://java.sun.com/xml/ns/persistence/orm
+ http://java.sun.com/xml/ns/persistence/orm_1_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="jbpm5Persistence.jpa" transaction-type="JTA">
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <jta-data-source>java:jboss/datasources/jbpm5DS</jta-data-source>
+
+ <mapping-file>META-INF/JBPMorm.xml</mapping-file>
+ <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
+ <class>org.drools.persistence.info.SessionInfo</class>
+ <class>org.drools.persistence.info.WorkItemInfo</class>
+ <properties>
+ <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
+ <property name="hibernate.hbm2ddl.auto" value="update"/>
+ <!-- for AS5 -->
+ <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />
+ </properties>
+ </persistence-unit>
+</persistence>
Added: labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/hibernate.cfg.xml
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/hibernate.cfg.xml (rev 0)
+++ labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/hibernate.cfg.xml 2012-04-03 04:00:56 UTC (rev 37978)
@@ -0,0 +1,39 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!DOCTYPE hibernate-configuration PUBLIC
+ "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
+
+<hibernate-configuration>
+
+ <session-factory>
+
+ <!-- Database connection settings -->
+ <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
+ <property name="connection.url">jdb:mysql://localhost:3306/jbpm5</property>
+ <!--property name="connection.url">jdbc:h2:file:/NotBackedUp/data/mydb</property-->
+ <property name="connection.username">jbpm5</property>
+ <property name="connection.password">jbpm5</property>
+
+ <!-- JDBC connection pool (use the built-in) -->
+ <property name="connection.pool_size">1</property>
+
+ <!-- SQL dialect -->
+ <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
+
+ <!-- Enable Hibernate's automatic session context management -->
+ <property name="current_session_context_class">thread</property>
+
+ <!-- Disable the second-level cache -->
+ <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
+
+ <!-- Echo all executed SQL to stdout -->
+ <property name="show_sql">false</property>
+
+ <!-- Drop and re-create the database schema on startup? -->
+ <property name="hbm2ddl.auto">create</property>
+
+ <mapping resource="AuditLog.hbm.xml"/>
+
+ </session-factory>
+
+</hibernate-configuration>
Added: labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/jBPM-ds.xml
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/jBPM-ds.xml (rev 0)
+++ labs/jbossesb/trunk/product/services/jbpm5/src/main/resources/jBPM-ds.xml 2012-04-03 04:00:56 UTC (rev 37978)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<datasources>
+ <local-tx-datasource>
+ <jndi-name>jboss/datasources/jbpm5DS</jndi-name>
+ <connection-url>jdbc:h2:${jboss.server.data.dir}${/}h2${/}jbpm5DB;MVCC=TRUE</connection-url>
+ <driver-class>org.h2.Driver</driver-class>
+ <user-name>sa</user-name>
+ <password/>
+ <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
+ <min-pool-size>5</min-pool-size>
+ <max-pool-size>20</max-pool-size>
+ <idle-timeout-minutes>0</idle-timeout-minutes>
+ <prepared-statement-cache-size>32</prepared-statement-cache-size>
+ <depends>jboss:service=h2,database=jbpm5DB</depends>
+ </local-tx-datasource>
+ <mbean code="org.jboss.internal.soa.esb.dependencies.H2Database"
+ name="jboss:service=h2,database=jbpm5DB">
+ <attribute name="Database">jbpm5DB</attribute>
+ <attribute name="DataDir">${jboss.server.data.dir}</attribute>
+ </mbean>
+</datasources>
More information about the jboss-svn-commits
mailing list