Jean-Sebastien Delfino wrote:
Ignacio Silva-Lepe wrote:
Ok, so to try to answer my own question, it looks like the implementation
loader can use a ComponentTypeDocumentProcessor (passing itself in
the constructor) and then calling read with the URL of the component
type side file. Does this sound ok?


This can work, but there is probably a better way to do it, see my comments below.


On 4/10/07, Ignacio Silva-Lepe <[EMAIL PROTECTED]> wrote:

How is this supposed to work now? Previously, an implementation
loader had the option of asking the loader registry to load a component
type from a side file, and then it was able to downcast the returned
component type to an extension-specific component type.
Previously, an implementation Loader had to take care of the loading the optional .componentType side file. However, I'm not sure what you mean "downcast the returned component type to an extension-specific component type", how would you downcast it?

We are using ArtifactProcessors instead of Loaders now, and the ArtifactProcessor for a particular extension does not need to load the .componentType side file itself. Your ArtifactProcessor can do the following: 1. In the read method, read the implementation artifact and turn it into the relevant Implementation model object 2. In the resolve method, call ArtifactResolver.resolve() to resolve the corresponding .componentType, and for example save a pointer to it in your Implementation model 3. Then, in the wire() method, implement the logic to merge the info from the .componentType and the info derived from the Implementation artifact, for example in the case of a java component we may need to reconcile references defined in the .componentType and the references resulting from the introspection of the Java component implementation class. This logic is really specific to your particular component Implementation type.

I think that I need to make a small fix to o.a.t.assembly.ComponentType and add a URI string to it for step (2) to actually work correctly :) I'll send an update email describing how to resolve the ComponentType once I commit that small fix.


Since a component type's file is a separate stream, how does an
implementation loader (as a StAXArtifactProcessor that it is) kick off
a separate stream read? Is there a pattern for this, and is there an
exisiting component type reader that can be invoked? Or is this all
left as an exercise to the developer? Or perhaps this is coming but
not complete yet?

Thanks






Ignacio,

Under revision 527384, I added a URI field to ComponentType and implemented ComponentTypeImpl.equals() to allow ComponentTypes to be resolved by URI. This will allow you to do the following:

- in ArtifactProcessor.read(...):
   YourImplementation implementation;
   // Read your implementation object
   ....

   // Form the URI of the expected .componentType file;
   String uri = ...;

   // Create a ComponentType and mark it unresolved
   ComponentType componentType = assemblyFactory.createComponentType();
   componentType.setURI(uri);
   componentType.setUnresolved(true);
   implementation.setComponentType(componentType);

   return implementation;

- in ArtifactProcessor.resolve(YourImplementation implementation, ArtifactResolver resolver) ComponentType componentType = resolver.resolve(implementation.getComponentType());
   if (!componentType.isUnresolved()) {
       // You got a .componentType file!
   }

Hope this helps.

--
Jean-Sebastien


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to