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
*/