You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ti...@apache.org on 2011/12/20 10:59:39 UTC

svn commit: r1221172 - in /aries/trunk/jpa: jpa-blueprint-aries/ jpa-blueprint-aries/src/main/java/org/apache/aries/jpa/blueprint/aries/impl/ jpa-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/ jpa-container-itest/ jpa-container-itest/src/t...

Author: timothyjward
Date: Tue Dec 20 09:59:38 2011
New Revision: 1221172

URL: http://svn.apache.org/viewvc?rev=1221172&view=rev
Log:
ARIES-765: JPA changes - proxy container-managed EntityManager beans for when EntityManagerFactory services are unregistered

Modified:
    aries/trunk/jpa/jpa-blueprint-aries/pom.xml
    aries/trunk/jpa/jpa-blueprint-aries/src/main/java/org/apache/aries/jpa/blueprint/aries/impl/NSHandler.java
    aries/trunk/jpa/jpa-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/injection.xml
    aries/trunk/jpa/jpa-container-itest/pom.xml
    aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/JPAInjectionTest.java

Modified: aries/trunk/jpa/jpa-blueprint-aries/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-blueprint-aries/pom.xml?rev=1221172&r1=1221171&r2=1221172&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-blueprint-aries/pom.xml (original)
+++ aries/trunk/jpa/jpa-blueprint-aries/pom.xml Tue Dec 20 09:59:38 2011
@@ -71,7 +71,7 @@
         <dependency>
             <groupId>org.apache.aries.blueprint</groupId>
             <artifactId>org.apache.aries.blueprint.core</artifactId>
-            <version>0.4</version>
+            <version>0.4.1-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>

Modified: aries/trunk/jpa/jpa-blueprint-aries/src/main/java/org/apache/aries/jpa/blueprint/aries/impl/NSHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-blueprint-aries/src/main/java/org/apache/aries/jpa/blueprint/aries/impl/NSHandler.java?rev=1221172&r1=1221171&r2=1221172&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-blueprint-aries/src/main/java/org/apache/aries/jpa/blueprint/aries/impl/NSHandler.java (original)
+++ aries/trunk/jpa/jpa-blueprint-aries/src/main/java/org/apache/aries/jpa/blueprint/aries/impl/NSHandler.java Tue Dec 20 09:59:38 2011
@@ -19,6 +19,8 @@
 package org.apache.aries.jpa.blueprint.aries.impl;
 
 import java.net.URL;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -106,6 +108,10 @@ public class NSHandler implements Namesp
 
     /** The blueprint attribute value to make a bean eager */
     private static final String ACTIVATION_EAGER = "EAGER";
+    
+    /** The interface to proxy for managed persistence contexts */
+    private static final Collection<Class<?>> IFACES = Arrays.asList(new Class<?>[] {EntityManager.class});
+    
     /** The {@link PersistenceManager} to register contexts with */
     private PersistenceContextProvider manager;
     /** Used to indicate whether the PersistenceContextProvider is available */
@@ -336,11 +342,15 @@ public class NSHandler implements Namesp
      * @return
      */
     private ComponentMetadata createInjectionBeanMetedata(ParserContext ctx,
-        ComponentMetadata factory) {
+        MutableReferenceMetadata factory) {
 
         if (_logger.isDebugEnabled())
             _logger.debug("Creating a managed persistence context definition for injection");
 
+        //We want the EntityManager objects created from this factory to be damped too
+        
+        factory.setProxyChildBeanClasses(IFACES);
+        
         // Register the factory bean, and then create an entitymanager from it
         ctx.getComponentDefinitionRegistry().registerComponentDefinition(
                 factory);

Modified: aries/trunk/jpa/jpa-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/injection.xml
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/injection.xml?rev=1221172&r1=1221171&r2=1221172&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/injection.xml (original)
+++ aries/trunk/jpa/jpa-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/injection.xml Tue Dec 20 09:59:38 2011
@@ -31,5 +31,14 @@
       <jpa:context property="persistenceContext" unitname="test-context"/>
     </bean>
   </service>
+  
+    <service interface="org.apache.aries.jpa.blueprint.itest.JPATestBean">
+    <service-properties>
+       <entry key="lifecycle" value="true"/>
+    </service-properties>
+    <bean class="org.apache.aries.jpa.blueprint.itest.JPATestBean">
+      <jpa:context property="persistenceContext" unitname="bp-test-unit"/>
+    </bean>
+  </service>
             
 </blueprint>
\ No newline at end of file

Modified: aries/trunk/jpa/jpa-container-itest/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-itest/pom.xml?rev=1221172&r1=1221171&r2=1221172&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container-itest/pom.xml (original)
+++ aries/trunk/jpa/jpa-container-itest/pom.xml Tue Dec 20 09:59:38 2011
@@ -121,7 +121,7 @@
         <dependency>
             <groupId>org.apache.aries.blueprint</groupId>
             <artifactId>org.apache.aries.blueprint.core</artifactId>
-            <version>0.4</version>
+            <version>0.4.1-SNAPSHOT</version>
             <scope>test</scope>
         </dependency>
         <dependency>

Modified: aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/JPAInjectionTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/JPAInjectionTest.java?rev=1221172&r1=1221171&r2=1221172&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/JPAInjectionTest.java (original)
+++ aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/JPAInjectionTest.java Tue Dec 20 09:59:38 2011
@@ -25,6 +25,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.osgi.framework.BundleException;
 
 @RunWith(JUnit4TestRunner.class)
 public class JPAInjectionTest extends AbstractIntegrationTest {
@@ -47,6 +48,17 @@ public class JPAInjectionTest extends Ab
     assertTrue("No persistence unit injection", bean.pUnitAvailable());
     assertTrue("No persistence context injection", bean.pContextAvailable());
   }
+  
+  @Test
+  public void testLifecycle() throws Exception {
+    JPATestBean bean = context().getService(JPATestBean.class, "(lifecycle=true)");
+    
+    assertTrue("No persistence context injection", bean.pContextAvailable());
+    
+    context().getBundleByName("org.apache.aries.jpa.org.apache.aries.jpa.container.itest.bundle").update();
+    
+    assertTrue("No persistence context injection", bean.pContextAvailable());
+  }
 
   @org.ops4j.pax.exam.junit.Configuration
   public static Option[] configuration() {
@@ -70,6 +82,7 @@ public class JPAInjectionTest extends Ab
         mavenBundle("commons-lang", "commons-lang"),
         mavenBundle("commons-collections", "commons-collections"),
         mavenBundle("commons-pool", "commons-pool"),
+        mavenBundle("org.apache.derby", "derby"),
         mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.serp"),
         mavenBundle("org.apache.openjpa", "openjpa"),
 
@@ -78,6 +91,8 @@ public class JPAInjectionTest extends Ab
 //        mavenBundle("org.eclipse.persistence", "org.eclipse.persistence.asm"),
         
         mavenBundle("org.apache.aries.jpa", "org.apache.aries.jpa.blueprint.itest.bundle"),
+        //For lifecycle testing
+        mavenBundle("org.apache.aries.jpa", "org.apache.aries.jpa.container.itest.bundle"),
         
         equinox().version("3.5.0"));
   }