summaryrefslogtreecommitdiff
path: root/calamus-engine/src/main/java/io/trygvis/engine/CalamusDbConfig.java
diff options
context:
space:
mode:
Diffstat (limited to 'calamus-engine/src/main/java/io/trygvis/engine/CalamusDbConfig.java')
-rw-r--r--calamus-engine/src/main/java/io/trygvis/engine/CalamusDbConfig.java129
1 files changed, 129 insertions, 0 deletions
diff --git a/calamus-engine/src/main/java/io/trygvis/engine/CalamusDbConfig.java b/calamus-engine/src/main/java/io/trygvis/engine/CalamusDbConfig.java
new file mode 100644
index 0000000..39772c8
--- /dev/null
+++ b/calamus-engine/src/main/java/io/trygvis/engine/CalamusDbConfig.java
@@ -0,0 +1,129 @@
+package io.trygvis.engine;
+
+import bitronix.tm.BitronixTransactionManager;
+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.process.audit.JPAAuditLogService;
+import org.kie.api.io.Resource;
+import org.kie.api.io.ResourceType;
+import org.kie.api.runtime.manager.RuntimeEnvironment;
+import org.kie.internal.io.ResourceFactory;
+import org.kie.spring.factorybeans.RuntimeEnvironmentFactoryBean;
+import org.kie.spring.factorybeans.RuntimeManagerFactoryBean;
+import org.slf4j.Logger;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.DependsOn;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy;
+import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
+import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.transaction.jta.JtaTransactionManager;
+import org.springframework.transaction.support.TransactionTemplate;
+
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import static java.lang.String.format;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * http://planet.jboss.org/post/jbpm_6_with_spring
+ */
+@Configuration
+@EnableTransactionManagement
+public class CalamusDbConfig {
+ private final Logger log = getLogger(getClass());
+
+ @Bean
+ public DataSource dataSource() {
+ 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();
+
+ return new TransactionAwareDataSourceProxy(new LazyConnectionDataSourceProxy(ds));
+// return ds;
+ }
+
+ public static class DbMigrations {
+ }
+
+ @Bean
+ public DbMigrations dbMigrations(DataSource dataSource) {
+ runFlyway(log, dataSource, "", "public");
+ return new DbMigrations();
+ }
+
+ 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();
+ }
+
+ @Bean(destroyMethod = "shutdown")
+ public BitronixTransactionManager bitronixTransactionManager() {
+// bitronix.tm.Configuration configuration = TransactionManagerServices.getConfiguration();
+ return TransactionManagerServices.getTransactionManager();
+ }
+
+ @Bean
+ public PlatformTransactionManager platformTransactionManager(BitronixTransactionManager transactionManager) {
+ return new JtaTransactionManager(transactionManager, transactionManager);
+ }
+
+ @Bean
+ public TransactionTemplate transactionTemplate(PlatformTransactionManager platformTransactionManager) {
+ return new TransactionTemplate(platformTransactionManager);
+ }
+
+ @Bean
+ @DependsOn("dbMigrations")
+ public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
+ LocalContainerEntityManagerFactoryBean x = new LocalContainerEntityManagerFactoryBean();
+ x.setPersistenceUnitName("org.jbpm.persistence.jpa");
+ return x;
+ }
+
+ @Bean
+ public JPAAuditLogService jpaAuditLogService(EntityManagerFactory entityManagerFactory) {
+ return new JPAAuditLogService(entityManagerFactory);
+ }
+}