You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/04/16 17:06:46 UTC
[1/4] git commit: CAMEL-7372 Allow users to pass in their own
EntityManager through the exchange
Repository: camel
Updated Branches:
refs/heads/camel-2.12.x 5618c4802 -> e9f3ca384
refs/heads/camel-2.13.x cd2c88877 -> baadfd362
CAMEL-7372 Allow users to pass in their own EntityManager through the exchange
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/40069ffe
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/40069ffe
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/40069ffe
Branch: refs/heads/camel-2.13.x
Commit: 40069ffeff4c7d2f947ef9a96b23e20199205eed
Parents: cd2c888
Author: Tomohisa Igarashi <tm...@gmail.com>
Authored: Wed Apr 16 22:04:02 2014 +0900
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Apr 16 08:07:39 2014 -0700
----------------------------------------------------------------------
.../apache/camel/component/jpa/JpaEndpoint.java | 9 ++
.../apache/camel/component/jpa/JpaProducer.java | 26 ++++--
.../JpaProducerPassingEntityManagerTest.java | 86 ++++++++++++++++++++
3 files changed, 114 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/40069ffe/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 4d8eb00..5e3e6c9 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
@@ -54,6 +54,7 @@ public class JpaEndpoint extends ScheduledPollEndpoint {
private int maxMessagesPerPoll;
private boolean usePersist;
private boolean joinTransaction = true;
+ private boolean usePassedInEntityManager = false;
public JpaEndpoint() {
}
@@ -250,6 +251,14 @@ public class JpaEndpoint extends ScheduledPollEndpoint {
this.joinTransaction = joinTransaction;
}
+ public boolean isUsePassedInEntityManager() {
+ return this.usePassedInEntityManager;
+ }
+
+ public void setUsePassedInEntityManager(boolean usePassedIn) {
+ this.usePassedInEntityManager = usePassedIn;
+ }
+
// Implementation methods
// -------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/40069ffe/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 8afb038..a633e89 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
@@ -51,14 +51,15 @@ public class JpaProducer extends DefaultProducer {
}
public void process(final Exchange exchange) {
- exchange.getIn().setHeader(JpaConstants.ENTITYMANAGER, entityManager);
+ final EntityManager targetEntityManager = getTargetEntityManager(exchange);
+ exchange.getIn().setHeader(JpaConstants.ENTITYMANAGER, targetEntityManager);
final Object values = expression.evaluate(exchange, Object.class);
if (values != null) {
transactionTemplate.execute(new TransactionCallback<Object>() {
public Object doInTransaction(TransactionStatus status) {
if (getEndpoint().isJoinTransaction()) {
- entityManager.joinTransaction();
+ targetEntityManager.joinTransaction();
}
if (values.getClass().isArray()) {
Object[] array = (Object[])values;
@@ -80,9 +81,9 @@ public class JpaProducer extends DefaultProducer {
if (getEndpoint().isFlushOnSend()) {
// there may be concurrency so need to join tx before flush
if (getEndpoint().isJoinTransaction()) {
- entityManager.joinTransaction();
+ targetEntityManager.joinTransaction();
}
- entityManager.flush();
+ targetEntityManager.flush();
}
return null;
@@ -94,18 +95,29 @@ public class JpaProducer extends DefaultProducer {
*/
private Object save(final Object entity) {
// there may be concurrency so need to join tx before persist/merge
- entityManager.joinTransaction();
+ targetEntityManager.joinTransaction();
if (getEndpoint().isUsePersist()) {
- entityManager.persist(entity);
+ targetEntityManager.persist(entity);
return entity;
} else {
- return entityManager.merge(entity);
+ return targetEntityManager.merge(entity);
}
}
});
}
}
+ private EntityManager getTargetEntityManager(Exchange exchange) {
+ EntityManager em = this.entityManager;
+ if (getEndpoint().isUsePassedInEntityManager()) {
+ EntityManager passedIn = exchange.getIn().getHeader(JpaConstants.ENTITYMANAGER, EntityManager.class);
+ if (passedIn != null) {
+ em = passedIn;
+ }
+ }
+ return em;
+ }
+
@Override
protected void doShutdown() throws Exception {
super.doShutdown();
http://git-wip-us.apache.org/repos/asf/camel/blob/40069ffe/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerPassingEntityManagerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerPassingEntityManagerTest.java b/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerPassingEntityManagerTest.java
new file mode 100644
index 0000000..1f04de2
--- /dev/null
+++ b/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerPassingEntityManagerTest.java
@@ -0,0 +1,86 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor.jpa;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jpa.JpaConstants;
+import org.apache.camel.component.jpa.JpaEndpoint;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.examples.SendEmail;
+import org.apache.camel.spring.SpringRouteBuilder;
+import org.junit.Test;
+
+/**
+ * @version
+ */
+public class JpaProducerPassingEntityManagerTest extends AbstractJpaTest {
+ protected static final String SELECT_ALL_STRING = "select x from " + SendEmail.class.getName() + " x";
+
+ @Test
+ public void testRouteJpa() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ context.startRoute("foo");
+ JpaEndpoint jpa = context.getEndpoint("jpa://" + SendEmail.class.getName(), JpaEndpoint.class);
+ EntityManagerFactory emf = jpa.getEntityManagerFactory();
+
+ // The entity instance is different if it is retrieved from different EntityManager instance
+ EntityManager entityManager = emf.createEntityManager();
+ template.sendBody("direct:start", new SendEmail("foo@beer.org"));
+ Exchange exchange = mock.getReceivedExchanges().get(0);
+ SendEmail persistedEntity = exchange.getIn().getBody(SendEmail.class);
+ SendEmail emfindEntity = entityManager.find(SendEmail.class, persistedEntity.getId());
+ assertNotSame(emfindEntity, persistedEntity);
+ entityManager.close();
+ mock.reset();
+
+ // The same EntityManager returns same entity instance from its 1st level cache
+ entityManager = emf.createEntityManager();
+ template.sendBodyAndHeader("direct:start", new SendEmail("bar@beer.org"), JpaConstants.ENTITYMANAGER, entityManager);
+ exchange = mock.getReceivedExchanges().get(0);
+ persistedEntity = exchange.getIn().getBody(SendEmail.class);
+ emfindEntity = entityManager.find(SendEmail.class, persistedEntity.getId());
+ assertSame(emfindEntity, persistedEntity);
+ entityManager.close();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new SpringRouteBuilder() {
+ public void configure() {
+ from("direct:start")
+ .id("foo")
+ .to("jpa://" + SendEmail.class.getName() + "?usePassedInEntityManager=true")
+ .to("mock:result");
+ }
+ };
+ }
+
+ @Override
+ protected String routeXml() {
+ return "org/apache/camel/processor/jpa/springJpaRouteTest.xml";
+ }
+
+ @Override
+ protected String selectAllString() {
+ return SELECT_ALL_STRING;
+ }
+
+}
[3/4] git commit: CAMEL-7372 Allow users to pass in their own
EntityManager through the exchange
Posted by da...@apache.org.
CAMEL-7372 Allow users to pass in their own EntityManager through the exchange
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c11b61f3
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c11b61f3
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c11b61f3
Branch: refs/heads/camel-2.12.x
Commit: c11b61f3ff484c2d53c1bb50d138745f0236eff9
Parents: 5618c48
Author: Tomohisa Igarashi <tm...@gmail.com>
Authored: Wed Apr 16 22:04:02 2014 +0900
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Apr 16 08:07:54 2014 -0700
----------------------------------------------------------------------
.../apache/camel/component/jpa/JpaEndpoint.java | 9 ++
.../apache/camel/component/jpa/JpaProducer.java | 26 ++++--
.../JpaProducerPassingEntityManagerTest.java | 86 ++++++++++++++++++++
3 files changed, 114 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/c11b61f3/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 4d8eb00..5e3e6c9 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
@@ -54,6 +54,7 @@ public class JpaEndpoint extends ScheduledPollEndpoint {
private int maxMessagesPerPoll;
private boolean usePersist;
private boolean joinTransaction = true;
+ private boolean usePassedInEntityManager = false;
public JpaEndpoint() {
}
@@ -250,6 +251,14 @@ public class JpaEndpoint extends ScheduledPollEndpoint {
this.joinTransaction = joinTransaction;
}
+ public boolean isUsePassedInEntityManager() {
+ return this.usePassedInEntityManager;
+ }
+
+ public void setUsePassedInEntityManager(boolean usePassedIn) {
+ this.usePassedInEntityManager = usePassedIn;
+ }
+
// Implementation methods
// -------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/c11b61f3/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 8afb038..a633e89 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
@@ -51,14 +51,15 @@ public class JpaProducer extends DefaultProducer {
}
public void process(final Exchange exchange) {
- exchange.getIn().setHeader(JpaConstants.ENTITYMANAGER, entityManager);
+ final EntityManager targetEntityManager = getTargetEntityManager(exchange);
+ exchange.getIn().setHeader(JpaConstants.ENTITYMANAGER, targetEntityManager);
final Object values = expression.evaluate(exchange, Object.class);
if (values != null) {
transactionTemplate.execute(new TransactionCallback<Object>() {
public Object doInTransaction(TransactionStatus status) {
if (getEndpoint().isJoinTransaction()) {
- entityManager.joinTransaction();
+ targetEntityManager.joinTransaction();
}
if (values.getClass().isArray()) {
Object[] array = (Object[])values;
@@ -80,9 +81,9 @@ public class JpaProducer extends DefaultProducer {
if (getEndpoint().isFlushOnSend()) {
// there may be concurrency so need to join tx before flush
if (getEndpoint().isJoinTransaction()) {
- entityManager.joinTransaction();
+ targetEntityManager.joinTransaction();
}
- entityManager.flush();
+ targetEntityManager.flush();
}
return null;
@@ -94,18 +95,29 @@ public class JpaProducer extends DefaultProducer {
*/
private Object save(final Object entity) {
// there may be concurrency so need to join tx before persist/merge
- entityManager.joinTransaction();
+ targetEntityManager.joinTransaction();
if (getEndpoint().isUsePersist()) {
- entityManager.persist(entity);
+ targetEntityManager.persist(entity);
return entity;
} else {
- return entityManager.merge(entity);
+ return targetEntityManager.merge(entity);
}
}
});
}
}
+ private EntityManager getTargetEntityManager(Exchange exchange) {
+ EntityManager em = this.entityManager;
+ if (getEndpoint().isUsePassedInEntityManager()) {
+ EntityManager passedIn = exchange.getIn().getHeader(JpaConstants.ENTITYMANAGER, EntityManager.class);
+ if (passedIn != null) {
+ em = passedIn;
+ }
+ }
+ return em;
+ }
+
@Override
protected void doShutdown() throws Exception {
super.doShutdown();
http://git-wip-us.apache.org/repos/asf/camel/blob/c11b61f3/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerPassingEntityManagerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerPassingEntityManagerTest.java b/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerPassingEntityManagerTest.java
new file mode 100644
index 0000000..1f04de2
--- /dev/null
+++ b/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerPassingEntityManagerTest.java
@@ -0,0 +1,86 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor.jpa;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jpa.JpaConstants;
+import org.apache.camel.component.jpa.JpaEndpoint;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.examples.SendEmail;
+import org.apache.camel.spring.SpringRouteBuilder;
+import org.junit.Test;
+
+/**
+ * @version
+ */
+public class JpaProducerPassingEntityManagerTest extends AbstractJpaTest {
+ protected static final String SELECT_ALL_STRING = "select x from " + SendEmail.class.getName() + " x";
+
+ @Test
+ public void testRouteJpa() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ context.startRoute("foo");
+ JpaEndpoint jpa = context.getEndpoint("jpa://" + SendEmail.class.getName(), JpaEndpoint.class);
+ EntityManagerFactory emf = jpa.getEntityManagerFactory();
+
+ // The entity instance is different if it is retrieved from different EntityManager instance
+ EntityManager entityManager = emf.createEntityManager();
+ template.sendBody("direct:start", new SendEmail("foo@beer.org"));
+ Exchange exchange = mock.getReceivedExchanges().get(0);
+ SendEmail persistedEntity = exchange.getIn().getBody(SendEmail.class);
+ SendEmail emfindEntity = entityManager.find(SendEmail.class, persistedEntity.getId());
+ assertNotSame(emfindEntity, persistedEntity);
+ entityManager.close();
+ mock.reset();
+
+ // The same EntityManager returns same entity instance from its 1st level cache
+ entityManager = emf.createEntityManager();
+ template.sendBodyAndHeader("direct:start", new SendEmail("bar@beer.org"), JpaConstants.ENTITYMANAGER, entityManager);
+ exchange = mock.getReceivedExchanges().get(0);
+ persistedEntity = exchange.getIn().getBody(SendEmail.class);
+ emfindEntity = entityManager.find(SendEmail.class, persistedEntity.getId());
+ assertSame(emfindEntity, persistedEntity);
+ entityManager.close();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new SpringRouteBuilder() {
+ public void configure() {
+ from("direct:start")
+ .id("foo")
+ .to("jpa://" + SendEmail.class.getName() + "?usePassedInEntityManager=true")
+ .to("mock:result");
+ }
+ };
+ }
+
+ @Override
+ protected String routeXml() {
+ return "org/apache/camel/processor/jpa/springJpaRouteTest.xml";
+ }
+
+ @Override
+ protected String selectAllString() {
+ return SELECT_ALL_STRING;
+ }
+
+}
[2/4] git commit: CAMEL-7372: Fixed CS
Posted by da...@apache.org.
CAMEL-7372: Fixed CS
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/baadfd36
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/baadfd36
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/baadfd36
Branch: refs/heads/camel-2.13.x
Commit: baadfd362a6674eb5d65c8c247692d91a3ea91c4
Parents: 40069ff
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Apr 16 08:07:18 2014 -0700
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Apr 16 08:07:44 2014 -0700
----------------------------------------------------------------------
.../src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/baadfd36/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 5e3e6c9..2b3e17c 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
@@ -54,7 +54,7 @@ public class JpaEndpoint extends ScheduledPollEndpoint {
private int maxMessagesPerPoll;
private boolean usePersist;
private boolean joinTransaction = true;
- private boolean usePassedInEntityManager = false;
+ private boolean usePassedInEntityManager;
public JpaEndpoint() {
}
[4/4] git commit: CAMEL-7372: Fixed CS
Posted by da...@apache.org.
CAMEL-7372: Fixed CS
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e9f3ca38
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e9f3ca38
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e9f3ca38
Branch: refs/heads/camel-2.12.x
Commit: e9f3ca38415100ca1984efa3bdf3e8c83f997890
Parents: c11b61f
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Apr 16 08:07:18 2014 -0700
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Apr 16 08:08:02 2014 -0700
----------------------------------------------------------------------
.../src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/e9f3ca38/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 5e3e6c9..2b3e17c 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
@@ -54,7 +54,7 @@ public class JpaEndpoint extends ScheduledPollEndpoint {
private int maxMessagesPerPoll;
private boolean usePersist;
private boolean joinTransaction = true;
- private boolean usePassedInEntityManager = false;
+ private boolean usePassedInEntityManager;
public JpaEndpoint() {
}