You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ma...@apache.org on 2011/07/04 22:05:36 UTC

svn commit: r1142785 - in /aries/trunk/jpa: jpa-container-eclipselink-adapter/ jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/ jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/ad...

Author: mahrwald
Date: Mon Jul  4 20:05:35 2011
New Revision: 1142785

URL: http://svn.apache.org/viewvc?rev=1142785&view=rev
Log:
ARIES-691: Move Eclipse server code to adapter bundle

Added:
    aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/
    aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSServer.java
    aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSWrapper.java
Removed:
    aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/java/org/apache/aries/jpa/container/itest/OSGiTSServer.java
    aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/java/org/apache/aries/jpa/container/itest/OSGiTSWrapper.java
Modified:
    aries/trunk/jpa/jpa-container-eclipselink-adapter/pom.xml
    aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java
    aries/trunk/jpa/jpa-container-testbundle-eclipselink/pom.xml
    aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/resources/META-INF/persistence.xml

Modified: aries/trunk/jpa/jpa-container-eclipselink-adapter/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-eclipselink-adapter/pom.xml?rev=1142785&r1=1142784&r2=1142785&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container-eclipselink-adapter/pom.xml (original)
+++ aries/trunk/jpa/jpa-container-eclipselink-adapter/pom.xml Mon Jul  4 20:05:35 2011
@@ -34,12 +34,9 @@
   </scm>
 
   <properties>
-    <aries.osgi.private.pkg>
-      org.apache.aries.jpa.eclipselink.adapter
-        </aries.osgi.private.pkg>
-    <aries.osgi.activator>
-      org.apache.aries.jpa.eclipselink.adapter.Activator
-    </aries.osgi.activator>
+    <aries.osgi.private.pkg>org.apache.aries.jpa.eclipselink.adapter</aries.osgi.private.pkg>
+    <aries.osgi.export.pkg>org.apache.aries.jpa.eclipselink.adapter.platform</aries.osgi.export.pkg>
+    <aries.osgi.activator>org.apache.aries.jpa.eclipselink.adapter.Activator</aries.osgi.activator>
   </properties>
 
   <dependencies>
@@ -69,6 +66,12 @@
       <artifactId>org.eclipse.persistence.jpa</artifactId>
       <version>2.1.0</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.aries.transaction</groupId>
+      <artifactId>org.apache.aries.transaction.manager</artifactId>
+      <version>0.3.1-SNAPSHOT</version>
+      <scope>provided</scope>
+    </dependency>
   </dependencies>
 
 </project>

Modified: aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java?rev=1142785&r1=1142784&r2=1142785&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java (original)
+++ aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java Mon Jul  4 20:05:35 2011
@@ -19,17 +19,29 @@
 package org.apache.aries.jpa.eclipselink.adapter;
 
 import java.lang.reflect.Constructor;
+import java.net.URL;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.List;
+import java.util.Map;
+import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.SharedCacheMode;
+import javax.persistence.ValidationMode;
+import javax.persistence.spi.ClassTransformer;
 import javax.persistence.spi.PersistenceProvider;
+import javax.persistence.spi.PersistenceUnitInfo;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+import javax.persistence.spi.ProviderUtil;
+import javax.sql.DataSource;
 
+import org.apache.aries.jpa.eclipselink.adapter.platform.OSGiTSServer;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
@@ -57,6 +69,93 @@ public class Activator implements Bundle
     
     private ServiceTracker tracker;
     private BundleContext context;
+    
+    private static class PersistenceUnitProxyWithTargetServer implements PersistenceUnitInfo {
+        private final PersistenceUnitInfo delegate;
+        
+        public PersistenceUnitProxyWithTargetServer(PersistenceUnitInfo info) {
+            delegate = info;
+        }
+
+        public void addTransformer(ClassTransformer arg0) {
+            delegate.addTransformer(arg0);
+        }
+
+        public boolean excludeUnlistedClasses() {
+            return delegate.excludeUnlistedClasses();
+        }
+
+        public ClassLoader getClassLoader() {
+            ClassLoader unionClassLoader = new ClassLoader(delegate.getClassLoader()) {
+                protected Class<?> findClass(String name) throws ClassNotFoundException {
+                    return Activator.class.getClassLoader().loadClass(name);
+                }
+            };
+            
+            return unionClassLoader;
+        }
+
+        public List<URL> getJarFileUrls() {
+            return delegate.getJarFileUrls();
+        }
+
+        public DataSource getJtaDataSource() {
+            return delegate.getJtaDataSource();
+        }
+
+        public List<String> getManagedClassNames() {
+            return delegate.getManagedClassNames();
+        }
+
+        public List<String> getMappingFileNames() {
+            return delegate.getMappingFileNames();
+        }
+
+        public ClassLoader getNewTempClassLoader() {
+            return delegate.getNewTempClassLoader();
+        }
+
+        public DataSource getNonJtaDataSource() {
+            return delegate.getNonJtaDataSource();
+        }
+
+        public String getPersistenceProviderClassName() {
+            return delegate.getPersistenceProviderClassName();
+        }
+
+        public String getPersistenceUnitName() {
+            return delegate.getPersistenceUnitName();
+        }
+
+        public URL getPersistenceUnitRootUrl() {
+            return delegate.getPersistenceUnitRootUrl();
+        }
+
+        public String getPersistenceXMLSchemaVersion() {
+            return delegate.getPersistenceXMLSchemaVersion();
+        }
+
+        public Properties getProperties() {
+            Properties props = delegate.getProperties();
+            if (!!!props.containsKey("eclipselink.target-server")) {
+                props.put("eclipselink.target-server", OSGiTSServer.class.getName());
+            }
+            
+            return props;
+        }
+
+        public SharedCacheMode getSharedCacheMode() {
+            return delegate.getSharedCacheMode();
+        }
+
+        public PersistenceUnitTransactionType getTransactionType() {
+            return delegate.getTransactionType();
+        }
+
+        public ValidationMode getValidationMode() {
+            return delegate.getValidationMode();
+        }
+    }
   
     private static class EclipseLinkProviderService implements ServiceFactory {
         private final Bundle eclipseLinkJpaBundle;
@@ -71,7 +170,22 @@ public class Activator implements Bundle
             try {
                 Class<? extends PersistenceProvider> providerClass = eclipseLinkJpaBundle.loadClass(ECLIPSELINK_JPA_PROVIDER_CLASS_NAME);
                 Constructor<? extends PersistenceProvider> con = providerClass.getConstructor();
-                return con.newInstance();
+                final PersistenceProvider provider = con.newInstance();
+                
+                return new PersistenceProvider() {
+                    public ProviderUtil getProviderUtil() {
+                        return provider.getProviderUtil();
+                    }
+                    
+                    public EntityManagerFactory createEntityManagerFactory(String arg0, Map arg1) {
+                        return provider.createEntityManagerFactory(arg0, arg1);
+                    }
+                    
+                    public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo punit, Map props) {
+                        return provider.createContainerEntityManagerFactory(new PersistenceUnitProxyWithTargetServer(punit), props);
+                    }
+                };
+                
             } catch (Exception e) {
                 logger.error("Got exception trying to instantiate the EclipseLink provider", e);
                 return null;                
@@ -180,6 +294,10 @@ public class Activator implements Bundle
             }
         }
         
+        result.add("org.apache.aries.jpa.eclipselink.adapter.platform;" + 
+                Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" + context.getBundle().getSymbolicName() + ";" + 
+                Constants.BUNDLE_VERSION_ATTRIBUTE  + "=" + context.getBundle().getVersion());        
+        
         logger.debug("Found JPA packages {}", result);
         
         return result.toArray(new String[0]);

Added: aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSServer.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSServer.java?rev=1142785&view=auto
==============================================================================
--- aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSServer.java (added)
+++ aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSServer.java Mon Jul  4 20:05:35 2011
@@ -0,0 +1,35 @@
+/*
+ * 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 WARRANTIESOR 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.aries.jpa.eclipselink.adapter.platform;
+
+import org.eclipse.persistence.platform.server.ServerPlatformBase;
+import org.eclipse.persistence.sessions.DatabaseSession;
+
+public class OSGiTSServer extends ServerPlatformBase {
+
+    public OSGiTSServer(DatabaseSession newDatabaseSession) {
+        super(newDatabaseSession);
+    }
+
+    @Override
+    public Class getExternalTransactionControllerClass() {
+        return OSGiTSWrapper.class;
+    }
+
+}

Added: aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSWrapper.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSWrapper.java?rev=1142785&view=auto
==============================================================================
--- aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSWrapper.java (added)
+++ aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSWrapper.java Mon Jul  4 20:05:35 2011
@@ -0,0 +1,46 @@
+/*
+ * 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 WARRANTIESOR 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.aries.jpa.eclipselink.adapter.platform;
+
+import javax.transaction.TransactionManager;
+
+import org.eclipse.persistence.transaction.JTATransactionController;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
+
+public class OSGiTSWrapper extends JTATransactionController {
+
+    @Override
+    protected TransactionManager acquireTransactionManager() throws Exception {
+        BundleContext ctx = FrameworkUtil.getBundle(OSGiTSWrapper.class).getBundleContext();
+        
+        if (ctx != null) {
+            ServiceReference ref = ctx.getServiceReference(TransactionManager.class.getName());
+            
+            if (ref != null) {
+                TransactionManager manager = (TransactionManager) ctx.getService(ref);
+                return manager;
+            }            
+        }
+        
+        return super.acquireTransactionManager();
+    }
+    
+}

Modified: aries/trunk/jpa/jpa-container-testbundle-eclipselink/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-testbundle-eclipselink/pom.xml?rev=1142785&r1=1142784&r2=1142785&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container-testbundle-eclipselink/pom.xml (original)
+++ aries/trunk/jpa/jpa-container-testbundle-eclipselink/pom.xml Mon Jul  4 20:05:35 2011
@@ -44,7 +44,6 @@
             org.apache.aries.jpa.container.itest*
         </aries.osgi.export.pkg>
         <aries.osgi.import>
-            org.eclipse.persistence.platform.server.was,
             javax.persistence;version="[1.0.0,3.0.0)",
             *
         </aries.osgi.import>

Modified: aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/resources/META-INF/persistence.xml?rev=1142785&r1=1142784&r2=1142785&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/resources/META-INF/persistence.xml (original)
+++ aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/resources/META-INF/persistence.xml Mon Jul  4 20:05:35 2011
@@ -40,8 +40,6 @@
     <class>org.apache.aries.jpa.container.itest.entities.Car</class>
     <exclude-unlisted-classes>true</exclude-unlisted-classes>
     <properties>
-     <!-- This makes sure we get transaction integration. -->
-     <property name="eclipselink.target-server" value="org.apache.aries.jpa.container.itest.OSGiTSServer" />
      <!-- These properties are creating the database on the fly. We are using them to avoid the tests having
           to create a database  -->
      <property name="eclipselink.target-database" value="Derby"/>