Author: bergmark
Date: Wed Mar 10 16:03:40 2010
New Revision: 921418

URL: http://svn.apache.org/viewvc?rev=921418&view=rev
Log:
[OWB-323] Provide methods for passing the classloader into ServiceLoader and 
WebBeansFinder

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansFinder.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/spi/ServiceLoader.java

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansFinder.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansFinder.java?rev=921418&r1=921417&r2=921418&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansFinder.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansFinder.java
 Wed Mar 10 16:03:40 2010
@@ -55,11 +55,15 @@ public class WebBeansFinder
 
     public static Object getSingletonInstance(String singletonName)
     {
+       return getSingletonInstance(singletonName, 
WebBeansUtil.getCurrentClassLoader());
+    }
+    
+    public static Object getSingletonInstance(String singletonName, 
ClassLoader cl)
+    {
         Object object = null;
 
         synchronized (singletonMap)
         {
-            ClassLoader classLoader = WebBeansUtil.getCurrentClassLoader();
             Map<ClassLoader, Object> managerMap = 
singletonMap.get(singletonName);
 
             if (managerMap == null)
@@ -67,7 +71,7 @@ public class WebBeansFinder
                 managerMap = new HashMap<ClassLoader, Object>();
                 singletonMap.put(singletonName, managerMap);
             }
-            object = managerMap.get(classLoader);
+            object = managerMap.get(cl);
             /* No singleton for this application, create one */
             if (object == null)
             {
@@ -79,7 +83,7 @@ public class WebBeansFinder
                 try
                 {
                     object = clazz.newInstance();
-                    managerMap.put(classLoader, object);
+                    managerMap.put(cl, object);
 
                 }
                 catch (InstantiationException e)

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/spi/ServiceLoader.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/spi/ServiceLoader.java?rev=921418&r1=921417&r2=921418&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/spi/ServiceLoader.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/spi/ServiceLoader.java
 Wed Mar 10 16:03:40 2010
@@ -49,4 +49,23 @@ public class ServiceLoader
         }
         return (T) WebBeansFinder.getSingletonInstance(implName);
     }
+    
+    /**
+     * Get a new service singleton instance for the given interface.
+     * 
+     * @param serviceInterface
+     * @param classloader to be used for lookup
+     * @return the new service implementation
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getService(Class<T> serviceInterface, ClassLoader cl)
+    {
+        String implName = 
OpenWebBeansConfiguration.getInstance().getProperty(serviceInterface.getName());
+        if (implName == null)
+        {
+            logger.warn("Unable to find service with class name : " + 
serviceInterface.getName());
+            return null;
+        }
+        return (T) WebBeansFinder.getSingletonInstance(implName, cl);
+    }
 }


Reply via email to