John F. Berry
2018-09-04 16:10:45 UTC
I've posted a few questions over the past month about various steps in a camel route. I had developed both a Spring version and a Java DSL version simultaneously at the beginning, because of either the lack or abundance of certain endpoint development in each. The Java DSL version worked out best in the continuing development, but then the "powers that be" asked me to make a Windows service for it.
I ended up being able to package it to en executable jar, but then found that perhaps I should use Karaf as an OSGi container run as a windows service. I have Karaf installed with it's awaiting service container, but it looks like it's a pain to configure a Camel Java DSL route to an OSGi container, but what I did seem to find was people have used a Spring OSGi Camel package and overrode the configuration to execute a java "bean".
My question is: Can the entire Camel Context developed in Spring be pointed to the completed Java DSL developed package? Can I just add a shell around my already completed work? My route runs fine from maven using "mvn exec:java" or running java - jar <package> .
Now that I got this running, I'd rather not disassemble and re-wire, although it would be a good educational experience.
MyRouteBuilder.java :
import java.util.Base64;
import org.apache.camel.spi.DataFormat;
import ca.uhn.hl7v2.parser.Parser;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.camel.component.sql.SqlComponent;
public class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
basicDataSource.setUrl("jdbc:sqlserver://XXX:52739;databaseName=XXX;");
basicDataSource.setUsername("XXX");
basicDataSource.setPassword("XXX");
SqlComponent sqlComponent = new SqlComponent();
sqlComponent.setDataSource(basicDataSource);
getContext().addComponent("psoft-sql", sqlComponent);
from("mllp://ZZZ:8888")
.log("..Received HL7 message with control id ${header.CamelMllpMessageControlId}")
.convertBodyTo(String.class)
.unmarshal()
.hl7(false)
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
Message message = exchange.getIn().getBody(Message.class);
ca.uhn.hl7v2.util.Terser terser = new Terser(message);
String obx5 = terser.get("/.OBX-5-5");
String EDMId = terser.get("/.OBR-3") + ".pdf";
String voucher = terser.get("/.OBR-2");
byte[] decoded = Base64.getDecoder().decode(obx5);
exchange.getOut().setBody(decoded);
exchange.getOut().setHeader("voucher", voucher);
exchange.getOut().setHeader("CamelFileName", EDMId );
}
} )
.log("..Processed voucher ${header.voucher} to file ${header.CamelFileName}")
.to("file:target/messages/others")
.recipientList(simple("psoft-sql:INSERT INTO lawsonprod.PeopleSoftVCR (Voucher, Facility, image) VALUES ('12345', '1', '${header.CamelFileName}')") )
;
}
}
POM.xml (given there's a lot of extras in here not used due to attempts during development)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.ZZZ.camel</groupId>
<artifactId>EDMtoPSoft-java</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>EDM base64 HL7 documents to PeopleSoft</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencyManagement>
<dependencies>
<!-- Camel BOM -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-parent</artifactId>
<version>2.21.1</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
</dependency>
<!-- logging -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<scope>runtime</scope>
</dependency>
<!-- testing -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-mllp</artifactId>
<version>2.21.1</version>
</dependency>
<!-- Project stuff -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-hl7</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-netty4</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-base64</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-sql</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.0.0.jre10</version>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- Allows the example to be run via 'mvn compile exec:java' -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<configuration>
<mainClass>org.ZZZ.camel.MainApp</mainClass>
<includePluginDependencies>false</includePluginDependencies>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>org.ZZZ.camel.MainApp</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Export-Package>
org.ZZZ.camel
</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
I ended up being able to package it to en executable jar, but then found that perhaps I should use Karaf as an OSGi container run as a windows service. I have Karaf installed with it's awaiting service container, but it looks like it's a pain to configure a Camel Java DSL route to an OSGi container, but what I did seem to find was people have used a Spring OSGi Camel package and overrode the configuration to execute a java "bean".
My question is: Can the entire Camel Context developed in Spring be pointed to the completed Java DSL developed package? Can I just add a shell around my already completed work? My route runs fine from maven using "mvn exec:java" or running java - jar <package> .
Now that I got this running, I'd rather not disassemble and re-wire, although it would be a good educational experience.
MyRouteBuilder.java :
import java.util.Base64;
import org.apache.camel.spi.DataFormat;
import ca.uhn.hl7v2.parser.Parser;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.camel.component.sql.SqlComponent;
public class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
basicDataSource.setUrl("jdbc:sqlserver://XXX:52739;databaseName=XXX;");
basicDataSource.setUsername("XXX");
basicDataSource.setPassword("XXX");
SqlComponent sqlComponent = new SqlComponent();
sqlComponent.setDataSource(basicDataSource);
getContext().addComponent("psoft-sql", sqlComponent);
from("mllp://ZZZ:8888")
.log("..Received HL7 message with control id ${header.CamelMllpMessageControlId}")
.convertBodyTo(String.class)
.unmarshal()
.hl7(false)
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
Message message = exchange.getIn().getBody(Message.class);
ca.uhn.hl7v2.util.Terser terser = new Terser(message);
String obx5 = terser.get("/.OBX-5-5");
String EDMId = terser.get("/.OBR-3") + ".pdf";
String voucher = terser.get("/.OBR-2");
byte[] decoded = Base64.getDecoder().decode(obx5);
exchange.getOut().setBody(decoded);
exchange.getOut().setHeader("voucher", voucher);
exchange.getOut().setHeader("CamelFileName", EDMId );
}
} )
.log("..Processed voucher ${header.voucher} to file ${header.CamelFileName}")
.to("file:target/messages/others")
.recipientList(simple("psoft-sql:INSERT INTO lawsonprod.PeopleSoftVCR (Voucher, Facility, image) VALUES ('12345', '1', '${header.CamelFileName}')") )
;
}
}
POM.xml (given there's a lot of extras in here not used due to attempts during development)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.ZZZ.camel</groupId>
<artifactId>EDMtoPSoft-java</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>EDM base64 HL7 documents to PeopleSoft</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencyManagement>
<dependencies>
<!-- Camel BOM -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-parent</artifactId>
<version>2.21.1</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
</dependency>
<!-- logging -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<scope>runtime</scope>
</dependency>
<!-- testing -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-mllp</artifactId>
<version>2.21.1</version>
</dependency>
<!-- Project stuff -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-hl7</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-netty4</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-base64</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-sql</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.0.0.jre10</version>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- Allows the example to be run via 'mvn compile exec:java' -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<configuration>
<mainClass>org.ZZZ.camel.MainApp</mainClass>
<includePluginDependencies>false</includePluginDependencies>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>org.ZZZ.camel.MainApp</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Export-Package>
org.ZZZ.camel
</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>