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/05 08:57:09 UTC

svn commit: r1142901 - /aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java

Author: mahrwald
Date: Tue Jul  5 06:57:09 2011
New Revision: 1142901

URL: http://svn.apache.org/viewvc?rev=1142901&view=rev
Log:
ARIES-691: A bit more commenting on what the adapter does

Modified:
    aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java

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=1142901&r1=1142900&r2=1142901&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 Tue Jul  5 06:57:09 2011
@@ -57,8 +57,14 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * This exception is thrown if an {@link EntityManagerFactoryManager} has
- * entered an invalid state and needs to be destroyed
+ * Eclipselink adapter main class.
+ * 
+ * The purpose of this class is to:
+ * <ul>
+ * <li>publish an OSGi-compatible Eclipselink {@link PersistenceProvider} service in the service registry</li>
+ * <li>intercept {@link EntityManagerFactory} creation to ensure that the Eclipselink target server (if not specified otherwise)
+ *     is OSGi compatible</li>
+ * </ul>
  */
 public class Activator implements BundleActivator, BundleListener {
     private static final String ECLIPSELINK_JPA_PROVIDER_BUNDLE_SYMBOLIC_NAME = "org.eclipse.persistence.jpa";
@@ -70,6 +76,10 @@ public class Activator implements Bundle
     private ServiceTracker tracker;
     private BundleContext context;
     
+    /**
+     * Wrapper {@link PersistenceUnitInfo} object that adds the eclipselink.target-server setting (if not present)
+     * and makes sure we can load {@link OSGiTSServer} from the unit's classloader.
+     */
     private static class PersistenceUnitProxyWithTargetServer implements PersistenceUnitInfo {
         private final PersistenceUnitInfo delegate;
         
@@ -157,6 +167,10 @@ public class Activator implements Bundle
         }
     }
   
+    /**
+     * Service factory for generating the Eclipselink OSGi compatible provider. It proxies the provider so that
+     * we can go in at entity manager creation time and set the eclipselink target-server to be {@link OSGiTSServer}.
+     */
     private static class EclipseLinkProviderService implements ServiceFactory {
         private final Bundle eclipseLinkJpaBundle;
         
@@ -236,6 +250,7 @@ public class Activator implements Bundle
         if (b.getSymbolicName().equals(ECLIPSELINK_JPA_PROVIDER_BUNDLE_SYMBOLIC_NAME)) {
             logger.debug("Found EclipseLink bundle {}", b);
             
+            // make sure we can actually find the JPA provider we expect to find
             try {
                 b.loadClass(ECLIPSELINK_JPA_PROVIDER_CLASS_NAME);
             } catch (ClassNotFoundException cnfe) {
@@ -265,7 +280,12 @@ public class Activator implements Bundle
     }
     
     /**
-     * Get all the relevant packages that the EclipseLink JPA provider exports or persistence packages it uses itself
+     * Get all the relevant packages that the EclipseLink JPA provider exports or persistence packages it uses itself. These are needed
+     * so that the woven proxy (for runtime enhancement) can be used later on :)
+     * 
+     * Note that differently to OpenJPA the relevant classes are actually in more than just one bundle (org.eclipse.persistence.jpa and org.eclipse.persistence.core
+     * at the time of this writing). Hence, we have to take more than just the packages of the JPA provider bundle into account ...
+     * 
      * @param jpaBundle
      * @return
      */