Author: timothyjward
Date: Fri Aug 26 12:15:09 2011
New Revision: 1162076

URL: http://svn.apache.org/viewvc?rev=1162076&view=rev
Log:
ARIES-718: Support persistence units in EJB Bundles

Modified:
    
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleHelper.java
    
aries/trunk/jpa/jpa-container/src/main/resources/org/apache/aries/jpa/container/nls/jpaContainerMessages.properties
    
aries/trunk/jpa/jpa-container/src/test/java/org/apache/aries/jpa/container/PersistenceBundleLifecycleTest.java

Modified: 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleHelper.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleHelper.java?rev=1162076&r1=1162075&r2=1162076&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleHelper.java
 (original)
+++ 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleHelper.java
 Fri Aug 26 12:15:09 2011
@@ -49,6 +49,8 @@ public class PersistenceBundleHelper
   public static final String PERSISTENCE_UNIT_HEADER = "Meta-Persistence";
   /** The Web-ContextPath header (as defined in the web application bundle 
spec) */
   public static final String WEB_CONTEXT_PATH_HEADER = "Web-ContextPath";
+  /** The Export-EJB header (as defined in the web application bundle spec) */
+  public static final String EXPORT_EJB_HEADER = "Export-EJB";
 
   /**
    * This method locates persistence descriptor files based on a combination of
@@ -66,12 +68,13 @@ public class PersistenceBundleHelper
     Dictionary<String, String> headers = bundle.getHeaders();
     String metaPersistence = headers.get(PERSISTENCE_UNIT_HEADER);
     String webContextPath = headers.get(WEB_CONTEXT_PATH_HEADER);
+    String exportEJB = headers.get(EXPORT_EJB_HEADER);
     
     String bundleIdentity = bundle.getSymbolicName() + '/' + 
bundle.getVersion();
     
     Collection<String> locations;
     
-    if (metaPersistence == null) {
+    if (metaPersistence == null && exportEJB == null) {
       if(webContextPath == null) {
         return Collections.emptySet();
       } else {
@@ -79,7 +82,7 @@ public class PersistenceBundleHelper
        
         String bundleClassPath = headers.get(Constants.BUNDLE_CLASSPATH);
         
-        locations = findWABClassPathLocations(bundleClassPath);
+        locations = findPersistenceXmlOnClassPath(bundleClassPath);
 
         if(_logger.isInfoEnabled())
           
_logger.info(NLS.MESSAGES.getMessage("wab.without.meta.persistence.header", 
bundleIdentity, WEB_CONTEXT_PATH_HEADER, PERSISTENCE_UNIT_HEADER, locations));
@@ -91,7 +94,9 @@ public class PersistenceBundleHelper
       locations = new HashSet<String>();
       locations.add(PERSISTENCE_XML);
       
-      if(!!!metaPersistence.isEmpty()) {
+      if(exportEJB != null && metaPersistence == null){
+        
_logger.info(NLS.MESSAGES.getMessage("ejb.without.meta.persistence.header", 
bundleIdentity, EXPORT_EJB_HEADER, PERSISTENCE_UNIT_HEADER, locations));
+      } else if(!!!metaPersistence.isEmpty()) {
         //Split apart the header to get the individual entries
         for (String s : metaPersistence.split(",")) {
           locations.add(s.trim());
@@ -133,7 +138,7 @@ public class PersistenceBundleHelper
     return persistenceXmlFiles;
   }
 
-  private static Collection<String> findWABClassPathLocations(String 
bundleClassPath) {
+  private static Collection<String> findPersistenceXmlOnClassPath(String 
bundleClassPath) {
     
     Collection<String> locations = new HashSet<String>();
     

Modified: 
aries/trunk/jpa/jpa-container/src/main/resources/org/apache/aries/jpa/container/nls/jpaContainerMessages.properties
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/resources/org/apache/aries/jpa/container/nls/jpaContainerMessages.properties?rev=1162076&r1=1162075&r2=1162076&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container/src/main/resources/org/apache/aries/jpa/container/nls/jpaContainerMessages.properties
 (original)
+++ 
aries/trunk/jpa/jpa-container/src/main/resources/org/apache/aries/jpa/container/nls/jpaContainerMessages.properties
 Fri Aug 26 12:15:09 2011
@@ -44,6 +44,13 @@ no.overlap.for.version.range=There was n
 wab.without.meta.persistence.header=The bundle {0} specifies the {1} header; 
it does not specify the {2} header. \
  This bundle will be scanned for persistence descriptors in the locations: {3} 
using the rules defined by the \
  JPA specification for finding persistence descriptors for web applications.
+# {0} The bundle identity
+# {1} The Web-ContextPath header
+# {2} The Meta-Persistence header
+# {3} The locations
+ejb.without.meta.persistence.header=The bundle {0} specifies the {1} header; 
it does not specify the {2} header. \
+ This bundle will be scanned for persistence descriptors in the locations: {3} 
using the rules defined by the \
+ JPA specification for finding persistence descriptors for ejb applications.
 # {0} The location
 # {1} The bundle identity
 exception.while.locating.descriptor=There was an exception while locating the 
persistence descriptor at location \

Modified: 
aries/trunk/jpa/jpa-container/src/test/java/org/apache/aries/jpa/container/PersistenceBundleLifecycleTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/test/java/org/apache/aries/jpa/container/PersistenceBundleLifecycleTest.java?rev=1162076&r1=1162075&r2=1162076&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container/src/test/java/org/apache/aries/jpa/container/PersistenceBundleLifecycleTest.java
 (original)
+++ 
aries/trunk/jpa/jpa-container/src/test/java/org/apache/aries/jpa/container/PersistenceBundleLifecycleTest.java
 Fri Aug 26 12:15:09 2011
@@ -225,6 +225,29 @@ public class PersistenceBundleLifecycleT
     testSuccessfulCreationEvent(ref, extenderContext, 3);
     testSuccessfulRegistrationEvent(ref, extenderContext, 3, 
"webInfClassesOnClassPath", "jarOne", "jarTwo");
   }
+  
+  @Test
+  public void testManager_EJBNoMetaPersistence() throws Exception {
+   
+    
+    BundleContext extenderContext = preExistingBundleSetup();
+    
+    Hashtable<String,String> hash1 = new Hashtable<String, String>();
+    hash1.put("javax.persistence.provider", "no.such.Provider");
+    ServiceRegistration reg = 
persistenceBundle.getBundleContext().registerService(new String[] 
{PersistenceProvider.class.getName()} ,
+        pp, hash1 );
+    
+    ServiceReference ref = reg.getReference();
+    setupEJBBundle();
+    
+    mgr.start(extenderContext);
+    
+    
+    Skeleton.getSkeleton(persistenceBundle).assertCalledExactNumberOfTimes(new 
MethodCall(Bundle.class, "getEntry", String.class), 1);
+    
+    testSuccessfulCreationEvent(ref, extenderContext, 1);
+    testSuccessfulRegistrationEvent(ref, extenderContext, 1, "root");
+  }
 
   @Test
   public void 
testManager_OnePreExistingPersistenceBundle_OneExistingProvider() throws 
Exception
@@ -1264,6 +1287,13 @@ public class PersistenceBundleLifecycleT
     skel.setReturnValue(new MethodCall(Bundle.class, "getVersion"), new 
Version("0.0.0"));
     
   }
+  
+  private void setupEJBBundle() throws Exception {
+    
+    setupWABBundle();
+    persistenceBundle.getHeaders().remove("Web-ContextPath");
+    persistenceBundle.getHeaders().put("Export-EJB", "");
+  }
 
   private void buildJarFile(Skeleton skel, URL root, String filePath, String 
pUnitName) throws URISyntaxException,
       IOException, FileNotFoundException {


Reply via email to