[jboss-cvs] jboss-seam/src/main/org/jboss/seam ...
Gavin King
gavin.king at jboss.com
Wed Jun 20 22:29:38 EDT 2007
User: gavin
Date: 07/06/20 22:29:38
Modified: src/main/org/jboss/seam Seam.java
Log:
use the correct classloader for loading descriptors
Revision Changes Path
1.35 +97 -60 jboss-seam/src/main/org/jboss/seam/Seam.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Seam.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/Seam.java,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- Seam.java 20 Jun 2007 22:11:30 -0000 1.34
+++ Seam.java 21 Jun 2007 02:29:38 -0000 1.35
@@ -1,4 +1,4 @@
-//$Id: Seam.java,v 1.34 2007/06/20 22:11:30 gavin Exp $
+//$Id: Seam.java,v 1.35 2007/06/21 02:29:38 gavin Exp $
package org.jboss.seam;
import static org.jboss.seam.ComponentType.ENTITY_BEAN;
@@ -22,8 +22,8 @@
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.contexts.Lifecycle;
-import org.jboss.seam.init.DeploymentDescriptorInfo;
-import org.jboss.seam.init.DeploymentDescriptorInfo.EjbInfo;
+import org.jboss.seam.init.EjbDescriptor;
+import org.jboss.seam.init.DeploymentDescriptor;
import org.jboss.seam.util.Strings;
import org.jboss.seam.web.Session;
@@ -35,9 +35,24 @@
*/
public class Seam
{
- private static DeploymentDescriptorInfo deploymentInfo = new DeploymentDescriptorInfo();
private static final Map<Class, String> COMPONENT_NAME_CACHE = new ConcurrentHashMap<Class, String>();
+ private static final Map<Class, EjbDescriptor> EJB_DESCRIPTOR_CACHE = new ConcurrentHashMap<Class, EjbDescriptor>();
+
+ private static EjbDescriptor getEjbDescriptor(Class clazz)
+ {
+ EjbDescriptor info = EJB_DESCRIPTOR_CACHE.get(clazz);
+ if (info != null)
+ {
+ return info;
+ }
+ else
+ {
+ Map<Class, EjbDescriptor> ejbDescriptors = new DeploymentDescriptor(clazz).getEjbDescriptors();
+ EJB_DESCRIPTOR_CACHE.putAll(ejbDescriptors);
+ return ejbDescriptors.get(clazz);
+ }
+ }
/**
* Get the default scope
@@ -66,22 +81,34 @@
*/
public static ComponentType getComponentType(Class<?> clazz)
{
- if (clazz.isAnnotationPresent(STATEFUL)) {
+ if ( clazz.isAnnotationPresent(STATEFUL) )
+ {
return STATEFUL_SESSION_BEAN;
- } else if (clazz.isAnnotationPresent(STATELESS)) {
+ }
+ else if ( clazz.isAnnotationPresent(STATELESS) )
+ {
return STATELESS_SESSION_BEAN;
- } else if (clazz.isAnnotationPresent(MESSAGE_DRIVEN)) {
+ }
+ else if ( clazz.isAnnotationPresent(MESSAGE_DRIVEN) )
+ {
return MESSAGE_DRIVEN_BEAN;
- } else if (clazz.isAnnotationPresent(Entity.class)) {
+ }
+ else if ( clazz.isAnnotationPresent(Entity.class) )
+ {
return ENTITY_BEAN;
- } else {
- EjbInfo info = deploymentInfo.getBeanByClass(clazz.getName());
- if (info != null) {
- return info.getBeanType();
}
-
+ else
+ {
+ EjbDescriptor ejbDescriptor = getEjbDescriptor(clazz);
+ if (ejbDescriptor == null)
+ {
return JAVA_BEAN;
}
+ else
+ {
+ return ejbDescriptor.getBeanType();
+ }
+ }
}
/**
@@ -115,31 +142,30 @@
/**
* Get the bean class from a container-generated proxy
- * class BROKEN!!!!!
+ * class
*/
- /*public static Class getBeanClass(Class<?> clazz)
+ public static Class getEntityClass(Class<?> clazz)
{
while ( clazz!=null && !Object.class.equals(clazz) )
{
- Name name = clazz.getAnnotation(Name.class);
- if ( name!=null ) return clazz;
- clazz = clazz.getSuperclass();
+ if ( clazz.isAnnotationPresent(Entity.class) )
+ {
+ return clazz;
}
- return null;
- }*/
-
- /**
- * Get the bean class from a container-generated proxy
- * class
- */
- public static Class getEntityClass(Class<?> clazz)
+ else
{
- while ( clazz!=null && !Object.class.equals(clazz) )
+ EjbDescriptor ejbDescriptor = EJB_DESCRIPTOR_CACHE.get(clazz);
+ if ( ejbDescriptor!=null )
+ {
+ return ejbDescriptor.getBeanType()==ComponentType.ENTITY_BEAN ?
+ clazz : null;
+ }
+ else
{
- Entity name = clazz.getAnnotation(Entity.class);
- if ( name!=null ) return clazz;
clazz = clazz.getSuperclass();
}
+ }
+ }
return null;
}
@@ -162,39 +188,51 @@
public static String getEjbName(Class<?> clazz)
{
- switch (getComponentType(clazz)) {
+ switch ( getComponentType(clazz) )
+ {
case ENTITY_BEAN:
case JAVA_BEAN:
return null;
case STATEFUL_SESSION_BEAN:
- if (clazz.isAnnotationPresent(STATEFUL)) {
- String statefulName = name(clazz.getAnnotation(STATEFUL));
- return statefulName.equals("") ? unqualifyClassName(clazz) : statefulName;
- } else {
- EjbInfo info = deploymentInfo.getBeanByClass(clazz.getName());
- return info.getName();
- }
+ return clazz.isAnnotationPresent(STATEFUL) ?
+ getStatefulEjbName(clazz) : getEjbNameFromDescriptor(clazz);
case STATELESS_SESSION_BEAN:
- if (clazz.isAnnotationPresent(STATELESS)) {
- String statelessName = name(clazz.getAnnotation(STATELESS));
- return statelessName.equals("") ? unqualifyClassName(clazz) : statelessName;
- } else {
- EjbInfo info = deploymentInfo.getBeanByClass(clazz.getName());
- return info.getName();
- }
+ return clazz.isAnnotationPresent(STATELESS) ?
+ getStatelessEjbName(clazz) : getEjbNameFromDescriptor(clazz);
case MESSAGE_DRIVEN_BEAN:
- if (clazz.isAnnotationPresent(MESSAGE_DRIVEN)) {
- String mdName = name(clazz.getAnnotation(MESSAGE_DRIVEN));
- return mdName.equals("") ? unqualifyClassName(clazz) : mdName;
- } else {
- EjbInfo info = deploymentInfo.getBeanByClass(clazz.getName());
- return info.getName();
- }
+ return clazz.isAnnotationPresent(MESSAGE_DRIVEN) ?
+ getMessageDrivenEjbName(clazz) : getEjbNameFromDescriptor(clazz);
default:
throw new IllegalArgumentException();
}
}
- private static String unqualifyClassName(Class<?> clazz) {
+
+ private static String getMessageDrivenEjbName(Class<?> clazz)
+ {
+ String mdName = name( clazz.getAnnotation(MESSAGE_DRIVEN) );
+ return mdName.equals("") ? unqualifyClassName(clazz) : mdName;
+ }
+
+ private static String getStatelessEjbName(Class<?> clazz)
+ {
+ String statelessName = name( clazz.getAnnotation(STATELESS) );
+ return statelessName.equals("") ? unqualifyClassName(clazz) : statelessName;
+ }
+
+ private static String getStatefulEjbName(Class<?> clazz)
+ {
+ String statefulName = name( clazz.getAnnotation(STATEFUL) );
+ return statefulName.equals("") ? unqualifyClassName(clazz) : statefulName;
+ }
+
+ private static String getEjbNameFromDescriptor(Class<?> clazz)
+ {
+ EjbDescriptor ejbDescriptor = getEjbDescriptor(clazz);
+ return ejbDescriptor==null ? null : ejbDescriptor.getEjbName();
+ }
+
+ private static String unqualifyClassName(Class<?> clazz)
+ {
return Strings.unqualify( Strings.unqualify( clazz.getName() ), '$' );
}
@@ -269,11 +307,10 @@
return (pkg != null ? pkg.getImplementationVersion() : null);
}
-
-
-
public static void clearComponentNameCache()
{
COMPONENT_NAME_CACHE.clear();
+ EJB_DESCRIPTOR_CACHE.clear();
}
+
}
More information about the jboss-cvs-commits
mailing list