Author: timothyjward
Date: Tue Apr 12 18:06:15 2016
New Revision: 1738840

URL: http://svn.apache.org/viewvc?rev=1738840&view=rev
Log:
[ARIES-1530] Support plugins when using the EclipseLink adapter

Modified:
    
aries/trunk/jpa/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/EclipseAdditionalTest.java
    
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/EclipseLinkPersistenceProvider.java
    
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/PersistenceUnitProxyWithTargetServer.java
    
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/UnionClassLoader.java

Modified: 
aries/trunk/jpa/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/EclipseAdditionalTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/EclipseAdditionalTest.java?rev=1738840&r1=1738839&r2=1738840&view=diff
==============================================================================
--- 
aries/trunk/jpa/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/EclipseAdditionalTest.java
 (original)
+++ 
aries/trunk/jpa/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/EclipseAdditionalTest.java
 Tue Apr 12 18:06:15 2016
@@ -15,24 +15,35 @@
  */
 package org.apache.aries.jpa.container.itest;
 
+import static 
javax.persistence.spi.PersistenceUnitTransactionType.RESOURCE_LOCAL;
+import static org.junit.Assert.assertEquals;
 import static org.ops4j.pax.exam.CoreOptions.streamBundle;
+import static org.osgi.service.jdbc.DataSourceFactory.OSGI_JDBC_DRIVER_CLASS;
 
 import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
 
 import javax.persistence.EntityManagerFactory;
 
 import org.apache.aries.jpa.itest.AbstractJPAItest;
+import org.eclipse.persistence.config.SessionCustomizer;
+import org.eclipse.persistence.sessions.Session;
 import org.junit.Assert;
 import org.junit.Test;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.tinybundles.core.TinyBundles;
 import org.osgi.framework.Constants;
+import org.osgi.service.jdbc.DataSourceFactory;
 import org.osgi.service.jpa.EntityManagerFactoryBuilder;
 
 public class EclipseAdditionalTest extends AbstractJPAItest {
 
-    @Test
+       private static final String CUSTOMIZER_CALLED = 
"org.apache.aries.jpa.itest.eclipse.customizer";
+
+       @Test
     public void testContextCreationWithStartingBundle() throws Exception {
         
getBundleByName("org.apache.aries.jpa.container.itest.bundle.eclipselink").start();
         getEMF("script-test-unit");
@@ -42,6 +53,30 @@ public class EclipseAdditionalTest exten
     public void testEntityManagerFactoryBuilderWithIncompletePersistenceUnit() 
throws Exception {
         getService(EntityManagerFactoryBuilder.class, 
"(osgi.unit.name=incompleteTestUnit)", 1000);
     }
+
+    @Test
+    public void 
testEntityManagerFactoryBuilderWithIncompletePersistenceUnitAddPlugin() throws 
Exception {
+       EntityManagerFactoryBuilder builder = 
getService(EntityManagerFactoryBuilder.class, 
"(osgi.unit.name=incompleteTestUnit)", 1000);
+       
+       DataSourceFactory dsf = getService(DataSourceFactory.class, 
+                       "(" + OSGI_JDBC_DRIVER_CLASS + 
"=org.apache.derby.jdbc.EmbeddedDriver)");
+       
+       Properties jdbcProps = new Properties();
+       jdbcProps.setProperty("url", "jdbc:derby:memory:DSFTEST;create=true");
+       
+       Map<String, Object> props = new HashMap<String, Object>();
+       props.put("javax.persistence.nonJtaDataSource", 
dsf.createDataSource(jdbcProps));
+       props.put("javax.persistence.transactionType", RESOURCE_LOCAL.name());
+       
+       props.put("org.apache.aries.jpa.eclipselink.plugin.types", 
SessionCustomizerImpl.class);
+       props.put("eclipselink.session.customizer", 
SessionCustomizerImpl.class.getName());
+       
+       EntityManagerFactory emf = builder.createEntityManagerFactory(props);
+       emf.createEntityManager();
+               assertEquals("invoked", emf
+                       .getProperties().get(CUSTOMIZER_CALLED));
+       
+    }
     
     @Test(expected = IllegalStateException.class)
     public void testEntityManagerFactoryWithIncompletePersistenceUnit() throws 
Exception {
@@ -64,7 +99,15 @@ public class EclipseAdditionalTest exten
             derbyDSF(), //
             testBundleEclipseLink().noStart(),//
             streamBundle(testBundle)
-        // debug()
+//         ,debug()
         };
     }
+
+       public static class SessionCustomizerImpl implements SessionCustomizer {
+       
+               @Override
+               public void customize(Session arg0) throws Exception {
+                       arg0.setProperty(CUSTOMIZER_CALLED, "invoked");
+               }
+       }
 }

Modified: 
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/EclipseLinkPersistenceProvider.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/EclipseLinkPersistenceProvider.java?rev=1738840&r1=1738839&r2=1738840&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/EclipseLinkPersistenceProvider.java
 (original)
+++ 
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/EclipseLinkPersistenceProvider.java
 Tue Apr 12 18:06:15 2016
@@ -27,7 +27,7 @@ import javax.persistence.spi.ProviderUti
 
 import org.osgi.framework.Bundle;
 
-@SuppressWarnings("rawtypes")
+@SuppressWarnings({"rawtypes", "unchecked"})
 final class EclipseLinkPersistenceProvider implements PersistenceProvider {
     private final PersistenceProvider delegate;
     private final Bundle eclipeLinkBundle;
@@ -47,14 +47,14 @@ final class EclipseLinkPersistenceProvid
         return delegate.createEntityManagerFactory(arg0, arg1);
     }
 
-    @Override
+       @Override
     public EntityManagerFactory 
createContainerEntityManagerFactory(PersistenceUnitInfo punit, Map props) {
-        return delegate.createContainerEntityManagerFactory(new 
PersistenceUnitProxyWithTargetServer(punit, eclipeLinkBundle), props);
+        return delegate.createContainerEntityManagerFactory(new 
PersistenceUnitProxyWithTargetServer(punit, eclipeLinkBundle, props), props);
     }
 
     @Override
     public void generateSchema(PersistenceUnitInfo punit, Map arg1) {
-        delegate.generateSchema(new 
PersistenceUnitProxyWithTargetServer(punit, eclipeLinkBundle), arg1);
+        delegate.generateSchema(new 
PersistenceUnitProxyWithTargetServer(punit, eclipeLinkBundle, arg1), arg1);
     }
 
     @Override

Modified: 
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/PersistenceUnitProxyWithTargetServer.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/PersistenceUnitProxyWithTargetServer.java?rev=1738840&r1=1738839&r2=1738840&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/PersistenceUnitProxyWithTargetServer.java
 (original)
+++ 
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/PersistenceUnitProxyWithTargetServer.java
 Tue Apr 12 18:06:15 2016
@@ -20,6 +20,7 @@ package org.apache.aries.jpa.eclipselink
 
 import java.net.URL;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 
 import javax.persistence.SharedCacheMode;
@@ -41,10 +42,10 @@ public class PersistenceUnitProxyWithTar
   private final PersistenceUnitInfo delegate;
     private final ClassLoader unionClassLoader; 
     
-    public PersistenceUnitProxyWithTargetServer(PersistenceUnitInfo info, 
Bundle b) {
+    public PersistenceUnitProxyWithTargetServer(PersistenceUnitInfo info, 
Bundle b, Map<String, Object> arg1) {
         delegate = info;
         unionClassLoader = new UnionClassLoader(delegate.getClassLoader(), b, 
-            FrameworkUtil.getBundle(getClass()));
+            FrameworkUtil.getBundle(getClass()), arg1);
     }
 
     @Override

Modified: 
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/UnionClassLoader.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/UnionClassLoader.java?rev=1738840&r1=1738839&r2=1738840&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/UnionClassLoader.java
 (original)
+++ 
aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/UnionClassLoader.java
 Tue Apr 12 18:06:15 2016
@@ -23,6 +23,9 @@ import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleReference;
@@ -35,15 +38,33 @@ public final class UnionClassLoader exte
     private static final Logger LOG = 
LoggerFactory.getLogger(UnionClassLoader.class);
     private final Bundle eclipseLinkBundle;
     private final Bundle adaptorBundle;
+    private final Map<String, Class<?>> registeredPlugins = new 
HashMap<String, Class<?>>();
 
-    public UnionClassLoader(ClassLoader parentLoader, Bundle b, Bundle 
adaptor) {
+    public UnionClassLoader(ClassLoader parentLoader, Bundle b, Bundle 
adaptor, Map<String, Object> arg1) {
         super(parentLoader);
         this.eclipseLinkBundle = b;
         this.adaptorBundle = adaptor;
+        
+        //Populate the plugins
+        
+        Object o = arg1 == null ? null : 
arg1.get("org.apache.aries.jpa.eclipselink.plugin.types");
+       
+        if(o instanceof Class) {
+               Class<?> c = (Class<?>) o;
+               registeredPlugins.put(c.getName(), c);
+        } else if (o instanceof Collection) {
+               for(Object o2 : (Collection<?>) o) {
+                       Class<?> c = (Class<?>) o2;
+               registeredPlugins.put(c.getName(), c);
+               }
+        }
     }
 
     @Override
     protected Class<?> findClass(String name) throws ClassNotFoundException {
+       if(registeredPlugins.containsKey(name)) {
+               return registeredPlugins.get(name);
+       }
         if 
("org.apache.aries.jpa.eclipselink.adapter.platform.OSGiTSServer".equals(name) 
             || 
"org.apache.aries.jpa.eclipselink.adapter.platform.OSGiTSWrapper".equals(name)) 
{
             return loadTempClass(name);


Reply via email to