From 6da1690e0b35f06f094e10174dcdc248f0b10a27 Mon Sep 17 00:00:00 2001 From: Thomas Diesler Date: Tue, 11 Nov 2014 13:48:52 +0100 Subject: [PATCH] [Resolve #62] Add support for wildfly sysprops in camel routes --- .gitignore | 1 - .../examples/cxf/CxfIntegrationTest.java | 9 ++- examples/camel-jpa/pom.xml | 16 ++-- .../examples/jpa/CustomerRepository.java | 7 +- .../camel/examples/jpa/JpaRouteBuilder.java | 20 ++--- .../wildfly/camel/examples/jpa/Resources.java | 1 - .../camel/examples/jpa/SimpleServlet.java | 38 +++++++--- .../main/resources/META-INF/persistence.xml | 4 + .../webapp/WEB-INF}/customer.xml | 0 .../src/main/webapp/WEB-INF/customers.jsp | 45 +----------- .../examples/jpa/JPAIntegrationTest.java | 73 +++---------------- .../camel-jpa/src/test/resources/jboss-ds.xml | 13 ---- .../src/test/resources/test-persistence.xml | 14 ---- .../wildfly/camel/examples/HttpRequest.java | 8 +- 14 files changed, 73 insertions(+), 176 deletions(-) rename examples/camel-jpa/src/{test/resources => main/webapp/WEB-INF}/customer.xml (100%) delete mode 100644 examples/camel-jpa/src/test/resources/jboss-ds.xml delete mode 100644 examples/camel-jpa/src/test/resources/test-persistence.xml diff --git a/.gitignore b/.gitignore index d8e144a7aa..d5607908d3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,3 @@ .settings target *.iml -input diff --git a/examples/camel-cxf-soap/src/test/java/org/wildfly/camel/examples/cxf/CxfIntegrationTest.java b/examples/camel-cxf-soap/src/test/java/org/wildfly/camel/examples/cxf/CxfIntegrationTest.java index f6afa46c41..5b3dd2868f 100644 --- a/examples/camel-cxf-soap/src/test/java/org/wildfly/camel/examples/cxf/CxfIntegrationTest.java +++ b/examples/camel-cxf-soap/src/test/java/org/wildfly/camel/examples/cxf/CxfIntegrationTest.java @@ -33,6 +33,7 @@ import org.slf4j.LoggerFactory; import org.wildfly.camel.examples.HttpRequest; +import java.io.InputStream; import java.util.concurrent.TimeUnit; @@ -55,8 +56,8 @@ public static Archive createDeployment() { @Test public void testSayHelloCxfSoapRoute() throws Exception { // Send HTTP request to greeting service sayHello webservice method - String result = HttpRequest.get(ENDPOINT_ADDRESS, "/org/wildfly/camel/examples/cxf/hello-request.xml", - 10, TimeUnit.SECONDS); + InputStream input = HttpRequest.class.getResourceAsStream("/org/wildfly/camel/examples/cxf/hello-request.xml"); + String result = HttpRequest.get(ENDPOINT_ADDRESS, input, 10, TimeUnit.SECONDS); // Log SOAP response LOG.info("*******************************"); @@ -70,8 +71,8 @@ public void testSayHelloCxfSoapRoute() throws Exception { @Test public void testSayGoodbyeCxfSoapRoute() throws Exception { // Send HTTP request to greeting service sayGoodbye webservice method - String result = HttpRequest.get(ENDPOINT_ADDRESS, "/org/wildfly/camel/examples/cxf/goodbye-request.xml", - 10, TimeUnit.SECONDS); + InputStream input = HttpRequest.class.getResourceAsStream("/org/wildfly/camel/examples/cxf/goodbye-request.xml"); + String result = HttpRequest.get(ENDPOINT_ADDRESS, input, 10, TimeUnit.SECONDS); // Log SOAP response LOG.info("*******************************"); diff --git a/examples/camel-jpa/pom.xml b/examples/camel-jpa/pom.xml index bb80ed599f..33e06f41ac 100644 --- a/examples/camel-jpa/pom.xml +++ b/examples/camel-jpa/pom.xml @@ -80,6 +80,12 @@ + + org.wildfly.camel + example-camel-common + ${project.version} + test + org.jboss.arquillian.junit arquillian-junit-container @@ -95,16 +101,6 @@ junit test - - org.apache.camel - camel-test - test - - - org.slf4j - slf4j-api - test - diff --git a/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/CustomerRepository.java b/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/CustomerRepository.java index 202aa468df..54c8e92940 100644 --- a/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/CustomerRepository.java +++ b/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/CustomerRepository.java @@ -19,16 +19,18 @@ */ package org.wildfly.camel.examples.jpa; -import org.wildfly.camel.examples.jpa.model.Customer; +import java.util.List; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; -import java.util.List; + +import org.wildfly.camel.examples.jpa.model.Customer; public class CustomerRepository { + @Inject private EntityManager em; @@ -37,7 +39,6 @@ public class CustomerRepository { * * @return A list of customers */ - @SuppressWarnings("unchecked") public List findAllCustomers() { CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); diff --git a/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/JpaRouteBuilder.java b/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/JpaRouteBuilder.java index 5495da108d..8e91b221ba 100644 --- a/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/JpaRouteBuilder.java +++ b/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/JpaRouteBuilder.java @@ -19,30 +19,30 @@ */ package org.wildfly.camel.examples.jpa; +import javax.ejb.Startup; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; + import org.apache.camel.builder.RouteBuilder; import org.apache.camel.cdi.ContextName; import org.apache.camel.component.jpa.JpaEndpoint; import org.apache.camel.model.dataformat.JaxbDataFormat; -import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.transaction.jta.JtaTransactionManager; import org.wildfly.camel.examples.jpa.model.Customer; -import javax.ejb.Startup; -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.PersistenceContext; - @Startup @ApplicationScoped -@ContextName("cdi-context") +@ContextName("jpa-cdi-context") public class JpaRouteBuilder extends RouteBuilder { + @Inject private EntityManager em; @Override public void configure() throws Exception { + // Configure our JaxbDataFormat to point at our 'model' package JaxbDataFormat jaxbDataFormat = new JaxbDataFormat(); jaxbDataFormat.setContextPath(Customer.class.getPackage().getName()); @@ -68,7 +68,7 @@ public void configure() throws Exception { * unmarshall XML file content to a Customer entity and then use the JPA endpoint * to persist the it to the 'ExampleDS' datasource (see standalone.camel.xml for datasource config). */ - from("file://input/customers") + from("file://{{jboss.server.data.dir}}/customers") .unmarshal(jaxbDataFormat) .to(jpaEndpoint) .to("log:input?showAll=true"); diff --git a/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/Resources.java b/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/Resources.java index 00ce98b047..730e03bad9 100644 --- a/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/Resources.java +++ b/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/Resources.java @@ -24,7 +24,6 @@ import javax.persistence.PersistenceContext; public class Resources { - @SuppressWarnings("unused") @Produces @PersistenceContext private EntityManager em; diff --git a/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/SimpleServlet.java b/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/SimpleServlet.java index 4b3f1a99e0..9e4f93f67f 100644 --- a/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/SimpleServlet.java +++ b/examples/camel-jpa/src/main/java/org/wildfly/camel/examples/jpa/SimpleServlet.java @@ -19,32 +19,50 @@ */ package org.wildfly.camel.examples.jpa; +import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.List; import javax.inject.Inject; +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.camel.CamelContext; -import org.apache.camel.ProducerTemplate; -import org.apache.camel.cdi.ContextName; -import org.wildfly.camel.examples.jpa.CustomerRepository; import org.wildfly.camel.examples.jpa.model.Customer; @SuppressWarnings("serial") @WebServlet(name = "HttpServiceServlet", urlPatterns = { "/customers/*" }, loadOnStartup = 1) -public class SimpleServlet extends HttpServlet -{ - @Inject - private CustomerRepository customerRepository; +public class SimpleServlet extends HttpServlet { + + static Path CUSTOMERS_PATH = new File(System.getProperty("jboss.server.data.dir")).toPath().resolve("customers"); + + @Inject + private CustomerRepository customerRepository; + + @Override + public void init(ServletConfig config) throws ServletException { + super.init(config); + + // Copy WEB-INF/customer.xml to the data dir + ServletContext servletContext = config.getServletContext(); + try { + InputStream input = servletContext.getResourceAsStream("/WEB-INF/customer.xml"); + Path xmlPath = CUSTOMERS_PATH.resolve("customer.xml"); + Files.copy(input, xmlPath); + } catch (IOException ex) { + throw new ServletException(ex); + } + } @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * Simple servlet to retrieve all customers from the in memory database for * output and display on customers.jsp diff --git a/examples/camel-jpa/src/main/resources/META-INF/persistence.xml b/examples/camel-jpa/src/main/resources/META-INF/persistence.xml index 490fbe445f..b22caa9990 100644 --- a/examples/camel-jpa/src/main/resources/META-INF/persistence.xml +++ b/examples/camel-jpa/src/main/resources/META-INF/persistence.xml @@ -26,5 +26,9 @@ limitations under the License. java:jboss/datasources/ExampleDS org.wildfly.camel.examples.jpa.model.Customer + + + + diff --git a/examples/camel-jpa/src/test/resources/customer.xml b/examples/camel-jpa/src/main/webapp/WEB-INF/customer.xml similarity index 100% rename from examples/camel-jpa/src/test/resources/customer.xml rename to examples/camel-jpa/src/main/webapp/WEB-INF/customer.xml diff --git a/examples/camel-jpa/src/main/webapp/WEB-INF/customers.jsp b/examples/camel-jpa/src/main/webapp/WEB-INF/customers.jsp index c28ae9af5e..021f6a6fad 100644 --- a/examples/camel-jpa/src/main/webapp/WEB-INF/customers.jsp +++ b/examples/camel-jpa/src/main/webapp/WEB-INF/customers.jsp @@ -19,45 +19,6 @@ --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> - - - Wildfly Camel Examples :: JPA - - - - - - - - - - - - - - - - - -
IdFirst NameLast Name
${customer.id}${customer.firstName}${customer.lastName}
- - + + ${customer.firstName} ${customer.lastName} + diff --git a/examples/camel-jpa/src/test/java/org/wildfly/camel/examples/jpa/JPAIntegrationTest.java b/examples/camel-jpa/src/test/java/org/wildfly/camel/examples/jpa/JPAIntegrationTest.java index af0df4b6de..8e0ec28c97 100644 --- a/examples/camel-jpa/src/test/java/org/wildfly/camel/examples/jpa/JPAIntegrationTest.java +++ b/examples/camel-jpa/src/test/java/org/wildfly/camel/examples/jpa/JPAIntegrationTest.java @@ -19,79 +19,28 @@ */ package org.wildfly.camel.examples.jpa; -import org.apache.camel.Exchange; -import org.apache.camel.converter.jaxb.JaxbDataFormat; -import org.apache.camel.test.junit4.CamelTestSupport; -import org.jboss.arquillian.container.test.api.Deployment; +import java.net.MalformedURLException; +import java.util.concurrent.TimeUnit; + +import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.junit.Arquillian; -import org.jboss.shrinkwrap.api.Archive; -import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.asset.EmptyAsset; -import org.jboss.shrinkwrap.api.asset.StringAsset; -import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; -import org.wildfly.camel.examples.jpa.model.Customer; - -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; +import org.wildfly.camel.examples.HttpRequest; +@RunAsClient @RunWith(Arquillian.class) -public class JPAIntegrationTest extends CamelTestSupport { - - @Deployment - public static Archive createDeployment() { - StringAsset jaxbIndex = new StringAsset("Customer"); - - return ShrinkWrap.create(WebArchive.class, "test.war") - .addPackage(Customer.class.getPackage()) - .addPackage(CamelTestSupport.class.getPackage()) - .addPackage(JpaRouteBuilder.class.getPackage()) - .addPackage(JaxbDataFormat.class.getPackage()) - .addAsResource(jaxbIndex, "org/wildfly/camel/examples/jpa/model/jaxb.index") - .addAsResource("customer.xml", "org/wildfly/camel/examples/jpa/customer.xml") - .addAsResource("test-persistence.xml", "META-INF/persistence.xml") - .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); - } - - @Inject - EntityManager em; +public class JPAIntegrationTest { @Test public void testFileToJpaRoute() throws Exception { - // Send a test customer XML file to our file endpoint - template.sendBodyAndHeader("file://input/customers", readResourceFromClasspath("customer.xml"), - Exchange.FILE_NAME, "customer.xml"); - - // Wait for the file to be consumed - Thread.sleep(2000); - - // Query the in memory database customer table to verify that a record was saved - CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); - CriteriaQuery query = criteriaBuilder.createQuery(Long.class); - query.select(criteriaBuilder.count(query.from(Customer.class))); - - long recordCount = em.createQuery(query).getSingleResult(); - - Assert.assertEquals(1L, recordCount); + String res = HttpRequest.get(getEndpointAddress("/example-camel-jpa/customers"), 10, TimeUnit.SECONDS); + Assert.assertEquals("John Doe", res.trim()); } - private String readResourceFromClasspath(String resourcePath) throws IOException { - StringBuilder builder = new StringBuilder(); - - BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(resourcePath), "UTF-8")); - for (int c = br.read(); c != -1; c = br.read()) { - builder.append((char) c); - } - - return builder.toString(); + private String getEndpointAddress(String contextPath) throws MalformedURLException { + return "http://localhost:8080" + contextPath; } - } diff --git a/examples/camel-jpa/src/test/resources/jboss-ds.xml b/examples/camel-jpa/src/test/resources/jboss-ds.xml deleted file mode 100644 index 82d17b1f77..0000000000 --- a/examples/camel-jpa/src/test/resources/jboss-ds.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - jdbc:h2:mem:arquillian;DB_CLOSE_DELAY=-1 - h2 - - diff --git a/examples/camel-jpa/src/test/resources/test-persistence.xml b/examples/camel-jpa/src/test/resources/test-persistence.xml deleted file mode 100644 index 4e0326893d..0000000000 --- a/examples/camel-jpa/src/test/resources/test-persistence.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - java:jboss/datasources/ExampleDS - - - - - - diff --git a/examples/common/src/main/java/org/wildfly/camel/examples/HttpRequest.java b/examples/common/src/main/java/org/wildfly/camel/examples/HttpRequest.java index ab0a63f9c8..d509167c07 100644 --- a/examples/common/src/main/java/org/wildfly/camel/examples/HttpRequest.java +++ b/examples/common/src/main/java/org/wildfly/camel/examples/HttpRequest.java @@ -52,7 +52,7 @@ public String call() throws Exception { return execute(task, timeout, unit); } - public static String get(final String spec, final String requestTemplate, final long timeout, final TimeUnit unit) throws TimeoutException, IOException { + public static String get(final String spec, final InputStream inputStream, final long timeout, final TimeUnit unit) throws TimeoutException, IOException { final URL url = new URL(spec); Callable task = new Callable() { @Override @@ -60,11 +60,7 @@ public String call() throws Exception { final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); - - final InputStream inputStream = HttpRequest.class.getResourceAsStream(requestTemplate); - final OutputStream outputStream = conn.getOutputStream(); - - copy(inputStream, outputStream); + copy(inputStream, conn.getOutputStream()); return processResponse(conn); } };