> Yo!
hi stephen,
> After adding the model via something like the model.addContainmentModel(
> url ) operation or as your describing above - what you have is a new
> sub-model within the container - however, the sub-model isn't wired-up
> yet. Once you have added all of the models you want you need to
> commission the model. Commissioning the model results in the automatic
> assembly (wiring) of consumer components with provider components and so
> on. Once commissioned you can safely proceed with component
> instantiation.
>
> For example for a container:
>
> ContainmentModel model = kernel.getModel();
> ContainmentModel test = model.addContainmentModel( myBlockUrl );
> test.commission();
>
> Commissioning of a container results in the automatic deployment of any
> components that have startup policy set to true, or any components
> implied by the consequence of assembly.
>
> With a commissioned container you can go ahead and access actual
> component models from the container, create new component instances,
> etc. The dynamics tutorial contains details on how to do this,
> including dynamic re-configuration of component models and so on.
i tried to merge some lines from the dynamics tutorial:
InitialContextFactory initial = new DefaultInitialContextFactory("merlin");
File home = initial.getHomeDirectory();
initial.setCacheDirectory(new File(home, "system"));
InitialContext context = initial.createInitialContext();
String spec = "artifact:merlin/merlin-impl#3.3.0";
Artifact artifact = Artifact.createArtifact(spec);
Builder builder = context.newBuilder(artifact);
Factory factory = builder.getFactory();
Map criteria = factory.createDefaultCriteria();
criteria.put("merlin.deployment", new String[] { "bin"});
DefaultKernel kernel = (DefaultKernel) factory.create(criteria);
ContainmentModel containmentModel = kernel.getModel();
// URL blockURL = new URL("file:bin/BLOCK-INF/block.xml");
// ContainmentModel block = containmentModel.addContainmentModel(blockURL);
// <====== EXCEPTION 2
// block.commission();
ServiceModel[] services = containmentModel.getServiceModels();
ReferenceDescriptor reference = new
ReferenceDescriptor(Identifiable.class.getName());
ComponentModel componentModel = (ComponentModel)
containmentModel.getModel(reference); // <====== EXCEPTION 1
componentModel.commission();
Identifiable ident = (Identifiable) componentModel.resolve();
System.out.println("====> " + ident.getIdentity());
but i get an exception:
[INFO ] (econ.hello): initialization
[INFO ] (econ.random): initialization
[INFO ] (econ.random): processing request
[INFO ] (econ.hello): received random value: 1875652455
[INFO ] (econ.ident): contextualize
[INFO ] (econ.hello): using identifiable: /econ/ident
org.apache.avalon.composition.model.ProviderNotFoundException: Unable to locate a
service provider for the reference: [
tutorial.Identifiable:1.0.0].
at
org.apache.avalon.composition.model.impl.DefaultContainmentModelAssemblyHelper.findServiceProvider(DefaultContainmentModelAssemblyHe
lper.java:388)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModelAssemblyHelper.findServiceProvider(DefaultContainmentModelAssemblyHe
lper.java:332)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModel.getModel(DefaultContainmentModel.java:755)
at de.escnet.signalling.client.MerlinEmbedder.main(MerlinEmbedder.java:68)
if i uncomment what you have suggested, i get another exception:
[INFO ] (econ.hello): initialization
[INFO ] (econ.random): initialization
[INFO ] (econ.random): processing request
[INFO ] (econ.hello): received random value: -1892010755
[INFO ] (econ.ident): contextualize
[INFO ] (econ.hello): using identifiable: /econ/ident
org.apache.avalon.composition.model.ModelException: Unable to create a nested
deployment model: hello in the containment model /.
at
org.apache.avalon.composition.model.impl.DefaultContainmentModelComponentHelper.createComponentContext(DefaultContainmentModelCompon
entHelper.java:150)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModel.createComponentModel(DefaultContainmentModel.java:899)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModel.createDeploymentModel(DefaultContainmentModel.java:645)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModel.addModel(DefaultContainmentModel.java:604)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModel.<init>(DefaultContainmentModel.java:182)
at
org.apache.avalon.composition.model.impl.DefaultModelFactory.createContainmentModel(DefaultModelFactory.java:330)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModel.createContainmentModel(DefaultContainmentModel.java:987)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModel.createContainmentModel(DefaultContainmentModel.java:932)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModel.createContainmentModel(DefaultContainmentModel.java:1152)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModel.addContainmentModel(DefaultContainmentModel.java:574)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModel.addContainmentModel(DefaultContainmentModel.java:568)
at de.escnet.signalling.client.MerlinEmbedder.main(MerlinEmbedder.java:61)
Caused by: org.apache.avalon.composition.model.TypeUnknownException: Unable to locate
a component type descriptor for the component
class [tutorial.impl.HelloComponent] in the classloader. Please verify that the
component classname is correct and that a component
type descriptor is included in a jar file available within the container classloader.
at
org.apache.avalon.composition.model.impl.DefaultTypeRepository.getType(DefaultTypeRepository.java:255)
at
org.apache.avalon.composition.model.impl.DefaultTypeRepository.getType(DefaultTypeRepository.java:220)
at
org.apache.avalon.composition.model.impl.DefaultContainmentModelComponentHelper.createComponentContext(DefaultContainmentModelCompon
entHelper.java:125)
... 11 more
i find this all quite confusing. thank you very much, that you
keep responding that fast and detailed!!!
/eike
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]