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