This sounds reasonable, except for a couple of errors I get. Details inline.
On 4/11/07, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:
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();
Where do I get assemblyFactory? Right now, my artifact processor implements StAXArtifactProcessor<MyImplementation> and does not extend any class, so it cannot inherit assemblyFactory. Should it be extending anything. I am using CRUDImplementationLoader as a model, though I realize that the CRUD sample does not use a separate component type. componentType.setURI(uri);
componentType.setUnresolved(true); implementation.setComponentType(componentType); return implementation; - in ArtifactProcessor.resolve(YourImplementation implementation, ArtifactResolver resolver) ComponentType componentType = resolver.resolve(implementation.getComponentType());
ArtifactResolver.resolve does not seem to take a ComponentType and so I get a compilation error here. 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]