[seam-commits] Seam SVN: r8277 - in branches/Seam_2_0/src/main/org/jboss/seam: init and 1 other directory.
seam-commits at lists.jboss.org
seam-commits at lists.jboss.org
Sat May 24 06:09:54 EDT 2008
Author: shane.bryzak at jboss.com
Date: 2008-05-24 06:09:54 -0400 (Sat, 24 May 2008)
New Revision: 8277
Modified:
branches/Seam_2_0/src/main/org/jboss/seam/Seam.java
branches/Seam_2_0/src/main/org/jboss/seam/init/DeploymentDescriptor.java
Log:
backported JBSEAM-2917
Modified: branches/Seam_2_0/src/main/org/jboss/seam/Seam.java
===================================================================
--- branches/Seam_2_0/src/main/org/jboss/seam/Seam.java 2008-05-23 20:30:05 UTC (rev 8276)
+++ branches/Seam_2_0/src/main/org/jboss/seam/Seam.java 2008-05-24 10:09:54 UTC (rev 8277)
@@ -11,7 +11,9 @@
import static org.jboss.seam.util.EJB.STATELESS;
import static org.jboss.seam.util.EJB.name;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.persistence.Entity;
@@ -35,30 +37,28 @@
*/
public class Seam
{
-
private static final Map<Class, String> COMPONENT_NAME_CACHE = new ConcurrentHashMap<Class, String>();
- private static final Map<String, EjbDescriptor> EJB_DESCRIPTOR_CACHE = new ConcurrentHashMap<String, EjbDescriptor>();
+ private static final Map<Class, EjbDescriptor> EJB_DESCRIPTOR_CACHE = new ConcurrentHashMap<Class, EjbDescriptor>();
+ private static final Set<ClassLoader> CLASSLOADERS_LOADED = new HashSet<ClassLoader>();
- public static EjbDescriptor getEjbDescriptor(String className)
+ static EjbDescriptor getEjbDescriptor(Class clazz)
{
- EjbDescriptor info = EJB_DESCRIPTOR_CACHE.get(className);
+ EjbDescriptor info = EJB_DESCRIPTOR_CACHE.get(clazz);
if (info != null)
{
return info;
}
- else
+ else if (clazz.getClassLoader() == null ||
+ (clazz.getClassLoader() != null && !CLASSLOADERS_LOADED.contains(clazz.getClassLoader())))
{
- Map<String, EjbDescriptor> ejbDescriptors = new DeploymentDescriptor().getEjbDescriptors();
+ Map<Class, EjbDescriptor> ejbDescriptors = new DeploymentDescriptor(clazz).getEjbDescriptors();
EJB_DESCRIPTOR_CACHE.putAll(ejbDescriptors);
- return ejbDescriptors.get(className);
+ CLASSLOADERS_LOADED.add(clazz.getClassLoader());
+ return ejbDescriptors.get(clazz);
}
+
+ return null;
}
-
- // TODO Better impl
- static EjbDescriptor getEjbDescriptor(Class clazz)
- {
- return getEjbDescriptor(clazz.getName());
- }
/**
* Get the default scope
@@ -161,7 +161,7 @@
}
else
{
- EjbDescriptor ejbDescriptor = Seam.getEjbDescriptor(clazz.getName());
+ EjbDescriptor ejbDescriptor = Seam.getEjbDescriptor(clazz);
if (ejbDescriptor != null)
{
return ejbDescriptor.getBeanType() == ComponentType.ENTITY_BEAN ? clazz : null;
Modified: branches/Seam_2_0/src/main/org/jboss/seam/init/DeploymentDescriptor.java
===================================================================
--- branches/Seam_2_0/src/main/org/jboss/seam/init/DeploymentDescriptor.java 2008-05-23 20:30:05 UTC (rev 8276)
+++ branches/Seam_2_0/src/main/org/jboss/seam/init/DeploymentDescriptor.java 2008-05-24 10:09:54 UTC (rev 8277)
@@ -23,10 +23,16 @@
{
private static final LogProvider log = Logging.getLogProvider(Initialization.class);
- private Map<String, EjbDescriptor> ejbDescriptors = new HashMap<String, EjbDescriptor>();
+ private Map<Class, EjbDescriptor> ejbDescriptors = new HashMap<Class, EjbDescriptor>();
+ private Class componentClass;
- public DeploymentDescriptor()
+ public DeploymentDescriptor(Class clazz)
{
+ componentClass = clazz;
+ if (clazz.getClassLoader() == null) {
+ return;
+ }
+
try
{
InputStream ejbJarXml = Resources.getResourceAsStream("META-INF/ejb-jar.xml", null);
@@ -54,7 +60,7 @@
}
}
- public Map<String, EjbDescriptor> getEjbDescriptors()
+ public Map<Class, EjbDescriptor> getEjbDescriptors()
{
return ejbDescriptors;
}
@@ -197,6 +203,14 @@
protected void add(EjbDescriptor descriptor)
{
- ejbDescriptors.put(descriptor.getEjbClassName(), descriptor);
+ try
+ {
+ Class ejbClass = componentClass.getClassLoader().loadClass( descriptor.getEjbClassName() );
+ ejbDescriptors.put(ejbClass, descriptor);
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ log.warn("Could not load EJB class: " + descriptor.getEjbClassName());
+ }
}
}
More information about the seam-commits
mailing list