[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