User: stark   
  Date: 01/02/27 08:48:08

  Modified:    src/main/org/jboss/ejb Container.java ContainerFactory.java
  Log:
  Add support for a SecurityInterceptor security proxy and restore the
  externalization of the container interceptor configuration that I
  dropped in the last patch.
  
  Revision  Changes    Path
  1.37      +12 -1     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.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- Container.java    2001/02/21 06:20:09     1.36
  +++ Container.java    2001/02/27 16:48:07     1.37
  @@ -67,7 +67,7 @@
    *   @see ContainerFactory
    *   @author Rickard �berg ([EMAIL PROTECTED])
    *   @author <a href="[EMAIL PROTECTED]">Marc Fleury</a>
  - *   @version $Revision: 1.36 $
  + *   @version $Revision: 1.37 $
    */
   public abstract class Container
   {
  @@ -102,6 +102,9 @@
      // This is the realm mapping
      protected RealmMapping rm;
   
  +   /** The custom security proxy used by the SecurityInterceptor */
  +   protected Object securityProxy;
  +
      // This is a cache for method permissions
      private HashMap methodPermissionsCache = new HashMap();
   
  @@ -149,6 +152,14 @@
         return rm;
      }
   
  +   public void setSecurityProxy(Object proxy)
  +   {
  +       this.securityProxy = proxy;
  +   }
  +   public Object getSecurityProxy()
  +   {
  +       return securityProxy;
  +   }
   
      /**
      * Sets the application deployment unit for this container. All the bean
  
  
  
  1.67      +63 -127   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.66
  retrieving revision 1.67
  diff -u -r1.66 -r1.67
  --- ContainerFactory.java     2001/02/23 18:22:23     1.66
  +++ ContainerFactory.java     2001/02/27 16:48:08     1.67
  @@ -77,8 +77,9 @@
   *   @author <a href="mailto:[EMAIL PROTECTED]">Juha Lindfors</a>
   *   @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a>
   *   @author Peter Antman ([EMAIL PROTECTED])
  +*   @author Scott Stark([EMAIL PROTECTED])
   *
  -*   @version $Revision: 1.66 $
  +*   @version $Revision: 1.67 $
   */
   public class ContainerFactory
     extends org.jboss.util.ServiceMBeanSupport
  @@ -541,39 +542,12 @@
       // Stolen from Stateless deploy
       // Create container
       MessageDrivenContainer container = new MessageDrivenContainer();
  +    int transType = ((MessageDrivenMetaData)bean).isContainerManagedTx() ? 
ContainerInterceptors.CMT : ContainerInterceptors.BMT;
   
  -    initializeContainer( container, conf, bean, cl, localCl );
  +    initializeContainer( container, conf, bean, transType, cl, localCl );
       container.setContainerInvoker( createContainerInvoker( conf, cl ) );
       container.setInstancePool( createInstancePool( conf, cl ) );
  -    // Create interceptors
  -    container.addInterceptor( new LogInterceptor() );
  -    container.addInterceptor( new SecurityInterceptor() );
   
  -    if( ( (MessageDrivenMetaData) bean ).isContainerManagedTx() )
  -      {
  -      // CMT
  -      container.addInterceptor( new TxInterceptorCMT() );
  -
  -      if( metricsEnabled )
  -        container.addInterceptor( new MetricsInterceptor() );
  -
  -      container.addInterceptor( new MessageDrivenInstanceInterceptor() );
  -      }
  -    else
  -      {
  -      // BMT
  -      container.addInterceptor( new MessageDrivenInstanceInterceptor() );
  -      // FIXME. should we have a special BMT tx interceptor
  -      // to place ACK there???
  -      container.addInterceptor( new MessageDrivenTxInterceptorBMT() );
  -
  -      if( metricsEnabled )
  -        container.addInterceptor( new MetricsInterceptor() );
  -      }
  -
  -    // Finally we add the last interceptor from the container
  -    container.addInterceptor( container.createContainerInterceptor() );
  -
       return container;
       }
   
  @@ -585,37 +559,11 @@
       ConfigurationMetaData conf = bean.getContainerConfiguration();
       // Create container
       StatelessSessionContainer container = new StatelessSessionContainer();
  -
  -    initializeContainer( container, conf, bean, cl, localCl );
  +    int transType = ((SessionMetaData)bean).isContainerManagedTx() ? 
ContainerInterceptors.CMT : ContainerInterceptors.BMT;
  +    initializeContainer( container, conf, bean, transType, cl, localCl );
       container.setContainerInvoker( createContainerInvoker( conf, cl ) );
       container.setInstancePool( createInstancePool( conf, cl ) );
  -    // Create interceptors
  -    container.addInterceptor( new LogInterceptor() );
  -    container.addInterceptor( new SecurityInterceptor() );
  -
  -    if( ( (SessionMetaData) bean ).isContainerManagedTx() )
  -      {
  -      // CMT
  -      container.addInterceptor( new TxInterceptorCMT() );
  -
  -      if( metricsEnabled )
  -        container.addInterceptor( new MetricsInterceptor() );
  -
  -      container.addInterceptor( new StatelessSessionInstanceInterceptor() );
  -      }
  -    else
  -      {
  -      // BMT
  -      container.addInterceptor( new StatelessSessionInstanceInterceptor() );
  -      container.addInterceptor( new TxInterceptorBMT() );
  -
  -      if( metricsEnabled )
  -        container.addInterceptor( new MetricsInterceptor() );
  -      }
  -
  -    // Finally we add the last interceptor from the container
  -    container.addInterceptor( container.createContainerInterceptor() );
  -
  +    
       return container;
       }
   
  @@ -627,40 +575,15 @@
       ConfigurationMetaData conf = bean.getContainerConfiguration();
       // Create container
       StatefulSessionContainer container = new StatefulSessionContainer();
  -
  -    initializeContainer( container, conf, bean, cl, localCl );
  +    int transType = ((SessionMetaData)bean).isContainerManagedTx() ? 
ContainerInterceptors.CMT : ContainerInterceptors.BMT;
  +    initializeContainer( container, conf, bean, transType, cl, localCl );
       container.setContainerInvoker( createContainerInvoker( conf, cl ) );
       container.setInstanceCache( createInstanceCache( conf, 
m_beanCacheJMSMonitoring, cl ) );
       // No real instance pool, use the shadow class
       container.setInstancePool( new StatefulSessionInstancePool() );
       // Set persistence manager
       container.setPersistenceManager( (StatefulSessionPersistenceManager) 
cl.loadClass( conf.getPersistenceManager() ).newInstance() );
  -    // Create interceptors
  -    container.addInterceptor( new LogInterceptor() );
  -
  -    if( ( (SessionMetaData) bean ).isContainerManagedTx() )
  -      {
  -      // CMT
  -      container.addInterceptor( new TxInterceptorCMT() );
  -
  -      if( metricsEnabled )
  -        container.addInterceptor( new MetricsInterceptor() );
   
  -      container.addInterceptor( new StatefulSessionInstanceInterceptor() );
  -      }
  -    else
  -      {
  -      // BMT : the tx interceptor needs the context from the instance interceptor
  -      container.addInterceptor( new StatefulSessionInstanceInterceptor() );
  -      container.addInterceptor( new TxInterceptorBMT() );
  -
  -      if( metricsEnabled )
  -        container.addInterceptor( new MetricsInterceptor() );
  -      }
  -
  -    container.addInterceptor( new SecurityInterceptor() );
  -    container.addInterceptor( container.createContainerInterceptor() );
  -
       return container;
       }
   
  @@ -672,8 +595,8 @@
       ConfigurationMetaData conf = bean.getContainerConfiguration();
       // Create container
       EntityContainer container = new EntityContainer();
  -
  -    initializeContainer( container, conf, bean, cl, localCl );
  +    int transType = ContainerInterceptors.CMT;
  +    initializeContainer( container, conf, bean, transType, cl, localCl );
       container.setContainerInvoker( createContainerInvoker( conf, cl ) );
       container.setInstanceCache( createInstanceCache( conf, 
m_beanCacheJMSMonitoring, cl ) );
       container.setInstancePool( createInstancePool( conf, cl ) );
  @@ -695,19 +618,6 @@
         container.setPersistenceManager( persistenceManager );
         }
   
  -    // Create interceptors
  -    container.addInterceptor( new LogInterceptor() );
  -    container.addInterceptor( new SecurityInterceptor() );
  -    // entity beans are always CMT
  -    container.addInterceptor( new TxInterceptorCMT() );
  -
  -    if( metricsEnabled )
  -      container.addInterceptor( new MetricsInterceptor() );
  -
  -    container.addInterceptor( new EntityInstanceInterceptor() );
  -    container.addInterceptor( new EntitySynchronizationInterceptor() );
  -    container.addInterceptor( container.createContainerInterceptor() );
  -
       return container;
       }
   
  @@ -715,7 +625,7 @@
     // Helper Methods
     // **************
   
  -  private static void initializeContainer( Container container, 
ConfigurationMetaData conf, BeanMetaData bean, ClassLoader cl, ClassLoader localCl )
  +  private void initializeContainer( Container container, ConfigurationMetaData 
conf, BeanMetaData bean, int transType, ClassLoader cl, ClassLoader localCl )
       throws NamingException, DeploymentException
       {
       // Create classloader for this container
  @@ -727,36 +637,64 @@
       // Set metadata
       container.setBeanMetaData( bean );
       // Set transaction manager
  -    container.setTransactionManager( (TransactionManager) new 
InitialContext().lookup( "java:/TransactionManager" ) );
  -
  -    // Set security manager & role mapping manager
  -    String securityManagerJNDIName = conf.getAuthenticationModule();
  -    String roleMappingManagerJNDIName = conf.getRoleMappingManager();
  +    InitialContext iniCtx = new InitialContext();
  +    container.setTransactionManager( (TransactionManager) iniCtx.lookup( 
"java:/TransactionManager" ) );
   
  -    if( ( securityManagerJNDIName != null ) && ( roleMappingManagerJNDIName != null 
) )
  -      {
  -      try
  -        {
  -        EJBSecurityManager ejbS = (EJBSecurityManager) new InitialContext().lookup( 
securityManagerJNDIName );
  +        // Set security manager & role mapping manager
  +        String securityDomain = bean.getApplicationMetaData().getSecurityDomain();
  +        String securityManagerJNDIName = conf.getAuthenticationModule();
  +        String roleMappingManagerJNDIName = conf.getRoleMappingManager();
  +
  +        if( securityDomain != null && securityDomain.startsWith("java:/jaas") == 
false )
  +            securityDomain = "java:/jaas/" + securityDomain;
  +        if( securityDomain != null || ((securityManagerJNDIName != null) && 
(roleMappingManagerJNDIName != null)) )
  +        {   // Either the application has a security domain or the container has 
security setup
  +            try
  +            {
  +                if( securityManagerJNDIName == null )
  +                    securityManagerJNDIName = securityDomain;
  +                System.out.println("lookup securityManager name: 
"+securityManagerJNDIName);
  +                EJBSecurityManager ejbS = 
(EJBSecurityManager)iniCtx.lookup(securityManagerJNDIName);
  +                container.setSecurityManager( ejbS );
  +            }
  +            catch (NamingException ne)
  +            {
  +                throw new DeploymentException( "Could not find the Security Manager 
specified for this container, name="+securityManagerJNDIName, ne);
  +            }
   
  -        container.setSecurityManager( ejbS );
  +            try
  +            {
  +                if( roleMappingManagerJNDIName == null )
  +                    roleMappingManagerJNDIName = securityDomain;
  +                RealmMapping rM = 
(RealmMapping)iniCtx.lookup(roleMappingManagerJNDIName);
  +                container.setRealmMapping( rM );
  +            }
  +            catch (NamingException ne)
  +            {
  +                throw new DeploymentException( "Could not find the Role Mapping 
Manager specified for this container", ne );
  +            }
           }
  -      catch( NamingException ne )
  +
  +        // Set security proxies
  +        String securityProxyClassName = bean.getSecurityProxy();
  +        if( securityProxyClassName != null )
           {
  -        throw new DeploymentException( "Could not find the Security Manager 
specified for this container", ne );
  +            try
  +            {
  +                Class proxyClass = cl.loadClass(securityProxyClassName);
  +                Object proxy = proxyClass.newInstance();
  +                container.setSecurityProxy(proxy);
  +                System.out.println("setSecurityProxy, "+proxy);
  +            }
  +            catch(Exception e)
  +            {
  +                throw new DeploymentException("Missing SecurityProxy (in jboss.xml 
or standardjboss.xml): " + conf.getContainerInvoker() +" - " + e);
  +            }
           }
   
  -      try
  -        {
  -        RealmMapping rM = (RealmMapping) new InitialContext().lookup( 
roleMappingManagerJNDIName );
  +       // Create interceptors
  +       ContainerInterceptors.addInterceptors(container, transType, metricsEnabled, 
conf.getContainerInterceptorsConf());
   
  -        container.setRealmMapping( rM );
  -        }
  -      catch( NamingException ne )
  -        {
  -        throw new DeploymentException( "Could not find the Role Mapping Manager 
specified for this container", ne );
  -        }
  -      }
       }
   
     private static ContainerInvoker createContainerInvoker( ConfigurationMetaData 
conf, ClassLoader cl )
  @@ -827,5 +765,3 @@
       }
     }
   
  -
  -/*------ Formatted by Jindent 3.23 Basic 1.0 --- http://www.jindent.de ------*/
  
  
  

Reply via email to