This page is being used to collate information on how people can add extensions to Tuscany to provide new functions such as support for different implementation languages or network bindings. Once we're happy with the documentation we will transfer this to the main project website.
General Principles
We wanted to make sure that Tuscany could be extended in simple but flexible way. To that end, we based the extension model on the SCA Assembly Model itself and allow extensions to be contributed as Module Fragments. Each fragment contains an XML file containing part of an SCA assembly which can be used to define components and wire them together. This guide assumes familiarity with the SCA Assembly Model.
To separate extension code from application code, we introduced a "system" implementation type for components. This "system" type supports Java components in a way that is similar to the Java programming model from the specification but with a few additional privileges that let them become part of the runtime. For more details on "system" components, including what privileges and limitations they have, please check out /SystemComponents
To extend Tuscany, you simply add system components into the assembly that defines the runtime. This adds functionality, functionality that can be used to support a new programming language for components, new ways of communicating in and out of the system, new services that can be made available to applications, anything really ...
In practice, there are a few well defined types of extension that people typically want to add:
Many of these extensions need to integrate into the process that is used to deploy application components. For example, when a user uses a new implementation type in their assembly file, the extension that provides that new implementation needs to be activated during deployment so that it can create the component they defined.
More detailed information on the general deployment process can be found in /DeploymentProcess but in brief there are three touchpoints where extensions need to interact with it:
Details on implementing these can be found in the linked subpages.