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]>