diff options
Diffstat (limited to 'calamus-engine/src/main/java/io/trygvis')
7 files changed, 250 insertions, 38 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(); + } } diff --git a/calamus-engine/src/main/java/io/trygvis/engine/JenkinsBuildResultMessageListener.java b/calamus-engine/src/main/java/io/trygvis/engine/JenkinsBuildResultMessageListener.java new file mode 100644 index 0000000..08b5e5b --- /dev/null +++ b/calamus-engine/src/main/java/io/trygvis/engine/JenkinsBuildResultMessageListener.java @@ -0,0 +1,53 @@ +package io.trygvis.engine; + +import org.kie.internal.runtime.StatefulKnowledgeSession; +import org.slf4j.Logger; + +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.io.IOException; +import java.io.StringReader; +import java.util.Properties; + +import static java.lang.Integer.parseInt; +import static org.slf4j.LoggerFactory.getLogger; + +public class JenkinsBuildResultMessageListener implements MessageListener { + private final Logger log = getLogger(getClass()); + + private StatefulKnowledgeSession session; + + public JenkinsBuildResultMessageListener(StatefulKnowledgeSession session) { + this.session = session; + } + + @Override + public void onMessage(Message message) { + if (!(message instanceof TextMessage)) { + return; + } + + try { + TextMessage m = (TextMessage) message; + Properties p = new Properties(); + p.load(new StringReader(m.getText())); + + String jobName = p.getProperty("jobName"); + int buildNumber = parseInt(p.getProperty("buildNumber")); + String result = p.getProperty("result"); + + log.info("New build: jobName={}, buildNumber={}, result={}", jobName, buildNumber, result); + + /* + String type; + Object event; + long processInstanceId; + jbpm.signalEvent(type, event, processInstanceId); + */ + } catch (JMSException | IOException e) { + e.printStackTrace(); + } + } +} diff --git a/calamus-engine/src/main/java/io/trygvis/engine/Main.java b/calamus-engine/src/main/java/io/trygvis/engine/Main.java index bc322e8..f5bfb8a 100644 --- a/calamus-engine/src/main/java/io/trygvis/engine/Main.java +++ b/calamus-engine/src/main/java/io/trygvis/engine/Main.java @@ -1,13 +1,22 @@ package io.trygvis.engine; -import static io.trygvis.engine.CalamusJbpm.CalamusProcess.DEPLOY; +import org.kie.internal.runtime.StatefulKnowledgeSession; public class Main { - public static void main(String[] args) { - CalamusJbpm jbpm = new CalamusJbpm(); + public static void main(String[] args) throws Exception { - MqClient mqClient = new MqClient(jbpm.getSession(), "tcp://localhost:61616"); + CalamusJbpm calamus = new CalamusJbpm(); - jbpm.startProcess(DEPLOY); + String brokerUrl = "tcp://localhost:61616"; + + StatefulKnowledgeSession session = calamus.getSession(); + + try (MqClient buildResultClient = new MqClient(brokerUrl, "jenkins.build-result", new JenkinsBuildResultMessageListener(session)); + MqClient newDeployClient = new MqClient(brokerUrl, "nexus.new-artifact", new NexusNewArtifactMessageListener(session))) { + + while (true) { + Thread.sleep(1000); + } + } } } diff --git a/calamus-engine/src/main/java/io/trygvis/engine/MqClient.java b/calamus-engine/src/main/java/io/trygvis/engine/MqClient.java index b609c9f..91eec37 100644 --- a/calamus-engine/src/main/java/io/trygvis/engine/MqClient.java +++ b/calamus-engine/src/main/java/io/trygvis/engine/MqClient.java @@ -6,23 +6,24 @@ import org.kie.internal.runtime.StatefulKnowledgeSession; import javax.jms.Connection; import javax.jms.Destination; import javax.jms.JMSException; -import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.Session; +import javax.jms.TextMessage; +import java.io.IOException; +import java.io.StringReader; +import java.util.Properties; +import static java.lang.Integer.parseInt; import static javax.jms.Session.AUTO_ACKNOWLEDGE; public class MqClient implements AutoCloseable { private Connection connection; -// private final ActiveMQConnectionFactory connectionFactory; -// private final StatefulKnowledgeSession jbpm; - public MqClient(final StatefulKnowledgeSession jbpm, String brukerUrl) { -// this.jbpm = jbpm; - ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brukerUrl); + public MqClient(String brokerUrl, String queueName, MessageListener messageListener) { + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl); try { connection = connectionFactory.createConnection(); @@ -30,34 +31,10 @@ public class MqClient implements AutoCloseable { Session session = connection.createSession(false, AUTO_ACKNOWLEDGE); - Destination destination = session.createQueue("jenkins.build-result"); + Destination destination = session.createQueue(queueName); MessageConsumer consumer = session.createConsumer(destination); - consumer.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - if (!(message instanceof MapMessage)) { - return; - } - - MapMessage m = (MapMessage) message; - - try { - String jobName = m.getString("jobName"); - int buildNumber = m.getInt("buildNumber"); - String result = m.getString("result"); - -/* - String type; - Object event; - long processInstanceId; - jbpm.signalEvent(type, event, processInstanceId); -*/ - } catch (JMSException e) { - e.printStackTrace(); - } - } - }); + consumer.setMessageListener(messageListener); } catch (JMSException e) { e.printStackTrace(); } diff --git a/calamus-engine/src/main/java/io/trygvis/engine/NexusNewArtifactMessageListener.java b/calamus-engine/src/main/java/io/trygvis/engine/NexusNewArtifactMessageListener.java new file mode 100644 index 0000000..f3f9f05 --- /dev/null +++ b/calamus-engine/src/main/java/io/trygvis/engine/NexusNewArtifactMessageListener.java @@ -0,0 +1,58 @@ +package io.trygvis.engine; + +import org.kie.internal.runtime.StatefulKnowledgeSession; +import org.slf4j.Logger; + +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.io.IOException; +import java.io.StringReader; +import java.util.Properties; + +import static org.slf4j.LoggerFactory.getLogger; + +public class NexusNewArtifactMessageListener implements MessageListener { + private final Logger log = getLogger(getClass()); + + private final StatefulKnowledgeSession session; + + public NexusNewArtifactMessageListener(StatefulKnowledgeSession session) { + this.session = session; + } + + @Override + public void onMessage(Message message) { + System.out.println("NexusNewArtifactMessageListener.onMessage"); + + System.out.println("message.getClass() = " + message.getClass()); + if (!(message instanceof TextMessage)) { + return; + } + + try { + TextMessage m = (TextMessage) message; + Properties p = new Properties(); + p.load(new StringReader(m.getText())); + + String repository = p.getProperty("repository"); + String groupId = p.getProperty("groupId"); + String artifactId = p.getProperty("artifactId"); + String version = p.getProperty("version"); + String classifier = p.getProperty("classifier"); + String extension = p.getProperty("extension"); + + log.info("New artifact: groupId={}, artifactId={}, version={}, classifier={}, extension={}", groupId, artifactId, version, classifier, extension); + + /* + String type; + Object event; + long processInstanceId; + jbpm.signalEvent(type, event, processInstanceId); + */ + } catch (JMSException | IOException e) { + e.printStackTrace(); + } + } +} diff --git a/calamus-engine/src/main/java/io/trygvis/engine/domain/AbstractEntity.java b/calamus-engine/src/main/java/io/trygvis/engine/domain/AbstractEntity.java new file mode 100644 index 0000000..f1357b4 --- /dev/null +++ b/calamus-engine/src/main/java/io/trygvis/engine/domain/AbstractEntity.java @@ -0,0 +1,19 @@ +package io.trygvis.engine.domain; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.SequenceGenerator; + +@Entity +@SequenceGenerator(name = "calamusSeq", sequenceName = "calamus_seq") +public abstract class AbstractEntity { + @Id + @GeneratedValue(strategy = GenerationType.AUTO, generator = "calamusSeq") + private Long id; + + public Long getId() { + return id; + } +} diff --git a/calamus-engine/src/main/java/io/trygvis/engine/domain/Artifact.java b/calamus-engine/src/main/java/io/trygvis/engine/domain/Artifact.java new file mode 100644 index 0000000..922376b --- /dev/null +++ b/calamus-engine/src/main/java/io/trygvis/engine/domain/Artifact.java @@ -0,0 +1,48 @@ +package io.trygvis.engine.domain; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import java.util.Optional; + +import static java.util.Optional.ofNullable; + +@Entity +public class Artifact extends AbstractEntity { + @Column(length = 100, nullable = false) + private String groupId; + + @Column(length = 100, nullable = false) + private String artifactId; + + @Column(length = 100, nullable = false) + private String version; + + @Column(length = 100) + private String classifier; + + @Column(length = 100, nullable = false) + private String extension; + + public String getGroupId() { + return groupId; + } + + public String getArtifactId() { + return artifactId; + } + + public String getVersion() { + return version; + } + + public Optional<String> getClassifier() { + return ofNullable(classifier); + } + + public String getExtension() { + return extension; + } +} |