mcconnell    2004/03/06 19:02:42

  Modified:    merlin/activation/impl/src/java/org/apache/avalon/activation/impl
                        DefaultComponentFactory.java
               
merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl
                        DefaultComponentModel.java
                        DefaultContainmentModel.java
                        DefaultModelFactory.java DefaultSecurityModel.java
               merlin/platform/src/config kernel.xml
               merlin/platform/tutorials/security/application/impl/conf
                        block.xml
               merlin/platform/tutorials/security/application/impl
                        project.xml
               
merlin/platform/tutorials/security/application/impl/src/java/tutorial/application
                        Application.java
               
merlin/platform/tutorials/security/location/impl/src/java/tutorial/location/impl
                        LocationComponent.java
               merlin   project.xml
  Log:
  Put in place better handling of the shutdown and disposal lifecycle actions to 
ensure security awarness.  Also update the security tutorial and updated the defalt 
merlin kernel configuration.
  
  Revision  Changes    Path
  1.5       +87 -10    
avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/impl/DefaultComponentFactory.java
  
  Index: DefaultComponentFactory.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/impl/DefaultComponentFactory.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DefaultComponentFactory.java      29 Feb 2004 22:25:25 -0000      1.4
  +++ DefaultComponentFactory.java      7 Mar 2004 03:02:42 -0000       1.5
  @@ -49,6 +49,7 @@
   import org.apache.avalon.excalibur.i18n.ResourceManager;
   import org.apache.avalon.excalibur.i18n.Resources;
   
  +import org.apache.avalon.framework.activity.Disposable;
   import org.apache.avalon.framework.activity.Initializable;
   import org.apache.avalon.framework.activity.Executable;
   import org.apache.avalon.framework.activity.Startable;
  @@ -146,7 +147,7 @@
       * @param instance the component instance to etherialize
       * @return the new instance
       */
  -    public void etherialize( Object instance )
  +    public void etherialize( final Object instance )
       {
           try
           {
  @@ -158,17 +159,71 @@
           }
           finally
           {
  -            try
  +            if( instance instanceof Startable )
               {
  -                ContainerUtil.shutdown( instance );
  +                getLogger().debug( "applying shutdown" );
  +                try
  +                {
  +                    if( m_secure )
  +                    {
  +                        AccessController.doPrivileged( 
  +                          new PrivilegedExceptionAction()
  +                          {
  +                              public Object run() throws Exception
  +                              {
  +                                 ((Startable)instance).stop();
  +                                 return null;
  +                              }
  +                          }, 
  +                          m_model.getAccessControlContext() );
  +                    }
  +                    else
  +                    {
  +                        ContainerUtil.stop( instance );
  +                    }
  +                }
  +                catch( Throwable e )
  +                {
  +                    if( getLogger().isWarnEnabled() )
  +                    {
  +                        final String warning = 
  +                          "Ignoring component source shutdown error.";
  +                        getLogger().warn( warning, e );
  +                    }
  +                }
               }
  -            catch( Throwable e )
  +
  +            if( instance instanceof Disposable )
               {
  -                if( getLogger().isWarnEnabled() )
  +                getLogger().debug( "applying disposal" );
  +                try
                   {
  -                    final String warning = 
  -                      "Ignoring component source shutdown error.";
  -                    getLogger().warn( warning, e );
  +                    if( m_secure ) 
  +                    {
  +                        AccessController.doPrivileged( 
  +                          new PrivilegedExceptionAction()
  +                          {
  +                              public Object run() throws Exception
  +                              {
  +                                 ((Disposable)instance).dispose();
  +                                 return null;
  +                              }
  +                          }, 
  +                          m_model.getAccessControlContext() );
  +                    }
  +                    else
  +                    {
  +                        ContainerUtil.dispose( instance );
  +                    }
  +                }
  +                catch( Throwable e )
  +                {
  +                    if( getLogger().isWarnEnabled() )
  +                    {
  +                        final String warning = 
  +                          "Ignoring component source disposal error.";
  +                        getLogger().warn( warning, e );
  +                    }
                   }
               }
           }
  @@ -207,6 +262,7 @@
           {
               if( instance instanceof LogEnabled )
               {
  +                getLogger().debug( "applying logger" );
                   if( m_secure ) 
                   { 
                       AccessController.doPrivileged( 
  @@ -226,11 +282,11 @@
                   }
               }
   
  -
               applyContext( instance, context );
   
               if( instance instanceof Serviceable )
               {
  +                getLogger().debug( "applying service manager" );
                   if( m_secure )
                   {
                       AccessController.doPrivileged( 
  @@ -252,6 +308,7 @@
   
               if( instance instanceof Configurable )
               {
  +                getLogger().debug( "applying configuration" );
                   if( m_secure )
                   {
                       AccessController.doPrivileged( 
  @@ -274,6 +331,7 @@
   
               if( instance instanceof Parameterizable )
               {
  +                getLogger().debug( "applying parameters" );
                   if( m_secure )
                   {
                       AccessController.doPrivileged( 
  @@ -305,6 +363,7 @@
   
               if( instance instanceof Initializable )
               {
  +                getLogger().debug( "applying initialization" );
                   if( m_secure )
                   {
                       AccessController.doPrivileged( 
  @@ -326,6 +385,7 @@
   
               if( Startable.class.isAssignableFrom( clazz ) )
               {
  +                getLogger().debug( "applying statup" );
                   if( m_secure )
                   {
                       AccessController.doPrivileged( 
  @@ -346,6 +406,7 @@
               }
               else if( Executable.class.isAssignableFrom( clazz ) )
               {
  +                getLogger().debug( "applying execution" );
                   if( m_secure )
                   {
                       AccessController.doPrivileged( 
  @@ -481,6 +542,19 @@
       {
           try
           {
  +            if( args.length == 0 )
  +            {
  +                getLogger().debug( 
  +                  "instantiating component with a null constructor" );
  +            }
  +            else
  +            {
  +                int n = args.length;
  +                getLogger().debug( 
  +                  "instantiating component with " 
  +                  + n + " arguments." );
  +            }
  +
               if( m_secure )
               {
                   return AccessController.doPrivileged( 
  @@ -712,6 +786,8 @@
           final DeploymentModel provider = model.getProvider();
           if( null == provider )
           {
  +            getLogger().debug( "applying context" );
  +
               //
               // its classic avalon
               //
  @@ -747,6 +823,7 @@
           }
           else
           {
  +            getLogger().debug( "applying custom context" );
               try
               {
                   ContextualizationHandler handler =
  
  
  
  1.10      +2 -2      
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultComponentModel.java
  
  Index: DefaultComponentModel.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultComponentModel.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- DefaultComponentModel.java        29 Feb 2004 22:25:26 -0000      1.9
  +++ DefaultComponentModel.java        7 Mar 2004 03:02:42 -0000       1.10
  @@ -302,7 +302,7 @@
           if( !isAssembled() ) 
           {
                final String error = 
  -               "Model is not assembled.";
  +               "Model is not assembled " + this;
                throw new IllegalStateException( error );
           }
   
  
  
  
  1.39      +2 -2      
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContainmentModel.java
  
  Index: DefaultContainmentModel.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContainmentModel.java,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- DefaultContainmentModel.java      1 Mar 2004 16:31:41 -0000       1.38
  +++ DefaultContainmentModel.java      7 Mar 2004 03:02:42 -0000       1.39
  @@ -462,7 +462,7 @@
           if( !isAssembled() ) 
           {
                final String error = 
  -               "Model is not assembled.";
  +               "Model is not assembled " + this;
                throw new IllegalStateException( error );
           }
   
  
  
  
  1.12      +14 -4     
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultModelFactory.java
  
  Index: DefaultModelFactory.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultModelFactory.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- DefaultModelFactory.java  7 Mar 2004 00:00:58 -0000       1.11
  +++ DefaultModelFactory.java  7 Mar 2004 03:02:42 -0000       1.12
  @@ -43,6 +43,7 @@
   import org.apache.avalon.composition.model.DeploymentModel;
   import org.apache.avalon.composition.model.ComponentModel;
   import org.apache.avalon.composition.model.ModelException;
  +import org.apache.avalon.composition.model.ModelRuntimeException;
   import org.apache.avalon.composition.model.DependencyGraph;
   import org.apache.avalon.composition.provider.SecurityModel;
   import org.apache.avalon.composition.provider.SystemContext;
  @@ -170,12 +171,21 @@
               {
                   SecurityProfile profile = profiles[i];
                   final String name = profile.getName();
  -                SecurityModel model = new DefaultSecurityModel( profile );
  -                m_security.put( profile.getName(), model );
                   if( m_logger.isDebugEnabled() )
                   {
                       m_logger.debug( 
  -                      "added security profile [" + name + "]." );
  +                      "adding security profile [" + name + "]." );
  +                }
  +                try
  +                {
  +                    SecurityModel model = new DefaultSecurityModel( profile );
  +                    m_security.put( profile.getName(), model );
  +                }
  +                catch( Throwable e )
  +                {
  +                    final String error = 
  +                      "Cannot include initial security model [" + name + "].";
  +                    throw new ModelRuntimeException( error, e );
                   }
               }
   
  
  
  
  1.6       +2 -2      
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultSecurityModel.java
  
  Index: DefaultSecurityModel.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultSecurityModel.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DefaultSecurityModel.java 29 Feb 2004 22:25:26 -0000      1.5
  +++ DefaultSecurityModel.java 7 Mar 2004 03:02:42 -0000       1.6
  @@ -126,7 +126,7 @@
               catch( Throwable e )
               {
                   final String error = 
  -                  "Invalid permission descriptor [" + descriptor + "].";
  +                  "Invalid permission descriptor " + descriptor + ".";
                   throw new SystemRuntimeException( error, e );
               }
           }
  
  
  
  1.10      +29 -2     avalon/merlin/platform/src/config/kernel.xml
  
  Index: kernel.xml
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/platform/src/config/kernel.xml,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- kernel.xml        29 Feb 2004 22:34:54 -0000      1.9
  +++ kernel.xml        7 Mar 2004 03:02:42 -0000       1.10
  @@ -1,11 +1,38 @@
   <?xml version="1.0" encoding="ISO-8859-1"?>
   
   <kernel> 
  -   <repository>
  +
  +  <security>
  +    <profile name="default">
  +      <permissions>
  +        <permission class="java.util.PropertyPermission" name="java.*">
  +          <action>read</action>
  +        </permission>
  +        <permission class="java.util.PropertyPermission" name="os.*">
  +          <action>read</action>
  +        </permission>
  +        <permission class="java.util.PropertyPermission" name="file.separator">
  +          <action>read</action>
  +        </permission>
  +        <permission class="java.util.PropertyPermission" name="path.separator">
  +          <action>read</action>
  +        </permission>
  +        <permission class="java.util.PropertyPermission" name="line.separator">
  +          <action>read</action>
  +        </permission>
  +        <permission class="java.util.PropertyPermission" name="user.name">
  +          <action>read</action>
  +        </permission>
  +      </permissions>
  +    </profile>
  +  </security>
  +
  +  <repository>
        <hosts>
          <host path="http://dpml.net/"/>
          <host path="http://ibiblio.org/maven/"/>
        </hosts>
  -   </repository>
  +  </repository>
  +
   </kernel>
   
  
  
  
  1.3       +4 -5      
avalon/merlin/platform/tutorials/security/application/impl/conf/block.xml
  
  Index: block.xml
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/platform/tutorials/security/application/impl/conf/block.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- block.xml 1 Mar 2004 23:45:33 -0000       1.2
  +++ block.xml 7 Mar 2004 03:02:42 -0000       1.3
  @@ -6,15 +6,14 @@
            <repository>
              <resource id="avalon-framework:avalon-framework-api" version="4.1.5"/>
              <resource id="avalon-framework:avalon-framework-impl" version="4.1.5"/>
  -           <resource id="merlin-tutorial:locator-api" version="1.0"/>
  -           <resource id="merlin-tutorial:publisher-api" version="1.0"/>
  -           <resource id="merlin-tutorial:application-impl" version="1.0"/>
  +           <resource id="merlin-tutorial:secure-locator-api" version="1.0"/>
  +           <resource id="merlin-tutorial:secure-publisher-api" version="1.0"/>
            </repository>
          </classpath>
        </classloader>
   
  -     <include name="location" id="merlin-tutorial:locator-impl" version="1.0"/>
  -     <include name="publisher" id="merlin-tutorial:publisher-impl" version="1.0"/>
  +     <include name="location" id="merlin-tutorial:secure-locator-impl" 
version="1.0"/>
  +     <include name="publisher" id="merlin-tutorial:secure-publisher-impl" 
version="1.0"/>
   
        <component name="spain" 
           class="tutorial.application.Application" activation="startup">
  
  
  
  1.3       +1 -1      
avalon/merlin/platform/tutorials/security/application/impl/project.xml
  
  Index: project.xml
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/platform/tutorials/security/application/impl/project.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- project.xml       1 Mar 2004 23:53:04 -0000       1.2
  +++ project.xml       7 Mar 2004 03:02:42 -0000       1.3
  @@ -4,7 +4,7 @@
   
     <extend>${basedir}/../../../project.xml</extend>
   
  -  <id>application-impl</id>
  +  <id>secure-application-impl</id>
     <name>Composition Application Tutorial</name>
     <currentVersion>1.0</currentVersion>
   
  
  
  
  1.2       +2 -2      
avalon/merlin/platform/tutorials/security/application/impl/src/java/tutorial/application/Application.java
  
  Index: Application.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/platform/tutorials/security/application/impl/src/java/tutorial/application/Application.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Application.java  1 Mar 2004 23:04:24 -0000       1.1
  +++ Application.java  7 Mar 2004 03:02:42 -0000       1.2
  @@ -51,7 +51,7 @@
       */
       public void service( ServiceManager manager ) throws ServiceException
       {
  -        getLogger().info( "servicing application" );
  +        getLogger().info( "handing service manager" );
   
           LocationService locator = null;
           Object object = manager.lookup( "locator" );
  @@ -96,7 +96,7 @@
   
       public void dispose()
       {
  -        getLogger().info( "disposal" );
  +        getLogger().info( "application disposal" );
       }
   }
   
  
  
  
  1.2       +1 -1      
avalon/merlin/platform/tutorials/security/location/impl/src/java/tutorial/location/impl/LocationComponent.java
  
  Index: LocationComponent.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/platform/tutorials/security/location/impl/src/java/tutorial/location/impl/LocationComponent.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- LocationComponent.java    1 Mar 2004 23:46:35 -0000       1.1
  +++ LocationComponent.java    7 Mar 2004 03:02:42 -0000       1.2
  @@ -70,7 +70,7 @@
   
       public void dispose()
       {
  -        getLogger().info( "disposal" );
  +        getLogger().info( "locator disposal" );
       }
   }
   
  
  
  
  1.29      +1 -5      avalon/merlin/project.xml
  
  Index: project.xml
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/project.xml,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- project.xml       28 Feb 2004 14:10:18 -0000      1.28
  +++ project.xml       7 Mar 2004 03:02:42 -0000       1.29
  @@ -242,15 +242,11 @@
       </packageGroup>
       <packageGroup>
         <title>Activation</title>
  -      <packages>org.apache.avalon.activation.*</packages>
  +      
<packages>org.apache.avalon.activation,org.apache.avalon.activation.*</packages>
       </packageGroup>
       <packageGroup>
         <title>Composition</title>
         <packages>org.apache.avalon.composition.*</packages>
  -    </packageGroup>
  -    <packageGroup>
  -      <title>Extension</title>
  -      <packages>org.apache.avalon.extension,org.apache.avalon.extension.*</packages>
       </packageGroup>
       <packageGroup>
         <title>Facilities</title>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to