summaryrefslogtreecommitdiff
path: root/calamus-engine/src/main/java/io/trygvis/engine/CalamusJbpm.java
diff options
context:
space:
mode:
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.java50
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();
+ }
}