You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2010/07/01 19:35:51 UTC
svn commit: r959732 - in
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:
config/WebBeansFinder.java util/ClassUtil.java
Author: gerdogdu
Date: Thu Jul 1 17:35:50 2010
New Revision: 959732
URL: http://svn.apache.org/viewvc?rev=959732&view=rev
Log:
Update how our loading classes for singletons. Using Class.forName instead of loadClass
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansFinder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.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=959732&r1=959731&r2=959732&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 Thu Jul 1 17:35:50 2010
@@ -19,10 +19,13 @@
package org.apache.webbeans.config;
import java.util.HashMap;
+import java.util.IdentityHashMap;
import java.util.Map;
+import java.util.Map.Entry;
import org.apache.webbeans.exception.WebBeansException;
import org.apache.webbeans.util.Asserts;
+import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.WebBeansUtil;
/**
@@ -39,6 +42,8 @@ public final class WebBeansFinder
* Values --> Maps of singleton class name with object
*/
private static Map<ClassLoader, Map<String, Object>> singletonMap = new HashMap<ClassLoader, Map<String,Object>>();
+
+ private static Map<Object, ClassLoader> objectToClassLoaderMap = new IdentityHashMap<Object, ClassLoader>();
/**
* No instantiate.
@@ -85,13 +90,20 @@ public final class WebBeansFinder
try
{
//Load class
- Class<?> clazz = classLoader.loadClass(singletonName);
+ Class<?> clazz = ClassUtil.getClassFromName(singletonName);
+ if(clazz == null)
+ {
+ throw new ClassNotFoundException("Class with name: " + singletonName + " is not found in the system");
+ }
//Create instance
object = clazz.newInstance();
//Save it
managerMap.put(singletonName, object);
+
+ //Save it object --> classloader
+ objectToClassLoaderMap.put(object, classLoader);
}
catch (InstantiationException e)
@@ -145,8 +157,34 @@ public final class WebBeansFinder
Asserts.assertNotNull(classLoader, "classloader is null");
synchronized (singletonMap)
{
- singletonMap.remove(classLoader);
+ Map<String, Object> objects = singletonMap.remove(classLoader);
+ if(objects != null)
+ {
+ for(Entry<String, Object> entry : objects.entrySet())
+ {
+ objectToClassLoaderMap.remove(entry.getValue());
+ }
+ }
+ }
+ }
+
+ /**
+ * Gets classloader with given singelton instance.
+ * @param object singleton instance
+ * @return the classloader that instance is created within
+ */
+ public static ClassLoader getSingletonClassLoader(Object object)
+ {
+ Asserts.assertNotNull(object, "object is null");
+ synchronized (objectToClassLoaderMap)
+ {
+ if(objectToClassLoaderMap.containsKey(object))
+ {
+ return objectToClassLoaderMap.get(object);
+ }
}
+
+ return null;
}
}
\ No newline at end of file
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java?rev=959732&r1=959731&r2=959732&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java Thu Jul 1 17:35:50 2010
@@ -185,12 +185,11 @@ public final class ClassUtil
public static Class<?> getClassFromName(String name)
{
Class<?> clazz = null;
-
+ ClassLoader loader = null;
try
{
- ClassLoader loader = WebBeansUtil.getCurrentClassLoader();
- clazz = loader.loadClass(name);
-
+ loader = WebBeansUtil.getCurrentClassLoader();
+ clazz = Class.forName(name, true , loader);
return clazz;
}
@@ -198,7 +197,8 @@ public final class ClassUtil
{
try
{
- clazz = ClassUtil.class.getClassLoader().loadClass(name);
+ loader = ClassUtil.class.getClassLoader();
+ clazz = Class.forName(name, true , loader);
return clazz;
@@ -207,7 +207,8 @@ public final class ClassUtil
{
try
{
- clazz = ClassLoader.getSystemClassLoader().loadClass(name);
+ loader = ClassLoader.getSystemClassLoader();
+ clazz = Class.forName(name, true , loader);
return clazz;