I'm trying to implement a reusable lifecycle extension block that I can include in other services. So far I have the lifecycle block built
Mentally I see the extension block living in a container and blocks that use it living in subcontainers:
+-----------------+ | Lifecycle block | +-----------------+ | +---------------+---------------+ | | | +---------+ +---------+ +---------+ | svc A | | svc B | | svc C | +---------+ +---------+ +---------+
Based on the documentation for block.xml's include I think that the closest I can get would be a wrapper container that includes all blocks:
+------------------------------------------------------------+ | +---------+ +---------+ +---------+ +-----------------+ | | | svc A | | svc B | | svc C | | Lifecycle block | | | +---------+ +---------+ +---------+ +-----------------+ | +------------------------------------------------------------+
Right now I'm trying to test the lifecycle extension by including the block and running against a separate test block's compiled classes. (no jar, but meta info is built.
+------------------------------+ | +-----------------+ | | (svc A) | Lifecycle block | | | +-----------------+ | +------------------------------+
I'm under the impression that this should work, but I can't get the test block (svc A) to recognize the service id of the lifecycle block. This is the output of running:
$ merlin -execute target/classes -repository /Users/corey/.maven/repository/
Starting Default Unix script
Starting Merlin 3.2.4.
====================
Platform: Darwin
Java Home: /Library/Java/Home
Merlin Home: /opt/local/java/merlin
Security policy: /opt/local/java/merlin/bin/security.policy
JVM Options:
Bootstrap JAR: /opt/local/java/merlin/bin/lib/merlin-cli-3.2.4.jar
Merlin Arguments: -execute target/classes -repository /Users/corey/.maven/repository/
[INFO ] (kernel): installing: file:/private${user.dir}/target/classes/
---- exception report ----------------------------------------------------------
Exception: org.apache.avalon.merlin.KernelException
Message: Kernel startup failure.
---- cause ---------------------------------------------------------------------
Exception: org.apache.avalon.merlin.KernelException
Message: Application assembly failure.
---- cause ---------------------------------------------------------------------
Exception: org.apache.avalon.activation.appliance.AssemblyException
Message: Assembly of appliance [/tutorial/hello] could not be completed due to an unresolvable stage dependency for the key [urn:dwango:block_registry].
---- cause ---------------------------------------------------------------------
Exception: org.apache.avalon.activation.appliance.NoProviderDefinitionException
Message: Unable to resolve stage handler for: [stage urn:dwango:block_registry]
---- stack trace ---------------------------------------------------------------
org.apache.avalon.activation.appliance.NoProviderDefinitionException: Unable to resolve stage handler for: [stage urn:dwango:block_registry]
org.apache.avalon.activation.appliance.impl.AbstractBlock.locate(Abstrac tBlock.java:393)
org.apache.avalon.activation.appliance.impl.AbstractBlock.locate(Abstrac tBlock.java:389)
org.apache.avalon.activation.appliance.impl.AbstractBlock.locate(Abstrac tBlock.java:337)
org.apache.avalon.activation.appliance.impl.DefaultAppliance.assemble(De faultAppliance.java:395)
org.apache.avalon.activation.appliance.impl.AbstractBlock.assemble(Abstr actBlock.java:570)
org.apache.avalon.activation.appliance.impl.AbstractBlock.assemble(Abstr actBlock.java:570)
org.apache.avalon.merlin.impl.DefaultKernel.startup(DefaultKernel.java:3 95)
org.apache.avalon.merlin.impl.DefaultFactory.create(DefaultFactory.java: 549)
org.apache.avalon.merlin.cli.Main.<init>(Main.java:329)
org.apache.avalon.merlin.cli.Main.main(Main.java:281)
------------------------------------------------------------------------ --------
xargs: /Library/Java/Home/bin/java exited with status 255
*** lifecycle extension meta info:
.xinfo:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE type PUBLIC "-//AVALON/Type DTD Version 1.0//EN" "http://avalon.apache.org/dtds/meta/type_1_1.dtd" >
<type> <info> <name>block_registry</name> <version>0.1.0</version> <lifestyle>singleton</lifestyle> <collection>hard</collection> </info> <extensions> <extension id="urn:dwango:block_registry"/> </extensions> </type>
block.xml: <container name="dwango">
<classloader>
<classpath>
<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="avalon-activation:avalon-activation-api" version="1.2.2"/>
<resource id="avalon-composition:avalon-composition-api" version="1.2.3"/>
<resource id="avalon-meta:avalon-meta-api" version="1.3"/>
</repository>
</classpath>
</classloader>
<component name="block_registry" class="com.dwango.services.framework.registrar.BlockRegisterExtension"/ >
</container>
*** And the meta information for my test service:
.xinfo:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE type PUBLIC "-//AVALON/Type DTD Version 1.0//EN" "http://avalon.apache.org/dtds/meta/type_1_1.dtd" >
<type> <info> <name>hello</name> <version>1.0.0</version> <lifestyle>singleton</lifestyle> <collection>hard</collection> </info> <context> <entry key="urn:avalon:name" /> <entry key="urn:avalon:partition" /> </context> <services> <service type="tutorial.Hello"/> </services> <stages> <stage id="urn:dwango:block_registry"/> </stages> </type>
block.xml:
<container name="tutorial">
<include name="block_registry" id="dwango:dwango-framework-registrar" version="20040318"/>
<component name="hello" class="tutorial.HelloComponent" activation="startup" />
</container>
*** debug logging of the same command.
$ merlin -execute target/classes -repository /Users/corey/.maven/repository/ -debug
Starting Default Unix script
Starting Merlin 3.2.4.
====================
Platform: Darwin
Java Home: /Library/Java/Home
Merlin Home: /opt/local/java/merlin
Security policy: /opt/local/java/merlin/bin/security.policy
JVM Options:
Bootstrap JAR: /opt/local/java/merlin/bin/lib/merlin-cli-3.2.4.jar
Merlin Arguments: -execute target/classes -repository /Users/corey/.maven/repository/ -debug
[DEBUG ] (kernel.logging): default priority: DEBUG
[DEBUG ] (kernel.logging): adding category: kernel
[DEBUG ] (kernel): logging system established
[DEBUG ] (kernel): repository established: cache:/Users/corey/.maven/repository, http://dpml.net/, http://www.ibiblio.org/maven/
[DEBUG ] (kernel.logging): adding category: kernel
[DEBUG ] (kernel.logging): adding category:
[DEBUG ] (kernel.classloader): base: ${user.dir}
[DEBUG ] (kernel.classloader): classpath:
[DEBUG ] (kernel.classloader.types): type install count: 0
[DEBUG ] (kernel.logging): adding category:
[DEBUG ] (kernel): system assembly
[DEBUG ] (): assembly phase
[DEBUG ] (kernel): system deployment
[DEBUG ] (): deployment: (empty)
[DEBUG ] (kernel): system ready
[DEBUG ] (kernel.logging): adding category:
[DEBUG ] (kernel.logging): adding category:
[DEBUG ] (classloader): base: ${user.dir}
[DEBUG ] (classloader): classpath:
[DEBUG ] (classloader.types): type install count: 0
[DEBUG ] (kernel): install phase
[INFO ] (kernel): installing: file:/private${user.dir}/target/classes/
[DEBUG ] (): including composite block: file:/private/tmp/merlin-hello/target/classes/BLOCK-INF/block.xml
[DEBUG ] (): installing: tutorial
[DEBUG ] (kernel.logging): adding category: tutorial
[DEBUG ] (kernel.logging): adding category: tutorial
[DEBUG ] (tutorial.classloader): base: ${user.dir}
[DEBUG ] (tutorial): implicit entries: 1
[DEBUG ] (tutorial.classloader): classpath: file:/private${user.dir}/target/classes/
[DEBUG ] (tutorial.classloader.scanner): scanning: file:/private${user.dir}/target/classes/
[DEBUG ] (tutorial.classloader.scanner): type: tutorial.HelloComponent
[DEBUG ] (tutorial.classloader.types): type install count: 1
[DEBUG ] (tutorial.classloader.types): registered [type:tutorial.HelloComponent/1].
[DEBUG ] (tutorial): including composite block: jar:file:/Users/corey/.maven/repository/dwango/jars/dwango-framework- registrar-20040318.jar!/BLOCK-INF/block.xml
[DEBUG ] (tutorial): installing: block_registry
[DEBUG ] (kernel.logging): adding category: tutorial.block_registry
[DEBUG ] (kernel.logging): adding category: tutorial.block_registry
[DEBUG ] (tutorial.block_registry.classloader): base: ${user.dir}
[DEBUG ] (tutorial.block_registry): implicit entries: 1
[DEBUG ] (tutorial.block_registry): repository declarations: 1
[DEBUG ] (tutorial.block_registry): repository 0 contains 5 entries.
[DEBUG ] (tutorial.block_registry.classloader): classpath: file:/Users/corey/.maven/repository/dwango/jars/dwango-framework- registrar-20040318.jar;file:/Users/corey/.maven/repository/avalon- framework/jars/avalon-framework-api-4.1.5.jar;file:/Users/corey/.maven/ repository/avalon-framework/jars/avalon-framework-impl-4.1.5.jar;file:/ Users/corey/.maven/repository/avalon-activation/jars/avalon-activation- api-1.2.2.jar;file:/Users/corey/.maven/repository/avalon-composition/ jars/avalon-composition-api-1.2.3.jar;file:/Users/corey/.maven/ repository/avalon-meta/jars/avalon-meta-api-1.3.jar
[DEBUG ] (tutorial.block_registry.classloader.scanner): scanning: file:/Users/corey/.maven/repository/dwango/jars/dwango-framework- registrar-20040318.jar
[DEBUG ] (tutorial.block_registry.classloader.scanner): type: com.dwango.services.framework.registrar.BlockRegisterExtension
[DEBUG ] (tutorial.block_registry.classloader.scanner): scanning: file:/Users/corey/.maven/repository/avalon-framework/jars/avalon- framework-api-4.1.5.jar
[DEBUG ] (tutorial.block_registry.classloader.scanner): scanning: file:/Users/corey/.maven/repository/avalon-framework/jars/avalon- framework-impl-4.1.5.jar
[DEBUG ] (tutorial.block_registry.classloader.scanner): scanning: file:/Users/corey/.maven/repository/avalon-activation/jars/avalon- activation-api-1.2.2.jar
[DEBUG ] (tutorial.block_registry.classloader.scanner): scanning: file:/Users/corey/.maven/repository/avalon-composition/jars/avalon- composition-api-1.2.3.jar
[DEBUG ] (tutorial.block_registry.classloader.scanner): scanning: file:/Users/corey/.maven/repository/avalon-meta/jars/avalon-meta-api- 1.3.jar
[DEBUG ] (tutorial.block_registry.classloader.types): type install count: 1
[DEBUG ] (tutorial.block_registry.classloader.types): registered [type:com.dwango.services.framework.registrar.BlockRegisterExtension/1].
[DEBUG ] (tutorial.block_registry): installing: block_registry
[DEBUG ] (tutorial): installing: hello
[DEBUG ] (tutorial.hello.context): avalon strategy
[DEBUG ] (tutorial.hello.context): context: {urn:avalon:partition=/tutorial/, urn:avalon:name=hello}
[DEBUG ] (kernel): customize phase
[DEBUG ] (kernel): activation phase
[DEBUG ] (kernel.logging): adding category:
[DEBUG ] (): creating block: /tutorial
[DEBUG ] (kernel.logging): adding category: tutorial
[DEBUG ] (kernel.logging): adding category: tutorial
[DEBUG ] (tutorial): creating appliance: /tutorial/hello
[DEBUG ] (kernel.logging): adding category: tutorial.hello
[DEBUG ] (tutorial): creating block: /tutorial/block_registry
[DEBUG ] (kernel.logging): adding category: tutorial.block_registry
[DEBUG ] (kernel.logging): adding category: tutorial.block_registry
[DEBUG ] (tutorial.block_registry): creating appliance: /tutorial/block_registry/block_registry
[DEBUG ] (kernel.logging): adding category: tutorial.block_registry.block_registry
[DEBUG ] (kernel): state: initialized
[DEBUG ] (kernel): kernel established (1)
[DEBUG ] (kernel): startup phase
[DEBUG ] (kernel): state: model assembly
[DEBUG ] (kernel): assembly phase
[DEBUG ] (): assembly phase
[DEBUG ] (tutorial): assembly phase
[DEBUG ] (tutorial.hello.appliance): assembly phase
[DEBUG ] (tutorial): resolving stage provider for: [stage urn:dwango:block_registry]
[DEBUG ] (): resolving stage provider for: [stage urn:dwango:block_registry]
[DEBUG ] (kernel): state: initialized
---- exception report ----------------------------------------------------------
Exception: org.apache.avalon.merlin.KernelException
Message: Kernel startup failure.
---- cause ---------------------------------------------------------------------
Exception: org.apache.avalon.merlin.KernelException
Message: Application assembly failure.
---- cause ---------------------------------------------------------------------
Exception: org.apache.avalon.activation.appliance.AssemblyException
Message: Assembly of appliance [/tutorial/hello] could not be completed due to an unresolvable stage dependency for the key [urn:dwango:block_registry].
---- cause ---------------------------------------------------------------------
Exception: org.apache.avalon.activation.appliance.NoProviderDefinitionException
Message: Unable to resolve stage handler for: [stage urn:dwango:block_registry]
---- stack trace ---------------------------------------------------------------
org.apache.avalon.activation.appliance.NoProviderDefinitionException: Unable to resolve stage handler for: [stage urn:dwango:block_registry]
org.apache.avalon.activation.appliance.impl.AbstractBlock.locate(Abstrac tBlock.java:393)
org.apache.avalon.activation.appliance.impl.AbstractBlock.locate(Abstrac tBlock.java:389)
org.apache.avalon.activation.appliance.impl.AbstractBlock.locate(Abstrac tBlock.java:337)
org.apache.avalon.activation.appliance.impl.DefaultAppliance.assemble(De faultAppliance.java:395)
org.apache.avalon.activation.appliance.impl.AbstractBlock.assemble(Abstr actBlock.java:570)
org.apache.avalon.activation.appliance.impl.AbstractBlock.assemble(Abstr actBlock.java:570)
org.apache.avalon.merlin.impl.DefaultKernel.startup(DefaultKernel.java:3 95)
org.apache.avalon.merlin.impl.DefaultFactory.create(DefaultFactory.java: 549)
org.apache.avalon.merlin.cli.Main.<init>(Main.java:329)
org.apache.avalon.merlin.cli.Main.main(Main.java:281)
------------------------------------------------------------------------ --------
[DEBUG ] (kernel): shutdown event xargs: /Library/Java/Home/bin/java exited with status 255
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]