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]



Reply via email to