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 | 50 |
1 files changed, 49 insertions, 1 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 index 0a7be62..cc2ff41 100644 --- a/calamus-engine/src/main/java/io/trygvis/engine/CalamusJbpm.java +++ b/calamus-engine/src/main/java/io/trygvis/engine/CalamusJbpm.java @@ -2,6 +2,9 @@ package io.trygvis.engine; import bitronix.tm.TransactionManagerServices; import bitronix.tm.resource.jdbc.PoolingDataSource; +import com.googlecode.flyway.core.Flyway; +import com.googlecode.flyway.core.api.MigrationInfo; +import com.googlecode.flyway.core.api.MigrationInfoService; import org.jbpm.bpmn2.handler.ServiceTaskHandler; import org.jbpm.process.audit.AuditLoggerFactory; import org.kie.api.KieBase; @@ -13,11 +16,21 @@ 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 org.slf4j.Logger; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; +import javax.sql.DataSource; +import java.util.Date; + +import static java.lang.String.format; +import static org.slf4j.LoggerFactory.getLogger; public class CalamusJbpm { + private final Logger log = getLogger(getClass()); + + private final EntityManagerFactory emf; + private final StatefulKnowledgeSession session; public static enum CalamusProcess { @@ -42,7 +55,9 @@ public class CalamusJbpm { ds.getDriverProperties().put("driverClassName", org.postgresql.Driver.class.getCanonicalName()); ds.init(); - EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa"); + runFlyway(log, ds, "", "public"); + + 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()); @@ -63,7 +78,40 @@ public class CalamusJbpm { return session; } + public EntityManagerFactory getEntityManagerFactory() { + return emf; + } + public void startProcess(CalamusProcess process) { ProcessInstance processInstance = session.startProcess(process.name); } + + private static void runFlyway(Logger log, DataSource dataSource, String prefix, String schema) { + log.info("Running migrations for {}", schema); + + Flyway flyway = new Flyway(); + flyway.setDataSource(dataSource); + flyway.setSchemas(schema); + flyway.setLocations("db/" + prefix); + flyway.setInitOnMigrate(true); + MigrationInfoService info = flyway.info(); + log.info(format("%-15s %-10s %-19s %s", "Version", "State", "Installed on", "Description")); + for (MigrationInfo mi : info.all()) { + Date installedOn = mi.getInstalledOn(); + log.info(format("%-15s %-10s %-19s %s", + mi.getVersion(), + trimToEmpty(mi.getState().getDisplayName()), + installedOn != null ? new Date(installedOn.getTime()).toString() : "", + trimToEmpty(mi.getDescription()))); + } + flyway.migrate(); + } + + private static String trimToEmpty(String string) { + if (string == null) { + return ""; + } + + return string.trim(); + } } |