Author: rmannibucau
Date: Sun Sep 14 17:31:38 2014
New Revision: 1624878

URL: http://svn.apache.org/r1624878
Log:
TOMEE-1347 default properties provider for resources

Added:
    
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/resource/DefaultPropertiesProviderTest.java
      - copied, changed from r1624820, 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/resource/PropertiesProviderTest.java
Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1624878&r1=1624877&r2=1624878&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
 Sun Sep 14 17:31:38 2014
@@ -21,6 +21,7 @@ import org.apache.openejb.Extensions;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.Vendor;
 import org.apache.openejb.api.Proxy;
+import org.apache.openejb.api.resource.PropertiesResourceProvider;
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.BmpEntityContainerInfo;
@@ -1182,15 +1183,20 @@ public class ConfigurationFactory implem
             props.putAll(overrides);
 
             // force user properties last
-            if (service.getPropertiesProvider() != null) {
+            String propertiesProvider = service.getPropertiesProvider();
+            if (propertiesProvider == null) {
+                propertiesProvider = 
SystemInstance.get().getProperty(PropertiesResourceProvider.class.getName());
+            }
+            if (propertiesProvider != null) {
                 // don't trim them, user wants to handle it himself, let him 
do it
-                final ObjectRecipe recipe = new 
ObjectRecipe(service.getPropertiesProvider());
+                final ObjectRecipe recipe = new 
ObjectRecipe(propertiesProvider);
                 recipe.allow(Option.CASE_INSENSITIVE_PROPERTIES);
                 recipe.allow(Option.PRIVATE_PROPERTIES);
                 recipe.allow(Option.FIELD_INJECTION);
                 recipe.allow(Option.NAMED_PARAMETERS);
                 recipe.allow(Option.IGNORE_MISSING_PROPERTIES);
                 recipe.setFactoryMethod("provides");
+                recipe.setProperty("serviceId", service.getId());
                 recipe.setProperties(props);
                 recipe.setProperty("properties", props); // let user get all 
config
                 final Properties p = Properties.class.cast(recipe.create());

Copied: 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/resource/DefaultPropertiesProviderTest.java
 (from r1624820, 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/resource/PropertiesProviderTest.java)
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/resource/DefaultPropertiesProviderTest.java?p2=tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/resource/DefaultPropertiesProviderTest.java&p1=tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/resource/PropertiesProviderTest.java&r1=1624820&r2=1624878&rev=1624878&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/resource/PropertiesProviderTest.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/resource/DefaultPropertiesProviderTest.java
 Sun Sep 14 17:31:38 2014
@@ -16,8 +16,8 @@
  */
 package org.apache.openejb.resource;
 
-import org.apache.openejb.jee.EnterpriseBean;
-import org.apache.openejb.jee.SingletonBean;
+import org.apache.openejb.api.resource.PropertiesResourceProvider;
+import org.apache.openejb.jee.WebApp;
 import org.apache.openejb.junit.ApplicationComposer;
 import org.apache.openejb.testing.Configuration;
 import org.apache.openejb.testing.Module;
@@ -25,79 +25,81 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import javax.annotation.Resource;
-import javax.ejb.EJB;
 import java.util.Properties;
 
 import static org.junit.Assert.assertEquals;
 
 @RunWith(ApplicationComposer.class)
-public class PropertiesProviderTest {
-    @EJB
-    private CustomPropBean bean;
+public class DefaultPropertiesProviderTest {
+    @Resource(name = "r1")
+    private MyResource r1;
+
+    @Resource(name = "_r2")
+    private MyResource r2;
+
+    @Resource(name = "_r3")
+    private MyResource r3;
 
     @Test
-    public void validAliases() {
-        assertEquals("r2", bean.getR2().value);
-        assertEquals("ok", bean.getR2().noConflict);
-        assertEquals("r1", bean.getR1().value);
-        assertEquals("ok", bean.getR1().noConflict);
+    public void valid() {
+        assertEquals("r1", r1.value);
+        assertEquals("2", r2.value);
+        assertEquals("3", r3.value);
     }
 
     @Module
-    public EnterpriseBean bean() {
-        return new SingletonBean(CustomPropBean.class).localBean();
+    public WebApp bean() {
+        return new WebApp();
     }
 
     @Configuration
     public Properties config() {
         final Properties p = new Properties();
+        p.put(PropertiesResourceProvider.class.getName(), 
GlobalPropertiesProvider.class.getName());
 
         p.put("r1", "new://Resource?" +
-                
"class-name=org.apache.openejb.resource.PropertiesProviderTest$MyResource&" +
-                
"properties-provider=org.apache.openejb.resource.PropertiesProviderTest$PropertiesProvider");
-        p.put("r1.value", "will be overriden");
-        p.put("r1.noConflict", "ok");
-
-        p.put("r2", "new://Resource?" +
-                        
"class-name=org.apache.openejb.resource.PropertiesProviderTest$MyResource");
-        p.put("r2.value", "r2");
-        p.put("r2.noConflict", "ok");
-
-        return p;
-    }
-
-    public static class CustomPropBean {
-        @Resource(name = "r1")
-        private MyResource r1;
+                
"class-name=org.apache.openejb.resource.DefaultPropertiesProviderTest$MyResource");
+        p.put("r1.value", "_____________________");
 
-        @Resource(name = "r2")
-        private MyResource r2;
-
-        public MyResource getR1() {
-            return r1;
-        }
+        p.put("_r2", "new://Resource?" +
+                        
"class-name=org.apache.openejb.resource.DefaultPropertiesProviderTest$MyResource"
+                        + 
"&properties-provider=org.apache.openejb.resource.DefaultPropertiesProviderTest$SpecificPropertiesProvider");
+        p.put("_r2.value", "____________________");
+
+        p.put("_r3", "new://Resource?" +
+                        
"class-name=org.apache.openejb.resource.DefaultPropertiesProviderTest$MyResource");
+        p.put("_r3.value", "3");
 
-        public MyResource getR2() {
-            return r2;
-        }
+        return p;
     }
 
     public static class MyResource {
         private String value;
-        private String noConflict;
     }
 
-    public static class PropertiesProvider {
+    public static class GlobalPropertiesProvider {
         private Properties p;
+        private String serviceId;
 
         public void setProperties(final Properties p) {
             this.p = p;
         }
 
         public Properties provides() {
+            if (serviceId.startsWith("_r")) {
+                return new Properties();
+            }
             return new Properties() {{
                 putAll(p);
-                setProperty("value", "r1"); // override
+                setProperty("value", serviceId);
+            }};
+        }
+    }
+
+    public static class SpecificPropertiesProvider {
+        public Properties provides() {
+            return new Properties() {{
+                setProperty("value", "2"); // override
             }};
         }
     }


Reply via email to