diff options
Diffstat (limited to 'calamus-engine/src/main/java/io/trygvis/engine/CalamusJbpm.java')
-rw-r--r-- | calamus-engine/src/main/java/io/trygvis/engine/CalamusJbpm.java | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/calamus-engine/src/main/java/io/trygvis/engine/CalamusJbpm.java b/calamus-engine/src/main/java/io/trygvis/engine/CalamusJbpm.java new file mode 100644 index 0000000..0a7be62 --- /dev/null +++ b/calamus-engine/src/main/java/io/trygvis/engine/CalamusJbpm.java @@ -0,0 +1,69 @@ +package io.trygvis.engine; + +import bitronix.tm.TransactionManagerServices; +import bitronix.tm.resource.jdbc.PoolingDataSource; +import org.jbpm.bpmn2.handler.ServiceTaskHandler; +import org.jbpm.process.audit.AuditLoggerFactory; +import org.kie.api.KieBase; +import org.kie.api.runtime.Environment; +import org.kie.api.runtime.EnvironmentName; +import org.kie.api.runtime.process.ProcessInstance; +import org.kie.internal.KnowledgeBaseFactory; +import org.kie.internal.io.ResourceFactory; +import org.kie.internal.persistence.jpa.JPAKnowledgeService; +import org.kie.internal.runtime.StatefulKnowledgeSession; +import org.kie.internal.utils.KieHelper; + +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +public class CalamusJbpm { + private final StatefulKnowledgeSession session; + + public static enum CalamusProcess { + DEPLOY("io.trygvis.bpm.Deploy"); + + private String name; + + CalamusProcess(String name) { + this.name = name; + } + } + + public CalamusJbpm() { + PoolingDataSource ds = new PoolingDataSource(); + ds.setUniqueName("jdbc/jbpm-ds"); + ds.setClassName(bitronix.tm.resource.jdbc.lrc.LrcXADataSource.class.getCanonicalName()); + ds.setMaxPoolSize(3); + ds.setAllowLocalTransactions(true); + ds.getDriverProperties().put("user", "jbpm"); + ds.getDriverProperties().put("password", "jbpm"); + ds.getDriverProperties().put("url", "jdbc:postgresql://localhost/jbpm"); + ds.getDriverProperties().put("driverClassName", org.postgresql.Driver.class.getCanonicalName()); + ds.init(); + + EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa"); + Environment env = KnowledgeBaseFactory.newEnvironment(); + env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf); + env.set(EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager()); + + KieBase kieBase = new KieHelper() + .addResource(ResourceFactory.newClassPathResource("Deploy.bpmn2")) + .build(); + + session = JPAKnowledgeService.newStatefulKnowledgeSession(kieBase, null, env); + session.addEventListener(AuditLoggerFactory.newJPAInstance(env)); + + session.getWorkItemManager().registerWorkItemHandler("Service Task", new ServiceTaskHandler()); + session.getWorkItemManager().registerWorkItemHandler("Upgrade App", new UpgradeAppWorkItemHandler()); + session.getWorkItemManager().registerWorkItemHandler("Restart App", new RestartAppWorkItemHandler()); + } + + public StatefulKnowledgeSession getSession() { + return session; + } + + public void startProcess(CalamusProcess process) { + ProcessInstance processInstance = session.startProcess(process.name); + } +} |