[jboss-cvs] jboss-seam/src/main/org/jboss/seam/init ...

Gavin King gavin at belmont.prod.atl2.jboss.com
Wed Aug 30 21:38:01 EDT 2006


  User: gavin   
  Date: 06/08/30 21:38:00

  Modified:    src/main/org/jboss/seam/init  Initialization.java
  Log:
  fixed ws
  
  Revision  Changes    Path
  1.85      +3 -524    jboss-seam/src/main/org/jboss/seam/init/Initialization.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Initialization.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/init/Initialization.java,v
  retrieving revision 1.84
  retrieving revision 1.85
  diff -u -b -r1.84 -r1.85
  --- Initialization.java	6 Aug 2006 10:11:47 -0000	1.84
  +++ Initialization.java	31 Aug 2006 01:38:00 -0000	1.85
  @@ -1,1046 +1,525 @@
   /*
  -
    * JBoss, Home of Professional Open Source
  -
    *
  -
    * Distributable under LGPL license.
  -
    * See terms of license at gnu.org.
  -
    */
  -
   package org.jboss.seam.init;
   
  -
  -
   import java.io.IOException;
  -
   import java.io.InputStream;
  -
   import java.util.ArrayList;
  -
   import java.util.Enumeration;
  -
   import java.util.HashMap;
  -
   import java.util.HashSet;
  -
   import java.util.List;
  -
   import java.util.Map;
  -
   import java.util.Properties;
  -
   import java.util.Set;
   
  -
  -
   import javax.servlet.ServletContext;
   
  -
  -
   import org.apache.commons.logging.Log;
  -
   import org.apache.commons.logging.LogFactory;
  -
   import org.dom4j.Document;
  -
   import org.dom4j.Element;
  -
   import org.dom4j.io.SAXReader;
  -
   import org.jboss.seam.Component;
  -
   import org.jboss.seam.ScopeType;
  -
   import org.jboss.seam.Seam;
  -
   import org.jboss.seam.annotations.Name;
  -
   import org.jboss.seam.annotations.Role;
  -
   import org.jboss.seam.annotations.Roles;
  -
   import org.jboss.seam.contexts.Context;
  -
   import org.jboss.seam.contexts.Contexts;
  -
   import org.jboss.seam.contexts.Lifecycle;
  -
   import org.jboss.seam.core.Actor;
  -
   import org.jboss.seam.core.ApplicationContext;
  -
   import org.jboss.seam.core.BusinessProcess;
  -
   import org.jboss.seam.core.BusinessProcessContext;
  -
   import org.jboss.seam.core.Conversation;
  -
   import org.jboss.seam.core.ConversationContext;
  -
   import org.jboss.seam.core.ConversationList;
  -
   import org.jboss.seam.core.ConversationStack;
  -
   import org.jboss.seam.core.EventContext;
  -
   import org.jboss.seam.core.Events;
  -
   import org.jboss.seam.core.FacesContext;
  -
   import org.jboss.seam.core.FacesMessages;
  -
   import org.jboss.seam.core.HttpError;
  -
   import org.jboss.seam.core.Init;
  -
   import org.jboss.seam.core.Interpolator;
  -
   import org.jboss.seam.core.IsUserInRole;
  -
   import org.jboss.seam.core.Jbpm;
  -
   import org.jboss.seam.core.Locale;
  -
   import org.jboss.seam.core.LocaleSelector;
  -
   import org.jboss.seam.core.ManagedJbpmContext;
  -
   import org.jboss.seam.core.Manager;
  -
   import org.jboss.seam.core.Messages;
  -
   import org.jboss.seam.core.PageContext;
  -
   import org.jboss.seam.core.Pageflow;
  -
   import org.jboss.seam.core.Pages;
  -
   import org.jboss.seam.core.PojoCache;
  -
   import org.jboss.seam.core.PooledTask;
  -
   import org.jboss.seam.core.PooledTaskInstanceList;
  -
   import org.jboss.seam.core.ProcessInstance;
  -
   import org.jboss.seam.core.Redirect;
  -
   import org.jboss.seam.core.RenderParameters;
  -
   import org.jboss.seam.core.ResourceBundle;
  -
   import org.jboss.seam.core.SessionContext;
  -
   import org.jboss.seam.core.StatelessContext;
  -
   import org.jboss.seam.core.Switcher;
  -
   import org.jboss.seam.core.TaskInstance;
  -
   import org.jboss.seam.core.TaskInstanceList;
  -
   import org.jboss.seam.core.TaskInstanceListForType;
  -
   import org.jboss.seam.core.Transition;
  -
   import org.jboss.seam.core.UiComponent;
  -
   import org.jboss.seam.core.UserPrincipal;
  -
   import org.jboss.seam.debug.Introspector;
  -
   import org.jboss.seam.deployment.Scanner;
  -
   import org.jboss.seam.jms.ManagedQueueSender;
  -
   import org.jboss.seam.jms.ManagedTopicPublisher;
  -
   import org.jboss.seam.jms.QueueConnection;
  -
   import org.jboss.seam.jms.QueueSession;
  -
   import org.jboss.seam.jms.TopicConnection;
  -
   import org.jboss.seam.jms.TopicSession;
  -
   import org.jboss.seam.remoting.RemotingConfig;
  -
   import org.jboss.seam.remoting.messaging.SubscriptionRegistry;
  -
   import org.jboss.seam.theme.Theme;
  -
   import org.jboss.seam.theme.ThemeSelector;
  -
   import org.jboss.seam.util.Conversions;
  -
   import org.jboss.seam.util.Naming;
  -
   import org.jboss.seam.util.Reflections;
  -
   import org.jboss.seam.util.Resources;
  -
   import org.jboss.seam.util.Transactions;
   
  -
   /**
  -
    * @author Gavin King
  -
    * @author <a href="mailto:theute at jboss.org">Thomas Heute</a>
  -
  - * @version $Revision: 1.84 $
  -
  + * @version $Revision: 1.85 $
    */
  -
   public class Initialization
  -
   {
  -
      public static final String COMPONENT_SUFFIX = ".component";
   
  -
  -
      private static final Log log = LogFactory.getLog(Initialization.class);
   
  -
  -
      private Map<String, Conversions.PropertyValue> properties = new HashMap<String, Conversions.PropertyValue>();
  -
      private ServletContext servletContext;
  -
      private boolean isScannerEnabled = true;
  -
      private List<ComponentDescriptor> componentDescriptors = new ArrayList<ComponentDescriptor>();
  -
      private Set<Class> installedComponents = new HashSet<Class>();
   
  -
  -
      public Initialization(ServletContext servletContext)
  -
      {
  -
         this.servletContext = servletContext;
  -
         initPropertiesFromXml();
  -
         initPropertiesFromServletContext();
  -
         initPropertiesFromResource();
  -
         initJndiProperties();
  -
      }
   
  -
  -
      private void initPropertiesFromXml()
  -
      {
  -
         InputStream stream = Resources.getResourceAsStream("/WEB-INF/components.xml", servletContext);
  -
         if (stream==null)
  -
         {
  -
            log.info("no components.xml file found");
  -
         }
  -
         else
  -
         {
  -
            log.info("reading components.xml");
  -
            try
  -
            {
  -
               Properties replacements = new Properties();
  -
               InputStream replaceStream = Resources.getResourceAsStream("components.properties");
  -
               if (replaceStream!=null) replacements.load( replaceStream );
   
  -
  -
               SAXReader saxReader = new SAXReader();
  -
               saxReader.setMergeAdjacentText(true);
  -
               Document doc = saxReader.read(stream);
   
  -
  -
               List<Element> componentElements = doc.getRootElement().elements("component");
  -
               for (Element component: componentElements)
  -
               {
  -
                  String installed = component.attributeValue("installed");
  -
                  if (installed==null || "true".equals( replace(installed, replacements) ) )
  -
                  {
  -
                     installComponent(component, replacements);
  -
                  }
  -
               }
   
  -
  -
               List<Element> factoryElements = doc.getRootElement().elements("factory");
  -
               for (Element factory: factoryElements)
  -
               {
  -
                  String scopeName = factory.attributeValue("scope");
  -
                  Init.instance().addFactory(
  -
                        factory.attributeValue("name"),
  -
                        factory.attributeValue("expression"),
  -
                        scopeName==null ?
  -
                              ScopeType.UNSPECIFIED :
  -
                              ScopeType.valueOf( scopeName.toUpperCase() )
  -
                     );
  -
               }
   
  -
  -
            }
  -
            catch (Exception e)
  -
            {
  -
               throw new RuntimeException("error while reading components.xml", e);
  -
            }
  -
         }
  -
      }
   
  -
  -
      private String replace(String value, Properties replacements)
  -
      {
  -
         if ( value.startsWith("@") )
  -
         {
  -
            value = replacements.getProperty( value.substring(1, value.length()-1) );
  -
         }
  -
         return value;
  -
      }
   
  -
  -
      private void installComponent(Element component, Properties replacements) throws ClassNotFoundException
  -
      {
  -
         String name = component.attributeValue("name");
  -
         String className = component.attributeValue("class");
  -
         String scopeName = component.attributeValue("scope");
  -
         ScopeType scope = scopeName==null ? null : ScopeType.valueOf(scopeName);
  -
         if (className!=null)
  -
         {
  -
            Class<?> clazz = Reflections.classForName(className);
  -
            if (name==null)
  -
            {
  -
               name = clazz.getAnnotation(Name.class).value();
  -
            }
  -
            componentDescriptors.add( new ComponentDescriptor(name, clazz, scope) );
  -
            installedComponents.add(clazz);
  -
         }
  -
         else if (name==null)
  -
         {
  -
            throw new IllegalArgumentException("must specify either class or name in components.xml");
  -
         }
   
  -
  -
         List<Element> props = component.elements("property");
  -
         for( Element prop: props )
  -
         {
  -
            String propName = prop.attributeValue("name");
  -
            if (propName==null)
  -
            {
  -
               throw new IllegalArgumentException("no name for property of component: " + name);
  -
            }
  -
            String qualifiedPropName = name + '.' + propName;
  -
            properties.put( qualifiedPropName, getPropertyValue(prop, qualifiedPropName, replacements) );
  -
         }
  -
      }
   
  -
  -
      private Conversions.PropertyValue getPropertyValue(Element prop, String propName, Properties replacements)
  -
      {
  -
         List<Element> keyElements = prop.elements("key");
  -
         List<Element> valueElements = prop.elements("value");
   
         Conversions.PropertyValue propertyValue;
  -
         if ( valueElements.isEmpty() && keyElements.isEmpty() )
  -
         {
  -
            propertyValue = new Conversions.FlatPropertyValue( trimmedText(prop, propName, replacements) );
  -
         }
  -
         else if ( keyElements.isEmpty() )
  -
         {
  -
            //a list-like structure
  -
            int len = valueElements.size();
  -
            String[] values = new String[len];
  -
            for (int i=0; i<len; i++)
  -
            {
  -
               values[i] = trimmedText( valueElements.get(i), propName, replacements );
  -
            }
  -
            propertyValue = new Conversions.MultiPropertyValue(values);
  -
         }
  -
         else
  -
         {
  -
            //a map-like structure
  -
            if ( valueElements.size()!=keyElements.size() )
  -
            {
  -
               throw new IllegalArgumentException("value elements must match key elements: " + propName);
  -
            }
  -
            Map<String, String> keyedValues = new HashMap<String, String>();
  -
            for (int i=0; i<keyElements.size(); i++)
  -
            {
  -
               String key = trimmedText( keyElements.get(i), propName, replacements );
  -
               String value = trimmedText( valueElements.get(i), propName, replacements );
  -
               keyedValues.put(key, value);
  -
  -
  -
            }
  -
            propertyValue = new Conversions.AssociativePropertyValue(keyedValues);
  -
         }
  -
         return propertyValue;
   
      }
   
  -
  -
      private String trimmedText(Element element, String propName, Properties replacements)
  -
      {
  -
         String text = element.getTextTrim();
  -
         if (text==null)
  -
         {
  -
            throw new IllegalArgumentException("property value must be specified in element body: " + propName);
  -
         }
  -
         return replace(text, replacements);
  -
      }
   
  -
  -
      public Initialization setProperty(String name, Conversions.PropertyValue value)
  -
      {
  -
         properties.put(name, value);
  -
         return this;
  -
      }
   
  -
  -
      public Initialization init()
  -
      {
  -
         log.info("initializing Seam");
  -
         Lifecycle.beginInitialization(servletContext);
  -
         Contexts.getApplicationContext().set(Component.PROPERTIES, properties);
  -
         addComponents();
  -
         Lifecycle.endInitialization();
  -
         log.info("done initializing Seam");
  -
         return this;
  -
      }
   
  -
  -
      private void initPropertiesFromServletContext()
  -
      {
  -
         Enumeration params = servletContext.getInitParameterNames();
  -
         while (params.hasMoreElements())
  -
         {
  -
            String name = (String) params.nextElement();
  -
            properties.put( name, new Conversions.FlatPropertyValue( servletContext.getInitParameter(name) ) );
  -
         }
  -
      }
   
  -
  -
      private void initPropertiesFromResource()
  -
      {
  -
         Properties props = loadFromResource("/seam.properties");
  -
         for (Map.Entry me: props.entrySet())
  -
         {
  -
            properties.put( (String) me.getKey(), new Conversions.FlatPropertyValue( (String) me.getValue() ) );
  -
         }
  -
      }
   
  -
  -
      private void initJndiProperties()
  -
      {
  -
         Properties jndiProperties = new Properties();
  -
         jndiProperties.putAll( loadFromResource("/jndi.properties") );
  -
         jndiProperties.putAll( loadFromResource("/seam-jndi.properties") );
  -
         Naming.setInitialContextProperties(jndiProperties);
  -
      }
   
  -
  -
      private static void initUserTransactionName(Properties properties)
  -
      {
  -
         String userTransactionName = properties.getProperty("jta.UserTransaction");
  -
         if (userTransactionName!=null) Transactions.setUserTransactionName( userTransactionName );
  -
      }
   
  -
  -
      private Properties loadFromResource(String resource)
  -
      {
  -
         Properties props = new Properties();
  -
         InputStream stream = Resources.getResourceAsStream(resource, servletContext);
  -
         if (stream!=null)
  -
         {
  -
            log.info("reading properties from: " + resource);
  -
            try
  -
            {
  -
               props.load(stream);
  -
            }
  -
            catch (IOException ioe)
  -
            {
  -
               log.error("could not read " + resource, ioe);
  -
            }
  -
            initUserTransactionName(props); //TODO: this is very fragile!!!
  -
         }
  -
         else
  -
         {
  -
            log.debug("not found: " + resource);
  -
         }
  -
         return props;
  -
      }
   
  -
  -
      protected void addComponents()
  -
      {
  -
         Context context = Contexts.getApplicationContext();
   
  -
  -
         addComponent( Init.class, context );
   
  -
  -
         //force instantiation of Init
  -
         Init init = (Init) Component.getInstance(Init.class, ScopeType.APPLICATION, true);
   
  -
  -
         addComponent( Pages.class, context);
  -
         addComponent( Events.class, context);
  -
         addComponent( Manager.class, context );
  -
         addComponent( Switcher.class, context );
  -
         addComponent( Redirect.class, context );
  -
         addComponent( HttpError.class, context );
  -
         addComponent( UserPrincipal.class, context );
  -
         addComponent( IsUserInRole.class, context );
  -
         addComponent( Conversation.class, context );
  -
         addComponent( ConversationList.class, context );
  -
         addComponent( ConversationStack.class, context );
  -
         addComponent( FacesContext.class, context );
  -
         addComponent( PageContext.class, context );
  -
         addComponent( EventContext.class, context );
  -
         addComponent( SessionContext.class, context );
  -
         addComponent( StatelessContext.class, context );
  -
         addComponent( ApplicationContext.class, context );
  -
         addComponent( ConversationContext.class, context );
  -
         addComponent( BusinessProcessContext.class, context );
  -
         addComponent( Locale.class, context );
  -
         addComponent( Messages.class, context );
  -
         addComponent( Theme.class, context);
  -
         addComponent( ThemeSelector.class, context);
  -
         addComponent( Interpolator.class, context );
  -
         addComponent( FacesMessages.class, context );
  -
         addComponent( ResourceBundle.class, context );
  -
         addComponent( LocaleSelector.class, context );
  -
         addComponent( UiComponent.class, context );
  -
         addComponent( RenderParameters.class, context );
  -
         addComponent( SubscriptionRegistry.class, context );
  -
         addComponent( RemotingConfig.class, context );
   
  -
         try
  -
         {
  -
            addComponent( PojoCache.class, context );
  -
         }
  -
         catch (NoClassDefFoundError ncdfe) {} //swallow
   
  -
  -
         if ( installedComponents.contains(Jbpm.class) )
  -
         {
  -
            init.setJbpmInstalled(true);
  -
         }
   
  -
  -
         if ( init.isDebug() )
  -
         {
  -
            addComponent( Introspector.class, context );
  -
            addComponent( org.jboss.seam.debug.Contexts.class, context );
  -
         }
   
  -
  -
         if ( init.isJbpmInstalled() )
  -
         {
  -
            addComponent( Actor.class, context);
  -
            addComponent( BusinessProcess.class, context );
  -
            addComponent( Pageflow.class, context );
  -
            addComponent( Transition.class, context);
  -
            addComponent( PooledTask.class, context );
  -
            addComponent( TaskInstance.class, context );
  -
            addComponent( ProcessInstance.class, context );
  -
            addComponent( TaskInstanceList.class, context );
  -
            addComponent( PooledTaskInstanceList.class, context );
  -
            addComponent( TaskInstanceListForType.class, context );
  -
            addComponent( ManagedJbpmContext.class, context );
  -
         }
   
  -
  -
         if ( installedComponents.contains(ManagedTopicPublisher.class) )
  -
         {
  -
            addComponent( TopicConnection.class, context );
  -
            addComponent( TopicSession.class, context );
  -
         }
   
  -
  -
         if ( installedComponents.contains(ManagedQueueSender.class) )
  -
         {
  -
            addComponent( QueueConnection.class, context );
  -
            addComponent( QueueSession.class, context );
  -
         }
   
  -
  -
         for ( ComponentDescriptor componentDescriptor : componentDescriptors )
  -
         {
  -
            addComponent( componentDescriptor, context );
  -
         }
   
  -
  -
         if (isScannerEnabled)
  -
         {
  -
            for ( Class clazz: new Scanner().getClasses() )
  -
            {
  -
               addComponent(clazz, context);
  -
               addComponentRoles(context, clazz);
  -
            }
  -
         }
   
  -
  -
      }
   
  -
  -
      private void addComponentRoles(Context context, Class<Object> componentClass) {
  -
         if ( componentClass.isAnnotationPresent(Role.class) )
  -
         {
  -
            Role role = componentClass.getAnnotation(Role.class);
  -
            ScopeType scope = Seam.getComponentRoleScope(componentClass, role);
  -
            addComponent( new ComponentDescriptor( role.name(), componentClass, scope), context );
  -
         }
  -
         if ( componentClass.isAnnotationPresent(Roles.class) )
  -
         {
  -
            Role[] roles =componentClass.getAnnotation(Roles.class).value();
  -
            for (Role role: roles)
  -
            {
  -
               ScopeType scope = Seam.getComponentRoleScope(componentClass, role);
  -
               addComponent( new ComponentDescriptor( role.name(), componentClass, scope), context );
  -
            }
  -
         }
  -
      }
   
  -
  -
      protected void addComponent(ComponentDescriptor descriptor, Context context)
  -
      {
  -
         String name = descriptor.getName();
  -
         String componentName = name + COMPONENT_SUFFIX;
   
  -
  -
         if ( log.isWarnEnabled() && context.isSet(componentName) )
  -
         {
  -
            log.warn("Component has been previously installed and is being redefined: " + name);
  -
         }
   
  -
  -
         Component component = new Component(
  -
               descriptor.getComponentClass(),
  -
               name,
  -
               descriptor.getScope()
  -
            );
  -
         context.set(componentName, component);
   
  -
  -
      }
   
  -
  -
      protected void addComponent(Class clazz, Context context)
  -
      {
  -
         addComponent( new ComponentDescriptor(clazz), context );
  -
      }
   
  -
  -
      public boolean isScannerEnabled()
  -
      {
  -
         return isScannerEnabled;
  -
      }
   
  -
  -
      public Initialization setScannerEnabled(boolean isScannerEnabled)
  -
      {
  -
         this.isScannerEnabled = isScannerEnabled;
  -
         return this;
  -
      }
   
  -
  -
      private static class ComponentDescriptor
  -
      {
  -
         private String name;
  -
         private Class componentClass;
  -
         private ScopeType scope;
   
  -
  -
         public ComponentDescriptor(String name, Class componentClass, ScopeType scope)
  -
         {
  -
            this.name = name;
  -
            this.componentClass = componentClass;
  -
            this.scope = scope;
  -
         }
  -
         public ComponentDescriptor(Class componentClass)
  -
         {
  -
            this.componentClass = componentClass;
  -
         }
   
  -
  -
         public String getName()
  -
         {
  -
            return name==null ? Seam.getComponentName(componentClass) : name;
  -
         }
  -
         public ScopeType getScope()
  -
         {
  -
            return scope==null ? Seam.getComponentScope(componentClass) : scope;
  -
         }
  -
         public Class getComponentClass()
  -
         {
  -
            return componentClass;
  -
         }
  -
      }
   
  -
  -
   }
  -
  
  
  



More information about the jboss-cvs-commits mailing list