You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by be...@apache.org on 2010/03/10 17:03:40 UTC

svn commit: r921418 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: config/WebBeansFinder.java spi/ServiceLoader.java

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);
+    }
 }