mcconnell    2002/12/16 20:55:01

  Modified:    assembly/src/java/org/apache/avalon/assembly/engine
                        Engine.java EngineClassLoader.java
  Log:
  Updates appliance factory operations to handle new appliance creation 
relative to a supplied partition.
  
  Revision  Changes    Path
  1.8       +22 -2     
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/Engine.java
  
  Index: Engine.java
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/Engine.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Engine.java       15 Dec 2002 14:08:56 -0000      1.7
  +++ Engine.java       17 Dec 2002 04:55:01 -0000      1.8
  @@ -98,13 +98,24 @@
       Appliance createAppliance( ApplianceContext context, boolean shared ) 
throws ApplianceException;
   
      /**
  +    * Resolve an appliance capable of supporting a supplied service 
  +    * reference.
  +    *
  +    * @param dependency a service depedency descriptor
  +    * @return the appliance
  +    */
  +    Appliance resolve( DependencyDescriptor dependency ) throws Exception;
  +
  +
  +   /**
       * Resolve an appliance capable of supporting a service 
       * referenced.
       *
       * @param dependency a service depedency descriptor
  +    * @param partition the partition to assign to a new appliance if 
creation is necessary
       * @return the appliance
       */
  -    Appliance resolve( DependencyDescriptor dependency ) throws Exception;
  +    Appliance resolve( DependencyDescriptor dependency, String partition ) 
throws Exception;
   
      /**
       * Resolve an appliance capable of supporting a referenced extension.
  @@ -113,5 +124,14 @@
       * @return the appliance
       */
       Appliance resolve( StageDescriptor stage ) throws Exception;
  +
  +   /**
  +    * Resolve an appliance capable of supporting a referenced extension.
  +    *
  +    * @param stage a lifecycle stage descriptor
  +    * @param partition the partition to assign to a new appliance if 
creation is necessary
  +    * @return the appliance
  +    */
  +    Appliance resolve( StageDescriptor stage, String partition ) throws 
Exception;
   
   }
  
  
  
  1.10      +52 -8     
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/EngineClassLoader.java
  
  Index: EngineClassLoader.java
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/EngineClassLoader.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- EngineClassLoader.java    16 Dec 2002 01:08:57 -0000      1.9
  +++ EngineClassLoader.java    17 Dec 2002 04:55:01 -0000      1.10
  @@ -438,9 +438,9 @@
   
           createRepositoryManager();
   
  +        m_assembly = createAssemblyService( m_facilities, m_graph );
           m_lifestyle = createLifestyleService( m_facilities );
           m_appliances = createApplianceManager( m_facilities );
  -        m_assembly = createAssemblyService( m_facilities, m_graph );
                                    
           //
           // install the set of extensions
  @@ -773,6 +773,15 @@
           m_assembly.assemble( appliance );
       }
   
  +   /**
  +    * Disassemble the supplied appliance.
  +    * @param appliance the object to disassembly
  +    */
  +    public void disassemble( Appliance appliance )
  +    {
  +        m_assembly.disassemble( appliance );
  +    }
  +
       //==============================================================
       // Engine
       //==============================================================
  @@ -826,7 +835,6 @@
           }
       }
   
  -
      /**
       * Resolve an appliance capable of supporting a service 
       * referenced.
  @@ -836,6 +844,19 @@
       */
       public Appliance resolve( DependencyDescriptor dependency ) throws 
Exception
       {
  +        return resolve( dependency, "" );
  +    }
  +
  +   /**
  +    * Resolve an appliance capable of supporting a service 
  +    * referenced.
  +    *
  +    * @param dependency a service depedency descriptor
  +    * @param partition the partition name
  +    * @return the appliance
  +    */
  +    public Appliance resolve( DependencyDescriptor dependency, String 
partition ) throws Exception
  +    {
           if( dependency == null )
           {
               throw new IllegalStateException( "dependency" );
  @@ -858,7 +879,10 @@
               }
               else
               {
  -                appliance = createAppliance( new ApplianceContext( profile 
), true );
  +                ApplianceContext context = new ApplianceContext( profile );
  +                context.setPartitionName( partition );
  +                appliance = createAppliance( context, true );
  +                assemble( appliance );
               }
           }
           return appliance;
  @@ -872,6 +896,18 @@
       */
       public Appliance resolve( StageDescriptor stage ) throws Exception
       {
  +        return resolve( stage, "" );
  +    }
  +
  +   /**
  +    * Resolve an appliance capable of supporting a referenced extension.
  +    *
  +    * @param stage a lifecycle stage descriptor
  +    * @param partition the partition to assign to a new appliance if 
creation is necessary
  +    * @return the appliance
  +    */
  +    public Appliance resolve( StageDescriptor stage, String partition ) 
throws Exception
  +    {
           if( stage == null )
           {
               throw new IllegalStateException( "stage" );
  @@ -895,14 +931,17 @@
               }
               else
               {
  -                appliance = createAppliance( new ApplianceContext( profile 
), true );
  +                ApplianceContext context = new ApplianceContext( profile );
  +                context.setPartitionName( partition );
  +                appliance = createAppliance( context, true );
  +                assemble( appliance );
               }
           }
           return appliance;
       }
   
      /**
  -    * Create and assemble a new appliance.
  +    * Create a new appliance.
       * @param context the appliance creation context
       * @param shared TRUE if this appliance can be shared
       * @return the appliance
  @@ -915,12 +954,11 @@
               String name = context.getProfile().getType().getInfo().getName();
               Logger logger = getLogger().getChildLogger( name );
               appliance = buildAppliance( context, getSystemContext(), logger 
);
  -            assemble( appliance );
           }
           catch( Throwable e )
           {
               final String error = 
  -              "Error while attempting to create standard appliance" 
  +              "Unable to create a standard appliance" 
                 + " from the profile: " 
                 + context.getProfile();
               throw new ApplianceException( error, e );
  @@ -1066,6 +1104,11 @@
       private DeploymentService bootstrapDeploymentService( Map facilities ) 
         throws ServiceException
       {
  +        if( m_assembly == null )
  +        {
  +            throw new IllegalStateException( "assembly" );
  +        }
  +
           try
           {
               DefaultDeploymentService deployment = new 
DefaultDeploymentService();
  @@ -1073,6 +1116,7 @@
               MappedServiceManager manager = new MappedServiceManager( 
facilities );
               manager.put("urn:assembly:logging.manager", m_logging );
               manager.put("urn:assembly:engine.classloader", this );
  +            manager.put("urn:assembly:engine.assembly", m_assembly );
               deployment.service( manager );
               deployment.contextualize( new DefaultContext() );
               deployment.initialize();
  
  
  

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

Reply via email to