Updated Branches: refs/heads/master 708c4cd87 -> f93b1fa59
CAMEL-5932 share an EntityManager in the entire endpoint and corrected a few test failures Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a27d5e9b Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a27d5e9b Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a27d5e9b Branch: refs/heads/master Commit: a27d5e9bccd1acb95873af9fa815e05a790d3c86 Parents: e696c60 Author: Brett Meyer <br...@3riverdev.com> Authored: Thu Aug 8 15:34:56 2013 -0400 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Aug 21 15:06:32 2013 +0200 ---------------------------------------------------------------------- .../apache/camel/component/jpa/JpaConsumer.java | 10 +---- .../apache/camel/component/jpa/JpaEndpoint.java | 14 ++++++- .../apache/camel/component/jpa/JpaProducer.java | 8 +--- .../component/jpa/AbstractJpaMethodTest.java | 3 +- .../org/apache/camel/component/jpa/JpaTest.java | 3 +- .../component/jpa/JpaWithNamedQueryTest.java | 3 +- .../interceptor/JpaTraceEventMessageTest.java | 41 +++++++++++--------- 7 files changed, 39 insertions(+), 43 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/a27d5e9b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaConsumer.java b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaConsumer.java index 10cdd2d..a4a73e4 100644 --- a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaConsumer.java +++ b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaConsumer.java @@ -69,7 +69,7 @@ public class JpaConsumer extends ScheduledBatchPollingConsumer { public JpaConsumer(JpaEndpoint endpoint, Processor processor) { super(endpoint, processor); this.endpoint = endpoint; - this.entityManager = endpoint.createEntityManager(); + this.entityManager = endpoint.getEntityManager(); this.transactionTemplate = endpoint.createTransactionTemplate(); } @@ -383,12 +383,4 @@ public class JpaConsumer extends ScheduledBatchPollingConsumer { exchange.getIn().setHeader(JpaConstants.ENTITYMANAGER, entityManager); return exchange; } - - @Override - protected void doStop() throws Exception { - super.doStop(); - // TODO: This should probably happen, but hitting an open transaction or flush in progress. - // Is there a thread holding onto it? -// entityManager.close(); - } } http://git-wip-us.apache.org/repos/asf/camel/blob/a27d5e9b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java index cee83f2..e99c405 100644 --- a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java +++ b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java @@ -43,6 +43,7 @@ public class JpaEndpoint extends ScheduledPollEndpoint { private EntityManagerFactory entityManagerFactory; private PlatformTransactionManager transactionManager; + private EntityManager entityManager; private String persistenceUnit = "camel"; private Expression producerExpression; private int maximumResults = -1; @@ -262,8 +263,11 @@ public class JpaEndpoint extends ScheduledPollEndpoint { return tm; } - protected EntityManager createEntityManager() { - return getEntityManagerFactory().createEntityManager(); + protected EntityManager getEntityManager() { + if (entityManager == null) { + entityManager = getEntityManagerFactory().createEntityManager(); + } + return entityManager; } protected TransactionTemplate createTransactionTemplate() { @@ -297,4 +301,10 @@ public class JpaEndpoint extends ScheduledPollEndpoint { } }; } + + @Override + protected void doStop() throws Exception { + super.doStop(); + entityManager.close(); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/a27d5e9b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaProducer.java b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaProducer.java index c06a1b8..c83f0a6 100644 --- a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaProducer.java +++ b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaProducer.java @@ -42,7 +42,7 @@ public class JpaProducer extends DefaultProducer { super(endpoint); this.endpoint = endpoint; this.expression = expression; - this.entityManager = endpoint.createEntityManager(); + this.entityManager = endpoint.getEntityManager(); this.transactionTemplate = endpoint.createTransactionTemplate(); } @@ -107,10 +107,4 @@ public class JpaProducer extends DefaultProducer { } exchange.getIn().removeHeader(JpaConstants.ENTITYMANAGER); } - - @Override - protected void doStop() throws Exception { - super.doStop(); - entityManager.close(); - } } http://git-wip-us.apache.org/repos/asf/camel/blob/a27d5e9b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/AbstractJpaMethodTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/AbstractJpaMethodTest.java b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/AbstractJpaMethodTest.java index aaa350b..eaa7659 100644 --- a/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/AbstractJpaMethodTest.java +++ b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/AbstractJpaMethodTest.java @@ -60,7 +60,6 @@ public abstract class AbstractJpaMethodTest extends Assert { @After public void tearDown() throws Exception { stopServices(consumer, template, camelContext); - entityManager.close(); } @Test @@ -165,7 +164,7 @@ public abstract class AbstractJpaMethodTest extends Assert { endpoint = camelContext.getEndpoint(endpointUri, JpaEndpoint.class); transactionTemplate = endpoint.createTransactionTemplate(); - entityManager = endpoint.createEntityManager(); + entityManager = endpoint.getEntityManager(); transactionTemplate.execute(new TransactionCallback<Object>() { public Object doInTransaction(TransactionStatus status) { http://git-wip-us.apache.org/repos/asf/camel/blob/a27d5e9b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaTest.java b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaTest.java index b0a5615..4f50f6f 100644 --- a/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaTest.java +++ b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaTest.java @@ -117,7 +117,7 @@ public class JpaTest extends Assert { endpoint = (JpaEndpoint) value; transactionTemplate = endpoint.createTransactionTemplate(); - entityManager = endpoint.createEntityManager(); + entityManager = endpoint.getEntityManager(); } protected String getEndpointUri() { @@ -127,6 +127,5 @@ public class JpaTest extends Assert { @After public void tearDown() throws Exception { stopServices(consumer, template, camelContext); - entityManager.close(); } } http://git-wip-us.apache.org/repos/asf/camel/blob/a27d5e9b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNamedQueryTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNamedQueryTest.java b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNamedQueryTest.java index 561748e..947949e 100644 --- a/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNamedQueryTest.java +++ b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNamedQueryTest.java @@ -166,7 +166,7 @@ public class JpaWithNamedQueryTest extends Assert { endpoint = (JpaEndpoint)value; transactionTemplate = endpoint.createTransactionTemplate(); - entityManager = endpoint.createEntityManager(); + entityManager = endpoint.getEntityManager(); } protected String getEndpointUri() { @@ -176,6 +176,5 @@ public class JpaWithNamedQueryTest extends Assert { @After public void tearDown() throws Exception { ServiceHelper.stopServices(consumer, template, camelContext); - entityManager.close(); } } http://git-wip-us.apache.org/repos/asf/camel/blob/a27d5e9b/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java b/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java index ec8b46a..13bc233 100644 --- a/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java +++ b/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java @@ -28,11 +28,11 @@ import org.apache.camel.processor.interceptor.jpa.JpaTraceEventMessage; import org.apache.camel.spring.SpringCamelContext; import org.apache.camel.spring.SpringRouteBuilder; import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.After; +import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.orm.jpa.JpaTransactionManager; -import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; @@ -44,7 +44,23 @@ public class JpaTraceEventMessageTest extends CamelTestSupport { protected static final String SELECT_ALL_STRING = "select x from " + JpaTraceEventMessage.class.getName() + " x"; protected ApplicationContext applicationContext; - protected EntityManagerFactory entityManagerFactory; + protected TransactionTemplate transactionTemplate; + protected EntityManager entityManager; + + @Before + public void setUp() throws Exception { + super.setUp(); + EntityManagerFactory entityManagerFactory = applicationContext.getBean("entityManagerFactory", EntityManagerFactory.class); + transactionTemplate = applicationContext.getBean("transactionTemplate", TransactionTemplate.class); + entityManager = entityManagerFactory.createEntityManager(); + cleanupRepository(); + } + + @After + public void tearDown() throws Exception { + super.tearDown(); + entityManager.close(); + } @Test public void testSendTraceMessage() throws Exception { @@ -60,7 +76,6 @@ public class JpaTraceEventMessageTest extends CamelTestSupport { @Override protected CamelContext createCamelContext() throws Exception { applicationContext = new ClassPathXmlApplicationContext("org/apache/camel/processor/interceptor/springJpaTraveEvent.xml"); - cleanupRepository(); return SpringCamelContext.springCamelContext(applicationContext); } @@ -79,10 +94,7 @@ public class JpaTraceEventMessageTest extends CamelTestSupport { } private void assertEntityInDB() throws Exception { - entityManagerFactory = applicationContext.getBean("entityManagerFactory", EntityManagerFactory.class); - EntityManager entityManager = entityManagerFactory.createEntityManager(); - - List<?> list = entityManager.createQuery(SELECT_ALL_STRING).getResultList(); + List<?> list = entityManager.createQuery(SELECT_ALL_STRING).getResultList(); assertEquals(1, list.size()); JpaTraceEventMessage db = (JpaTraceEventMessage) list.get(0); @@ -90,19 +102,12 @@ public class JpaTraceEventMessageTest extends CamelTestSupport { assertEquals("direct://start", db.getFromEndpointUri()); assertEquals("mock://result", db.getToNode()); assertEquals("foo", db.getRouteId()); - - entityManager.close(); } protected void cleanupRepository() { - entityManagerFactory = applicationContext.getBean("entityManagerFactory", EntityManagerFactory.class); - final EntityManager entityManager = entityManagerFactory.createEntityManager(); - TransactionTemplate transactionTemplate = new TransactionTemplate(); - transactionTemplate.setTransactionManager(new JpaTransactionManager(entityManagerFactory)); - transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); - - transactionTemplate.execute(new TransactionCallback<Object>() { + transactionTemplate.execute(new TransactionCallback<Object>() { public Object doInTransaction(TransactionStatus arg0) { + entityManager.joinTransaction(); List<?> list = entityManager.createQuery(SELECT_ALL_STRING).getResultList(); for (Object item : list) { entityManager.remove(item); @@ -111,7 +116,5 @@ public class JpaTraceEventMessageTest extends CamelTestSupport { return Boolean.TRUE; } }); - - entityManager.close(); } } \ No newline at end of file