User: salborini
  Date: 00/08/11 17:40:45

  Modified:    src/main/org/jboss/ejb Application.java Container.java
                        ContainerFactory.java
  Log:
  Modifications to use the new metadata package
  
  Revision  Changes    Path
  1.6       +3 -3      jboss/src/main/org/jboss/ejb/Application.java
  
  Index: Application.java
  ===================================================================
  RCS file: /products/cvs/ejboss/jboss/src/main/org/jboss/ejb/Application.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Application.java  2000/07/06 20:36:44     1.5
  +++ Application.java  2000/08/12 00:40:44     1.6
  @@ -20,7 +20,7 @@
    *   @see Container
    *   @see ContainerFactory
    *   @author Rickard �berg ([EMAIL PROTECTED])
  - *   @version $Revision: 1.5 $
  + *   @version $Revision: 1.6 $
    */
   public class Application
        implements Service
  @@ -50,7 +50,7 @@
         */
      public void addContainer(Container con)
      {
  -       containers.put(con.getMetaData().getEjbName(), con);
  +       containers.put(con.getBeanMetaData().getEjbName(), con);
           con.setApplication(this);
      }
      
  @@ -62,7 +62,7 @@
         */
      public void removeContainer(Container con)
      {
  -      containers.remove(con.getMetaData().getEjbName());
  +      containers.remove(con.getBeanMetaData().getEjbName());
      }
      
   
  
  
  
  1.22      +48 -207   jboss/src/main/org/jboss/ejb/Container.java
  
  Index: Container.java
  ===================================================================
  RCS file: /products/cvs/ejboss/jboss/src/main/org/jboss/ejb/Container.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- Container.java    2000/08/07 18:42:25     1.21
  +++ Container.java    2000/08/12 00:40:44     1.22
  @@ -39,31 +39,20 @@
   import javax.transaction.TransactionManager;
   import javax.sql.DataSource;
   
  -import javax.swing.tree.TreeModel;
  -import javax.swing.tree.DefaultMutableTreeNode;
  -import javax.swing.JCheckBox;
  -
  -import org.jboss.ejb.deployment.jBossEnterpriseBean;
  -import com.dreambean.ejx.ejb.EnvironmentEntry;
  -import org.jboss.ejb.deployment.jBossEjbJar;
  -import org.jboss.ejb.deployment.jBossEjbReference;
  -import org.jboss.ejb.deployment.jBossResourceReference;
  -import org.jboss.ejb.deployment.ResourceManagers;
  -import org.jboss.ejb.deployment.ResourceManager;
  -import org.jboss.ejb.deployment.JDBCResource;
  -import org.jboss.ejb.deployment.URLResource;
   import org.jboss.logging.Logger;
  -import org.jboss.metadata.BeanMetaData;
   import org.jboss.system.EJBSecurityManager;
   import org.jboss.system.RealmMapping;
   
  +import org.jboss.metadata.BeanMetaData;
  +import org.jboss.metadata.EnvEntryMetaData;
  +import org.jboss.metadata.EjbRefMetaData;
  +import org.jboss.metadata.ResourceRefMetaData;
  +import org.jboss.metadata.ApplicationMetaData;
  +
   import org.jnp.interfaces.Naming;
   import org.jnp.interfaces.java.javaURLContextFactory;
   import org.jnp.server.NamingServer;
   
  -import com.dreambean.ejx.ejb.AssemblyDescriptor;
  -import com.dreambean.ejx.ejb.MethodPermission;
  -
   /**
    *    This is the base class for all EJB-containers in jBoss. A Container
    *    functions as the central hub of all metadata and plugins. Through this
  @@ -78,7 +67,7 @@
    *   @see ContainerFactory
    *   @author Rickard �berg ([EMAIL PROTECTED])
    *   @author <a href="[EMAIL PROTECTED]">Marc Fleury</a>
  - *   @version $Revision: 1.21 $
  + *   @version $Revision: 1.22 $
    */
   public abstract class Container
   {
  @@ -92,12 +81,10 @@
       // This is the classloader of this container. All classes and resources that
       // the bean uses will be loaded from here. By doing this we make the bean 
re-deployable
      protected ClassLoader classLoader;
  -
  -    // This is the jBoss-specific metadata. Note that it extends the generic EJB 
1.1 class from EJX
  -   protected jBossEnterpriseBean metaData;
   
  -   // This is the assembly descriptor information
  -   protected AssemblyDescriptor assemblyDescriptor;
  +    // This is the new metadata. it includes information from both ejb-jar and 
jboss.xml
  +     // the metadata for the application can be accessed trough 
metaData.getApplicationMetaData()
  +   protected BeanMetaData metaData;
   
       // This is the Home interface class
      protected Class homeInterface;
  @@ -117,9 +104,6 @@
      // This is the realm mapping
      protected RealmMapping rm;
   
  -   // This is the new MetaData construct
  -   protected BeanMetaData newMetaData;
  -
      // This is a cache for method permissions
      private HashMap methodPermissionsCache = new HashMap();
   
  @@ -219,7 +203,7 @@
        *
        * @param   metaData
        */
  -    public void setMetaData(jBossEnterpriseBean metaData)
  +    public void setBeanMetaData(BeanMetaData metaData)
       {
           this.metaData = metaData;
       }
  @@ -229,151 +213,25 @@
        *
        * @return metaData;
        */
  -    public jBossEnterpriseBean getMetaData()
  +    public BeanMetaData getBeanMetaData()
       {
           return metaData;
       }
   
  -    /**
  -     * Sets the assembly descriptor for this container. The meta data consists of 
the
  -     * properties found in the XML descriptors.
  -     *
  -     * @param   assemblyDescriptor
  -     */
  -    public void setAssemblyDescriptor(AssemblyDescriptor assemblyDescriptor)
  -    {
  -        this.assemblyDescriptor = assemblyDescriptor;
  -    }
  -
  -    /**
  -     * Returns the assembly descriptor of this container.
  -     *
  -     * @return assemblyDescriptor;
  -     */
  -    public AssemblyDescriptor getAssemblyDescriptor()
  -    {
  -        return assemblyDescriptor;
  -    }
  -
  -    private void addRoles( Collection roles, Set permissions )
  -    {
  -      Iterator iter = roles.iterator();
  -      while (iter.hasNext())
  -      {
  -        JCheckBox checkBox = (JCheckBox) iter.next();
  -        if (checkBox.isSelected())
  -          permissions.add( checkBox.getLabel() );
  -      }
  -    }
  -
       /**
  -     * Returns the permissions for a method.
  +     * Returns the permissions for a method. (a set of roles)
        *
        * @return assemblyDescriptor;
        */
       public Set getMethodPermissions( Method m, boolean home )
       {
         Set permissions = (Set) methodPermissionsCache.get( m );
  -      if (permissions != null)
  -        return permissions;
  -      permissions = new HashSet();
  -
  -      Iterator iterPermissions = assemblyDescriptor.getMethodPermissions();
  -      // go fishing in ejx's tree to build method permissions
  -      while (iterPermissions.hasNext())
  -      {
  -        MethodPermission methodPermission =
  -          (MethodPermission) iterPermissions.next();
  -        Collection roles = methodPermission.getRoles();
  -        TreeModel model = methodPermission.getMethods();
  -        int count = model.getChildCount( model.getRoot() );
  -        // look at the specific grants in a method permission
  -        boolean rolesAdded_shouldBreak = false; // if we're in an inner loop
  -        for (int iter=0; iter<count; iter++)
  -        {
  -          DefaultMutableTreeNode beannode =
  -            (DefaultMutableTreeNode) model.getChild( model.getRoot(), iter );
  -          com.dreambean.ejx.ejb.Method bean =
  -            (com.dreambean.ejx.ejb.Method)beannode.getUserObject();
  -
  -          // check if this is the bean under consideration
  -          if (!bean.getEjbName().equals( metaData.getEjbName() ))
  -            continue;
  -
  -          // see if everything in the bean is selected regardless of interface
  -          if (bean.isSelected())
  -          {
  -            addRoles( roles, permissions );
  -            break;
  -          }
  -
  -          // depends on ejb ordering home then remote (could check name)
  -          DefaultMutableTreeNode interfaceNode = (DefaultMutableTreeNode)
  -            beannode.getChildAt( home ? 0 : 1 );
  -          com.dreambean.ejx.ejb.Method beaninterface =
  -            (com.dreambean.ejx.ejb.Method) interfaceNode.getUserObject();
  -          // see if everything in the interface is selected regardless of method
  -          if (beaninterface.isSelected())
  -          {
  -            addRoles( roles, permissions );
  -            break;
  -          }
  -
  -          // check the method
  -          Enumeration enumMethods = interfaceNode.children();
  -          while (enumMethods.hasMoreElements())
  -          {
  -            DefaultMutableTreeNode methodNode =
  -              (DefaultMutableTreeNode) enumMethods.nextElement();
  -            com.dreambean.ejx.ejb.Method beanmethod =
  -              (com.dreambean.ejx.ejb.Method) methodNode.getUserObject();
  -
  -            // name doesn't match
  -            if (!beanmethod.getMethodName().equals( m.getName() ))
  -              continue;
  -
  -            String[] descriptorParams = beanmethod.getParams();
  -            Class[] declaredParams = m.getParameterTypes();
  -
  -            // different number of parameters
  -            if (descriptorParams.length != declaredParams.length)
  -              continue;
  -
  -            boolean paramDoesntMatch = false;
  -            for (int iterParams=0; iterParams<descriptorParams.length; iterParams++)
  -            {
  -              if (!descriptorParams[iterParams].equals( 
declaredParams[iterParams].getName() ))
  -              {
  -                paramDoesntMatch = true;
  -                break;
  -              }
  -            }
  -            if (paramDoesntMatch)
  -              continue;
  -
  -            if (beanmethod.isSelected())
  -            {
  -              addRoles( roles, permissions );
  -              rolesAdded_shouldBreak = true; // outer loop
  -              // (could also use label)
  -            }
  -            break; // we've already found the method
  -          }
  -          if (rolesAdded_shouldBreak)
  -            break;
  -        }
  -      }
  -      methodPermissionsCache.put( m, permissions );
  -      return permissions;
  -    }
  -
  -    // the following two methods use the new metadata structures from
  -    // package org.jboss.metadata
  -    public void setBeanMetaData(BeanMetaData metaData) {
  -        newMetaData = metaData;
  -    }
  -    public BeanMetaData getBeanMetaData() {
  -        return newMetaData;
  +      if (permissions == null) {
  +                     permissions = 
getBeanMetaData().getMethodPermissions(m.getName(), m.getParameterTypes(), !home);
  +                     methodPermissionsCache.put(m, permissions);
  +       }
  +       return permissions;
  +       
       }
   
       /**
  @@ -497,10 +355,10 @@
   
             // Bind environment properties
             {
  -             Iterator enum = getMetaData().getEnvironmentEntries();
  +             Iterator enum = getBeanMetaData().getEnvironmentEntries();
                while(enum.hasNext())
                {
  -                EnvironmentEntry entry = (EnvironmentEntry)enum.next();
  +                EnvEntryMetaData entry = (EnvEntryMetaData)enum.next();
                   if (entry.getType().equals("java.lang.Integer"))
                   {
                      bind(ctx, entry.getName(), new Integer(entry.getValue()));
  @@ -533,62 +391,48 @@
   
             // Bind EJB references
             {
  -             Iterator enum = getMetaData().getEjbReferences();
  +             Iterator enum = getBeanMetaData().getEjbReferences();
                while(enum.hasNext())
                {
  -
  -                jBossEjbReference ref = (jBossEjbReference)enum.next();
  -                System.out.println("Binding an EJBReference "+ref);
   
  -                Name n = ctx.getNameParser("").parse(ref.getLink());
  +                EjbRefMetaData ref = (EjbRefMetaData)enum.next();
  +                System.out.println("Binding an EJBReference "+ref.getName());
   
  -                if (!ref.getJndiName().equals(""))
  +                if (ref.getLink() != null)
                   {
                      // External link
  -                   Logger.debug("Binding "+ref.getName()+" to external JNDI source: 
"+ref.getJndiName());
  -                   bind(ctx, ref.getName(), new LinkRef(ref.getJndiName()));
  +                   Logger.debug("Binding "+ref.getName()+" to external JNDI source: 
"+ref.getLink());
  +                   bind(ctx, ref.getName(), new LinkRef(ref.getLink()));
                   }
                   else
                   {
                      // Internal link
  -                   Logger.debug("Bind "+ref.getName() +" to "+ref.getLink());
  -
  -                        final Container con = 
getApplication().getContainer(ref.getLink());
  -
  -                        // Use Reference to link to ensure lazyloading.
  -                        // Otherwise we might try to get EJBHome from not yet 
initialized container
  -                        // will would result in nullpointer exception
  -                        RefAddr refAddr = new RefAddr("EJB")
  -                        {
  -                            public Object getContent()
  -                            {
  -                                 return con;
  -                            }
  -                        };
  -                        Reference reference = new 
Reference("javax.ejb.EJBObject",refAddr, new 
EjbReferenceFactory().getClass().getName(), null);
  -
  -                        bind(ctx, ref.getName(), reference);
  +                   String link = 
getBeanMetaData().getApplicationMetaData().getJndiFromHome(ref.getHome());
  +                                Logger.debug("Binding "+ref.getName()+" to internal 
JNDI source: "+link);
  +                   bind(ctx, ref.getName(), new LinkRef(link));
                   }
                }
             }
   
             // Bind resource references
             {
  -             Iterator enum = getMetaData().getResourceReferences();
  +             Iterator enum = getBeanMetaData().getResourceReferences();
                
                // let's play guess the cast game ;)  New metadata should fix this.
  -             ResourceManagers rms = 
((jBossEjbJar)getMetaData().getBeanContext().getBeanContext()).getResourceManagers();
  +                      ApplicationMetaData application = 
getBeanMetaData().getApplicationMetaData();
  +                      
                while(enum.hasNext())
                {
  -                jBossResourceReference ref = (jBossResourceReference)enum.next();
  +                ResourceRefMetaData ref = (ResourceRefMetaData)enum.next();
   
  -                ResourceManager rm = rms.getResourceManager(ref.getResourceName());
  -
  -                    if (rm == null)
  -                    {
  -                        // Try to locate defaults
  -                        if (ref.getType().equals("javax.sql.DataSource"))
  -                        {
  +                String resourceName = ref.getResourceName();
  +                             String finalName = 
application.getResourceByName(resourceName);
  +                             
  +                             if (finalName == null) {
  +                                     // the application assembler did not provide a 
resource manager
  +                                     // if the type is javax.sql.Datasoure we try 
to find default
  +                                     
  +                                     if 
(ref.getType().equals("javax.sql.DataSource")) {
                               // Go through JNDI and look for DataSource - use the 
first one
                               Context dsCtx = new InitialContext();
                               NamingEnumeration list = dsCtx.list("");
  @@ -602,8 +446,7 @@
                                       {
                                           // Found it!!
                                           Logger.log("Using default 
DataSource:"+pair.getName());
  -                                        rm = new JDBCResource();
  -                                        
((JDBCResource)rm).setJndiName(pair.getName());
  +                                        finalName = pair.getName();
                                           list.close();
                                           break;
                                       }
  @@ -617,25 +460,23 @@
   
                           // Default failed? Warn user and move on
                           // POTENTIALLY DANGEROUS: should this be a critical error?
  -                        if (rm == null)
  +                        if (finalName == null)
                           {
                               Logger.warning("No resource manager found for 
"+ref.getResourceName());
                               continue;
                           }
                       }
   
  -                if (rm.getType().equals("javax.sql.DataSource"))
  +                if (ref.getType().equals("javax.sql.DataSource"))
                   {
                      // Datasource bindings
  -                   JDBCResource res = (JDBCResource)rm;
  -                   bind(ctx, ref.getName(), new LinkRef(res.getJndiName()));
  -                } else if (rm.getType().equals("java.net.URL"))
  +                   bind(ctx, ref.getRefName(), new LinkRef(finalName));
  +                } else if (ref.getType().equals("java.net.URL"))
                   {
                      // URL bindings
                      try
                      {
  -                      URLResource res = (URLResource)rm;
  -                      bind(ctx, ref.getName(), new URL(res.getUrl()));
  +                      bind(ctx, ref.getRefName(), new URL(finalName));
                      } catch (MalformedURLException e)
                      {
                         throw new NamingException("Malformed URL:"+e.getMessage());
  
  
  
  1.28      +99 -126   jboss/src/main/org/jboss/ejb/ContainerFactory.java
  
  Index: ContainerFactory.java
  ===================================================================
  RCS file: /products/cvs/ejboss/jboss/src/main/org/jboss/ejb/ContainerFactory.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- ContainerFactory.java     2000/08/06 21:35:59     1.27
  +++ ContainerFactory.java     2000/08/12 00:40:44     1.28
  @@ -32,16 +32,6 @@
   import javax.management.ObjectName;
   import javax.transaction.TransactionManager;
   
  -import org.jboss.ejb.deployment.jBossEjbJar;
  -import org.jboss.ejb.deployment.jBossFileManager;
  -import org.jboss.ejb.deployment.jBossFileManagerFactory;
  -import org.jboss.ejb.deployment.jBossEnterpriseBean;
  -import org.jboss.ejb.deployment.jBossEnterpriseBeans;
  -import org.jboss.ejb.deployment.jBossSession;
  -import org.jboss.ejb.deployment.jBossEntity;
  -import org.jboss.ejb.deployment.ContainerConfiguration;
  -import org.jboss.ejb.deployment.ContainerConfigurations;
  -
   import org.jboss.logging.Log;
   import org.jboss.logging.ConsoleLogging;
   import org.jboss.logging.ConsoleLoggingMBean;
  @@ -58,6 +48,15 @@
   import org.jboss.system.EJBSecurityManager;
   import org.jboss.system.RealmMapping;
   
  +import org.jboss.metadata.ApplicationMetaData;
  +import org.jboss.metadata.BeanMetaData;
  +import org.jboss.metadata.SessionMetaData;
  +import org.jboss.metadata.EntityMetaData;
  +import org.jboss.metadata.ConfigurationMetaData;
  +import org.jboss.metadata.XmlLoadable;
  +import org.jboss.metadata.XmlFileLoader;
  +
  +
   /**
   *   A ContainerFactory is used to deploy EJB applications. It can be given a URL to
   *  an EJB-jar or EJB-JAR XML file, which will be used to instantiate containers and 
make
  @@ -68,7 +67,7 @@
   *   @author <a href="mailto:[EMAIL PROTECTED]">Marc Fleury</a>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Juha Lindfors</a>
   *
  -*   @version $Revision: 1.27 $
  +*   @version $Revision: 1.28 $
   */
   public class ContainerFactory
        extends org.jboss.util.ServiceMBeanSupport
  @@ -225,8 +224,27 @@
                        // Check if already deployed -> undeploy first, this is 
re-deploy
                        if (deployments.containsKey(url))
                                undeploy(url);
  +
  +            
  +                     app.setURL(url);
   
  -            // Check validity
  +                     log.log("Deploying:"+url);
  +            
  +                     // Create the ClassLoader for this application
  +                     // TODO : the ClassLoader should come from the JMX manager if 
we want to be able to share it (tomcat)
  +                     ClassLoader cl = new URLClassLoader(new URL[] { url }, 
Thread.currentThread().getContextClassLoader());
  +
  +                     // Create a file loader with which to load the files
  +                     XmlFileLoader efm = new XmlFileLoader();
  +
  +                     // the file manager gets its file from the classloader
  +                 efm.setClassLoader(cl);
  +
  +                     // Load XML
  +                     ApplicationMetaData metaData = efm.load();
  +
  +            
  +                     // Check validity
               Log.setLog(new Log("Verifier"));
               
               // wrapping this into a try - catch block to prevent errors in
  @@ -248,7 +266,7 @@
                       
                       Log.getLog().log("Verifying " + url);
                       
  -                    verifier.verify(url);
  +                    verifier.verify(url, metaData);
                   }
               }
               catch (Throwable t) {
  @@ -258,51 +276,21 @@
               // unset verifier log
               Log.unsetLog();
               
  -            
  -                     app.setURL(url);
  -
  -                     log.log("Deploying:"+url);
  -
  -                     // Create a file manager with which to load the files
  -                     jBossFileManagerFactory fact = new jBossFileManagerFactory();
  -                     jBossFileManager efm = 
(jBossFileManager)fact.createFileManager();
  -
  -                     // Setup beancontext
  -                     BeanContextServicesSupport beanCtx = new 
BeanContextServicesSupport();
  -                     beanCtx.add(Beans.instantiate(getClass().getClassLoader(), 
"com.dreambean.ejx.xml.ProjectX"));
  -                     beanCtx.add(efm);
  -
  -                     // Load XML
  -                     jBossEjbJar jar;
  -                     if (url.getProtocol().startsWith("file"))
  -                     {
  -                             // This will copy the jar first so it isn't locked by 
the CL
  -                             efm.load(new File(url.getFile()));
  -                             jar = efm.getEjbJar();
  -                     }
  -                     else
  -                     {
  -                             jar = efm.load(url);
  -                     }
   
  -                     // Create classloader for this application
  -//                   ClassLoader cl = new EJBClassLoader(new URL[] {url}, null, 
jar.isSecure());
  -                     ClassLoader cl = efm.getClassLoader();
  -
                        // Get list of beans for which we will create containers
  -                     Iterator beans = jar.getEnterpriseBeans().iterator();
  +                     Iterator beans = metaData.getEnterpriseBeans();
   
                        // Deploy beans
                        Context ctx = new InitialContext();
                        while(beans.hasNext())
                        {
  -                             jBossEnterpriseBean bean = 
(jBossEnterpriseBean)beans.next();
  +                             BeanMetaData bean = (BeanMetaData)beans.next();
   
                                log.log("Deploying "+bean.getEjbName());
   
  -                             if (bean instanceof jBossSession) // Is session?
  +                             if (bean.isSession()) // Is session?
                                {
  -                                     if 
(((jBossSession)bean).getSessionType().equals("Stateless")) // Is stateless?
  +                                     if (((SessionMetaData)bean).isStateless()) // 
Is stateless?
                                        {
                                                // Create container
                                                StatelessSessionContainer container = 
new StatelessSessionContainer();
  @@ -311,43 +299,35 @@
                                                container.setClassLoader(new 
BeanClassLoader(cl));
   
                                                // Set metadata
  -                                             container.setMetaData(bean);
  -
  -                        // use the new metadata classes in org.jboss.metadata
  -                        
container.setBeanMetaData(efm.getMetaData().getBean(bean.getEjbName()));
  +                                             container.setBeanMetaData(bean);
   
  -            // set assembly descriptor info
  -            container.setAssemblyDescriptor(jar.getAssemblyDescriptor() );
  -
  +                                             // get the container configuration for 
this bean
  +                                             // a default configuration is now 
always provided
  +                                             ConfigurationMetaData conf = 
bean.getContainerConfiguration();
  +                                             
                                                // Set transaction manager
  -                                             
container.setTransactionManager((TransactionManager)new 
InitialContext().lookup("TransactionManager"));
  -
  +                                             
container.setTransactionManager((TransactionManager)cl.loadClass(conf.getTransactionManager()).newInstance());
  +                        
                                                // Set security manager (should be 
chosen based on container config)
                                                
container.setSecurityManager((EJBSecurityManager)new 
InitialContext().lookup("EJBSecurityManager"));
  -
  -            // Set realm mapping (should be chosen based on container config)
  -            container.setRealmMapping( (RealmMapping)new 
InitialContext().lookup("SimpleRealmMapping"));
   
  -                                             // Get container configuration
  -                                             ContainerConfiguration conf = 
bean.getContainerConfiguration();
  -
  -                                             // Make sure we have a default 
configuration
  -                                             if (conf == null)
  -                                             {
  -                                                     log.warning("No configuration 
chosen. Using default configuration");
  -
  -                                                     // Get the container default 
configuration
  -                                                     conf = 
jar.getContainerConfigurations().getContainerConfiguration(DEFAULT_STATELESS_CONFIGURATION);
  -
  -                                                     // Make sure this bean knows 
the configuration he is using
  -                                                     
bean.setConfigurationName(DEFAULT_STATELESS_CONFIGURATION);
  -                                             }
  +                                 // Set realm mapping (should be chosen based on 
container config)
  +                             container.setRealmMapping( (RealmMapping)new 
InitialContext().lookup("SimpleRealmMapping"));
   
                                                // Set container invoker
  -                                             
container.setContainerInvoker((ContainerInvoker)cl.loadClass(conf.getContainerInvoker()).newInstance());
  +                                             ContainerInvoker ci = 
(ContainerInvoker)cl.loadClass(conf.getContainerInvoker()).newInstance();
  +                                             if (ci instanceof XmlLoadable) {
  +                                                     // the container invoker can 
load its configuration from the jboss.xml element
  +                                                     
((XmlLoadable)ci).importXml(conf.getContainerInvokerConf());
  +                                             }
  +                                             container.setContainerInvoker(ci);
   
                                                // Set instance pool
  -                                             
container.setInstancePool((InstancePool)cl.loadClass(conf.getInstancePool()).newInstance());
  +                                             InstancePool ip = 
(InstancePool)cl.loadClass(conf.getInstancePool()).newInstance();
  +                                         if (ip instanceof XmlLoadable) {
  +                                                     
((XmlLoadable)ip).importXml(conf.getContainerPoolConf());
  +                                             }
  +                                             container.setInstancePool(ip);
   
                                                // Create interceptors
   
  @@ -363,10 +343,6 @@
                                                app.addContainer(container);
                                        } else // Stateful
                                        {
  -                                             boolean implemented = false;
  -
  -                                             //if (!implemented) throw new 
Error("Stateful Container not implemented yet");
  -
                                                // Create container
                                                StatefulSessionContainer container = 
new StatefulSessionContainer();
   
  @@ -374,34 +350,37 @@
                                                container.setClassLoader(new 
BeanClassLoader(cl));
   
                                                // Set metadata
  -                                             container.setMetaData(bean);
  -                        
container.setBeanMetaData(efm.getMetaData().getBean(bean.getEjbName()));
  +                                             container.setBeanMetaData(bean);
   
                                                // Set transaction manager
                                                
container.setTransactionManager((TransactionManager)new 
InitialContext().lookup("TransactionManager"));
  -
  -                                             // Get container configuration
  -                                             ContainerConfiguration conf = 
bean.getContainerConfiguration();
   
  -                                             // Make sure we have a default 
configuration
  -                                             if (conf == null)
  -                                             {
  -                                                     log.warning("No configuration 
chosen. Using default configuration");
  +                                             // Set security manager (should be 
chosen based on container config)
  +                                             
container.setSecurityManager((EJBSecurityManager)new 
InitialContext().lookup("EJBSecurityManager"));
   
  -                                                     conf =  
jar.getContainerConfigurations().getContainerConfiguration(DEFAULT_STATEFUL_CONFIGURATION);
  +                                 // Set realm mapping (should be chosen based on 
container config)
  +                             container.setRealmMapping( (RealmMapping)new 
InitialContext().lookup("SimpleRealmMapping"));
   
  -                                                     // Make sure this bean knows 
the configuration he is using
  -                                                     
bean.setConfigurationName(DEFAULT_STATEFUL_CONFIGURATION);
  -                                             }
  +                                             // Get container configuration
  +                                             ConfigurationMetaData conf = 
bean.getContainerConfiguration();
   
                                                // Set container invoker
  -                                             
container.setContainerInvoker((ContainerInvoker)cl.loadClass(conf.getContainerInvoker()).newInstance());
  +                                             ContainerInvoker ci = 
(ContainerInvoker)cl.loadClass(conf.getContainerInvoker()).newInstance();
  +                                             if (ci instanceof XmlLoadable) {
  +                                                     // the container invoker can 
load its configuration from the jboss.xml element
  +                                                     
((XmlLoadable)ci).importXml(conf.getContainerInvokerConf());
  +                                             }
  +                                             container.setContainerInvoker(ci);
   
                                                // Set instance cache
  -                                             
container.setInstanceCache((InstanceCache)cl.loadClass(conf.getInstanceCache()).newInstance());
  +                                             InstanceCache ic = 
(InstanceCache)cl.loadClass(conf.getInstanceCache()).newInstance(); 
  +                                             if (ic instanceof XmlLoadable) {
  +                                                     
((XmlLoadable)ic).importXml(conf.getContainerCacheConf());
  +                                             }
  +                                             container.setInstanceCache(ic);
   
  -                                             // Set instance pool
  -                                             
container.setInstancePool((InstancePool)cl.loadClass(conf.getInstancePool()).newInstance());
  +                                             // No real instance pool, use the 
shadow class 
  +                                             container.setInstancePool(new 
StatefulSessionInstancePool());
   
                                                // Set persistence manager
                                                
container.setPersistenceManager((StatefulSessionPersistenceManager)cl.loadClass(conf.getPersistenceManager()).newInstance());
  @@ -426,50 +405,44 @@
                                        container.setClassLoader(new 
BeanClassLoader(cl));
   
                                        // Set metadata
  -                                     container.setMetaData(bean);
  -                    
container.setBeanMetaData(efm.getMetaData().getBean(bean.getEjbName()));
  +                                     container.setBeanMetaData(bean);
   
                                        // Set transaction manager
                                        
container.setTransactionManager((TransactionManager)new 
InitialContext().lookup("TransactionManager"));
  -
  -                                     // Get container configuration
  -                                     ContainerConfiguration conf = 
bean.getContainerConfiguration();
  -
  -                                     // Make sure we have a default configuration
  -                                     if (conf == null)
  -                                     {
  -                                             log.warning("No configuration chosen. 
Using default configuration");
  -                                             if (((jBossEntity) 
bean).getPersistenceType().equals("Bean"))
  -                                             {
  -                                                     // BMP case
  -                                                     conf =  
jar.getContainerConfigurations().getContainerConfiguration(DEFAULT_ENTITY_BMP_CONFIGURATION);
   
  -                                                     // Make sure this bean knows 
the configuration he is using
  -                                                     
bean.setConfigurationName(DEFAULT_ENTITY_BMP_CONFIGURATION);
  +                                     // Set security manager (should be chosen 
based on container config)
  +                                     
container.setSecurityManager((EJBSecurityManager)new 
InitialContext().lookup("EJBSecurityManager"));
   
  -                                             }
  -                                             else
  -                                             {
  -                                                     // CMP case
  -                                                     conf =  
jar.getContainerConfigurations().getContainerConfiguration(DEFAULT_ENTITY_CMP_CONFIGURATION);
  +                                     // Set realm mapping (should be chosen based 
on container config)
  +                                     container.setRealmMapping( (RealmMapping)new 
InitialContext().lookup("SimpleRealmMapping"));
   
  -                                                     // Make sure this bean knows 
the configuration he is using
  -                                                     
bean.setConfigurationName(DEFAULT_ENTITY_CMP_CONFIGURATION);
  -                                             
  -                                             }
  -                                     }
  +                                     // Get container configuration
  +                                     ConfigurationMetaData conf = 
bean.getContainerConfiguration();
   
                                        // Set container invoker
  -                                     
container.setContainerInvoker((ContainerInvoker)cl.loadClass(conf.getContainerInvoker()).newInstance());
  +                                     ContainerInvoker ci = 
(ContainerInvoker)cl.loadClass(conf.getContainerInvoker()).newInstance();
  +                                     if (ci instanceof XmlLoadable) {
  +                                             // the container invoker can load its 
configuration from the jboss.xml element
  +                                             
((XmlLoadable)ci).importXml(conf.getContainerInvokerConf());
  +                                     }
  +                                     container.setContainerInvoker(ci);
   
                                        // Set instance cache
  -                                     
container.setInstanceCache((InstanceCache)cl.loadClass(conf.getInstanceCache()).newInstance());
  +                                     InstanceCache ic = 
(InstanceCache)cl.loadClass(conf.getInstanceCache()).newInstance(); 
  +                                     if (ic instanceof XmlLoadable) {
  +                                             
((XmlLoadable)ic).importXml(conf.getContainerCacheConf());
  +                                     }
  +                                     container.setInstanceCache(ic);
   
                                        // Set instance pool
  -                                     
container.setInstancePool((InstancePool)cl.loadClass(conf.getInstancePool()).newInstance());
  +                                     InstancePool ip = 
(InstancePool)cl.loadClass(conf.getInstancePool()).newInstance();
  +                                     if (ip instanceof XmlLoadable) {
  +                                             
((XmlLoadable)ip).importXml(conf.getContainerPoolConf());
  +                                     }
  +                                     container.setInstancePool(ip);
   
                                        // Set persistence manager 
  -                                     if (((jBossEntity) 
bean).getPersistenceType().equals("Bean")) {
  +                                     if (((EntityMetaData) bean).isBMP()) {
                                                
                                                //Should be BMPPersistenceManager
                                                
container.setPersistenceManager((EntityPersistenceManager)cl.loadClass(conf.getPersistenceManager()).newInstance());
  
  
  

Reply via email to