Adding a New Component Type
(3rd May 2007) I wanted to get the Spring and BPEL component types running with the new Tuscany Java core. This page and those hung off it are my ramblings as I go through the process of building the code for these component types. I hope that these will help anyone else who wants to venture down the path of adding a component type. Beware that I make no claims as to great insight or special knowledge - and I am sure that there will be things that I have not tackled.
Associated with this general page is a set of pages dedicated to Adding the Spring Component Type where specifics relating to the Spring implementation are described.
Basic Information about code for a Component Type
To create a Module which supports a Component Type, you need to implement a series of interfaces to the Tuscany Core, plus a set of related files which declare your Module to the core:
- xxxModuleActivator, which implements the ModuleActivator interface
- ModuleActivator file
How does a Component Type Module declare the XML that it handles?
For a Component Type module, it is going to handle the XML <implementation.xxx.../>, which is a child of a <component.../> element in the SCDL.
How does the module indicate to the core that it handles the <implementation.xxx.../> element?
TODO: Get an answer to this question....
xxxModuleActivator class
Called when the Tuscany core is loading, starting and stopping the Module which implements the component type.
Implements ModuleActivator interface, with 3 methods:
- start
- stop
- getExtensionPoints
Of these, start() is the most important - it seems possible to get by with the other 2 doing nothing.
Start handles:
- Registration of xxxArtifactProcessor, which handles the <implementation.xxx..../> XML
- Registration of xxxComponentBuilder, which builds a component of the type handled by the module
- Registration of xxxPropertyValueObjectFactory
The ModuleActivator file
This must be placed into the location
META-INF/services/org.apache.tuscany.spi.bootstrap.ModuleActivator
... this will be under the Resources directory in the source tree
The file contains the class name for the implementation of your Module, eg:
# Implementation class for the ExtensionActivator for module Foo org.apache.tuscany.implementation.foo.FooModuleActivator