You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by "Farr, Aaron" <Aa...@am.sony.com> on 2003/06/28 00:25:31 UTC
[proposal] Assembly Stage Extensions
Greetings.
In relation to the recent threads on Container Extensions [1] and Container
Components [2], I've put together the beginnings of assembly stage
extensions. Assembly stage extensions are similar to Creator lifecycle
extensions except that they have access to the component Appliance as well
as the object itself. Attached is a new interface called
"DeploymentStageExtension" for the assembly-spi package. Also attached is a
diff to the DefaultDeploymentService in the assembly package which provides
support for the new extension.
More info on my wiki at
http://jadetower.org/vqwiki/jsp/Wiki?AvalonAssemblyExt
--- DeploymentStageExtension ---
package org.apache.avalon.assembly.lifecycle;
import org.apache.avalon.assembly.appliance.Appliance;
public interface DeploymentStageExtension
{
public void create(Appliance appliance, Object object)
throws Exception;
public void destroy(Appliance appliance, Object object)
throws Exception;
}
------------ Usage ----------------
--- SimpleService:
package org.jadetower.extensions;
/**
* @avalon.meta.version 1.0
* @avalon.meta.name simple
* @avalon.meta.service type="org.jadetower.extensions.SimpleService"
* @avalon.meta.stage type="org.jadetower.extensions.SimpleService"
* @avalon.meta.attribute key="description" value="example extension"
*/
public class SimpleServiceImpl
implements SimpleService
{
public SimpleServiceImpl() {}
public String getName()
{
return ROLE;
}
}
---- Simple Stage Extension:
package org.jadetower.extensions;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.assembly.lifecycle.DeploymentStageExtension;
import org.apache.avalon.assembly.appliance.Appliance;
/**
* @avalon.meta.name extension
* @avalon.meta.version 1.0
* @avalon.meta.service type="org.jadetower.extensions.StageExtension"
* @avalon.meta.extension type="org.jadetower.extensions.SimpleService"
*/
public class StageExtensionImpl
extends AbstractLogEnabled
implements StageExtension, DeploymentStageExtension {
public StageExtensionImpl() {
}
public String getName() {
return ROLE;
}
public void create(Appliance appliance, Object object){
String desc =
appliance.getType().getInfo().getAttribute("description","error");
getLogger().info("appliance description = "+desc);
}
public void destroy(Appliance appliance, Object object){
}
}
---- Output:
Running Merlin:
[INFO ] (extension): appliance description = example
------------------
There's still issues. Particularly, the meta and assembly packages only
allow Type stages, meaning it the stage must be defined as an interface
implemented by your particular service. I'd like to change this to allow
Name base stages which don't require any interfaces.
Thoughts? Comments?
J. Aaron Farr
SONY ELECTRONICS
DDP-CIM
(724) 696-7653
[1] http://marc.theaimsgroup.com/?t=105664714700002&r=1&w=2&n=11
[2] http://marc.theaimsgroup.com/?t=105672722000001&r=1&w=2&n=6
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org