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]