(3rd May 2007) This pages and the pages hung off it describe the creation of the module which supports the Spring Component Type that I am working on for a demo. This might be useful to anyone looking to build their own Component Type implementation.
Sequence
Order |
Work Item |
Comment |
---|---|---|
0 |
implementation-spring module created |
|
1 |
Created ModuleActivator file |
Points at the SpringModuleActivator class |
2 |
Create SpringModuleActivator class |
Core of the Spring implementation module |
3 |
Create SpringArtifactProcessor class |
Reads the implementation.spring xml in the composite file |
4 |
Create SpringXMLComponentTypeLoader class |
Reads the Spring application context and introspects the Beans referenced from it to determine the component type of the Spring implementation (ie Services, References, Properties) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ModuleActivator file
Placed into the resources/META-INF/services directory:
# Implementation class for the ExtensionActivator org.apache.tuscany.implementation.script.ScriptModuleActivator
SpringModuleActivator class
Constructor
Creates resources used by other parts of the Module implementation:
- AssemblyFactory
- JavaInterfaceFactory
- PolicyFactory
start()
Takes an ExtensionPointRegistry as input parameter, which provides access to configuration of the core.
- Creates a SpringArtifactProcessor and adds to the registry StAXArtifactProcessors
- Creates a SpringImplementationProviderFactory and adds to the registry ProviderFactories
Creates a series of artifacts that are required by the SpringArtifactProcessor and SpringImplementationProviderFactory:
- ExtensibleJavaInterfaceIntrospector (used to introspect Spring Beans)
- JavaPropertyValueObjectFactory
stop()
Removes the SpringArtifactProcessor from the registry StAXArtifactProcessors
getExtensionPoints()
Returns a very simple DefaultJavaClassIntrospectorExtensionPoint.
SpringArtifactProcessor class
Handles the <implementation.spring..../> element used in composite files.
Constructor
Takes a series of classes used in loading & resolution:
- AssemblyFactory
- JavaInterfaceFactory
- JavaInterfaceIntrospector
- PolicyFactory
- JavaPropertyValueObjectFactor
read()
Reads the <implementation.spring.../> element from the composite.
Gets the location attribute - throws an exception if the attribute is missing.
Creates a SpringImplementation instance, sets its location field and returns it.
resolve()
Given the SpringImplementation instance and a ModelResolver, gets the ComponentType for the implementation.
Does this by invoking SpringXMLComponentTypeLoader.load() - will follow up by reading a side file if this does not fully resolve the component type.
getArtifactType()
Returns the fully qualified name of the implementation.spring element (includes the SCA namespace...)
SpringXMLComponentTypeLoader class
Resolution of the ComponentType of Spring application context
ComponentType of the Spring application-context is performed by reading the application-context.xml file and by introspecting the Java beans which it references. This is done by the SpringXMLComponentTypeLoader class.