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 2009/04/29 08:12:44 UTC

svn commit: r769673 - in /camel/trunk/components/camel-jpa/src: main/java/org/apache/camel/component/jpa/ test/resources/META-INF/

Author: davsclaus
Date: Wed Apr 29 06:12:42 2009
New Revision: 769673

URL: http://svn.apache.org/viewvc?rev=769673&view=rev
Log:
CAMEL-1552: Added options to set transaction maanger declarative for managed environments.

Modified:
    camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java
    camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java
    camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaProducer.java
    camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaTemplateTransactionStrategy.java
    camel/trunk/components/camel-jpa/src/test/resources/META-INF/persistence.xml

Modified: camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java?rev=769673&r1=769672&r2=769673&view=diff
==============================================================================
--- camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java (original)
+++ camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java Wed Apr 29 06:12:42 2009
@@ -19,10 +19,9 @@
 import java.util.Map;
 import javax.persistence.EntityManagerFactory;
 
-import org.apache.camel.CamelContext;
-import org.apache.camel.Component;
 import org.apache.camel.Endpoint;
 import org.apache.camel.impl.DefaultComponent;
+import org.springframework.transaction.PlatformTransactionManager;
 
 /**
  * A JPA Component
@@ -31,10 +30,7 @@
  */
 public class JpaComponent extends DefaultComponent {
     private EntityManagerFactory entityManagerFactory;
-
-    public Component resolveComponent(CamelContext container, String uri) throws Exception {
-        return null;
-    }
+    private PlatformTransactionManager transactionManager;
 
     // Properties
     //-------------------------------------------------------------------------
@@ -46,6 +42,14 @@
         this.entityManagerFactory = entityManagerFactory;
     }
 
+    public PlatformTransactionManager getTransactionManager() {
+        return transactionManager;
+    }
+
+    public void setTransactionManager(PlatformTransactionManager transactionManager) {
+        this.transactionManager = transactionManager;
+    }
+
     // Implementation methods
     //-------------------------------------------------------------------------
 

Modified: camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java?rev=769673&r1=769672&r2=769673&view=diff
==============================================================================
--- camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java (original)
+++ camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java Wed Apr 29 06:12:42 2009
@@ -34,12 +34,15 @@
 import org.apache.camel.util.IntrospectionSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.springframework.orm.jpa.JpaTemplate;
+import org.springframework.orm.jpa.JpaTransactionManager;
+import org.springframework.transaction.PlatformTransactionManager;
 
 /**
  * @version $Revision$
  */
 public class JpaEndpoint extends ScheduledPollEndpoint {
     private EntityManagerFactory entityManagerFactory;
+    private PlatformTransactionManager transactionManager;
     private String persistenceUnit = "camel";
     private JpaTemplate template;
     private Expression producerExpression;
@@ -53,9 +56,14 @@
     public JpaEndpoint() {
     }
 
+    public JpaEndpoint(String endpointUri) {
+        super(endpointUri);
+    }
+
     public JpaEndpoint(String uri, JpaComponent component) {
         super(uri, component);
         entityManagerFactory = component.getEntityManagerFactory();
+        transactionManager = component.getTransactionManager();
     }
 
     public JpaEndpoint(String endpointUri, EntityManagerFactory entityManagerFactory) {
@@ -63,8 +71,10 @@
         this.entityManagerFactory = entityManagerFactory;
     }
 
-    public JpaEndpoint(String endpointUri) {
+    public JpaEndpoint(String endpointUri, EntityManagerFactory entityManagerFactory, PlatformTransactionManager transactionManager) {
         super(endpointUri);
+        this.entityManagerFactory = entityManagerFactory;
+        this.transactionManager = transactionManager;
     }
 
     public Producer createProducer() throws Exception {
@@ -149,6 +159,17 @@
         this.entityManagerFactory = entityManagerFactory;
     }
 
+    public PlatformTransactionManager getTransactionManager() {
+        if (transactionManager == null) {
+            transactionManager = createTransactionManager();
+        }
+        return transactionManager;
+    }
+
+    public void setTransactionManager(PlatformTransactionManager transactionManager) {
+        this.transactionManager = transactionManager;
+    }
+
     public Map getEntityManagerProperties() {
         if (entityManagerProperties == null) {
             entityManagerProperties = System.getProperties();
@@ -194,6 +215,7 @@
 
     // Implementation methods
     // -------------------------------------------------------------------------
+
     protected void validate() {
         ObjectHelper.notNull(getEntityManagerFactory(), "entityManagerFactory");
     }
@@ -206,13 +228,18 @@
         return Persistence.createEntityManagerFactory(persistenceUnit, getEntityManagerProperties());
     }
 
+    protected PlatformTransactionManager createTransactionManager() {
+        JpaTransactionManager tm = new JpaTransactionManager(getEntityManagerFactory());
+        tm.afterPropertiesSet();
+        return tm;
+    }
+
     protected EntityManager createEntityManager() {
         return getEntityManagerFactory().createEntityManager();
     }
 
     protected TransactionStrategy createTransactionStrategy() {
-        EntityManagerFactory emf = getEntityManagerFactory();
-        return JpaTemplateTransactionStrategy.newInstance(emf, getTemplate());
+        return JpaTemplateTransactionStrategy.newInstance(getTransactionManager(), getTemplate());
     }
 
     protected Expression createProducerExpression() {

Modified: camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaProducer.java?rev=769673&r1=769672&r2=769673&view=diff
==============================================================================
--- camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaProducer.java (original)
+++ camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaProducer.java Wed Apr 29 06:12:42 2009
@@ -50,7 +50,7 @@
                     Iterator iter = ObjectHelper.createIterator(values);
                     while (iter.hasNext()) {
                         Object value = iter.next();
-                        entityManager.persist(value);
+                        entityManager.merge(value);
                     }
                     if (endpoint.isFlushOnSend()) {
                         entityManager.flush();

Modified: camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaTemplateTransactionStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaTemplateTransactionStrategy.java?rev=769673&r1=769672&r2=769673&view=diff
==============================================================================
--- camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaTemplateTransactionStrategy.java (original)
+++ camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaTemplateTransactionStrategy.java Wed Apr 29 06:12:42 2009
@@ -25,6 +25,7 @@
 import org.springframework.orm.jpa.JpaCallback;
 import org.springframework.orm.jpa.JpaTemplate;
 import org.springframework.orm.jpa.JpaTransactionManager;
+import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.support.TransactionCallback;
 import org.springframework.transaction.support.TransactionTemplate;
@@ -51,6 +52,9 @@
         return newInstance(emf, template);
     }
 
+    /**
+     * Creates a new implementation from the given JPA factory and JPA template
+     */
     public static JpaTemplateTransactionStrategy newInstance(EntityManagerFactory emf, JpaTemplate template) {
         JpaTransactionManager transactionManager = new JpaTransactionManager(emf);
         transactionManager.afterPropertiesSet();
@@ -61,6 +65,16 @@
         return new JpaTemplateTransactionStrategy(template, tranasctionTemplate);
     }
 
+    /**
+     * Creates a new implementation from the given Transaction Manager and JPA template
+     */
+    public static JpaTemplateTransactionStrategy newInstance(PlatformTransactionManager transactionManager, JpaTemplate template) {
+        TransactionTemplate tranasctionTemplate = new TransactionTemplate(transactionManager);
+        tranasctionTemplate.afterPropertiesSet();
+
+        return new JpaTemplateTransactionStrategy(template, tranasctionTemplate);
+    }
+
     public Object execute(final JpaCallback callback) {
         return transactionTemplate.execute(new TransactionCallback() {
             public Object doInTransaction(TransactionStatus status) {

Modified: camel/trunk/components/camel-jpa/src/test/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jpa/src/test/resources/META-INF/persistence.xml?rev=769673&r1=769672&r2=769673&view=diff
==============================================================================
--- camel/trunk/components/camel-jpa/src/test/resources/META-INF/persistence.xml (original)
+++ camel/trunk/components/camel-jpa/src/test/resources/META-INF/persistence.xml Wed Apr 29 06:12:42 2009
@@ -16,9 +16,10 @@
 -->
 <persistence xmlns="http://java.sun.com/xml/ns/persistence"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             version="1.0">
+             version="1.0"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
 
-  <persistence-unit name="camel" transaction-type="RESOURCE_LOCAL">
+    <persistence-unit name="camel" transaction-type="RESOURCE_LOCAL">
     <!--
         The default provider can be OpenJPA, or some other product.
         This element is optional if OpenJPA is the only JPA provider
@@ -35,11 +36,6 @@
     <properties>
       <property name="openjpa.ConnectionURL" value="jdbc:derby:target/derby;create=true"/>
       <property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver"/>
-      <!--
-            <property name="openjpa.ConnectionUserName" value="sa"/>
-            <property name="openjpa.ConnectionPassword" value=""/>
-      -->
-
       <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
       <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO, SQL=TRACE"/>
     </properties>