summaryrefslogtreecommitdiffstats
path: root/site/trunk/site-publish/mike-edwards-ramble-through-adding-a-new-component-type.html
diff options
context:
space:
mode:
Diffstat (limited to 'site/trunk/site-publish/mike-edwards-ramble-through-adding-a-new-component-type.html')
-rw-r--r--site/trunk/site-publish/mike-edwards-ramble-through-adding-a-new-component-type.html155
1 files changed, 155 insertions, 0 deletions
diff --git a/site/trunk/site-publish/mike-edwards-ramble-through-adding-a-new-component-type.html b/site/trunk/site-publish/mike-edwards-ramble-through-adding-a-new-component-type.html
new file mode 100644
index 0000000000..a5c090bcae
--- /dev/null
+++ b/site/trunk/site-publish/mike-edwards-ramble-through-adding-a-new-component-type.html
@@ -0,0 +1,155 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+ <HEAD>
+ <LINK type="text/css" rel="stylesheet" href="http://incubator.apache.org/tuscany/stylesheets/default.css">
+ <LINK rel="SHORTCUT ICON" href="http://cwiki.apache.org/confluence/display/TUSCANY/$images/favicon.ico">
+ <TITLE>Mike Edwards Ramble through Adding a New Component Type : Apache Tuscany</TITLE>
+ <META http-equiv="Content-Type" content="text/html;charset=UTF-8"></HEAD>
+
+ <BODY onload="init()">
+
+ <TABLE valign="top" border="0" cellspacing="0" cellpadding="0" width="100%" background="http://incubator.apache.org/tuscany/images/TuscanyLogoNEW_Text_120px_bg.jpg">
+ <TR>
+ <TD valing="top" align="left">
+ <A href="http://cwiki.apache.org/confluence/pages/viewpage.action?spaceKey=TUSCANY&title=$siteroot"><IMG src="http://incubator.apache.org/tuscany/images/TuscanyLogoNEW_Text_120px_bg.jpg" height="91" width="25" border="0"></A>
+ </TD>
+ <TD>
+ <A href="http://incubator.apache.org/tuscany/"><IMG src="http://incubator.apache.org/tuscany/images/TuscanyLogo.jpg" border="0"></A>
+ </TD>
+
+ <TD width="100%">
+ &nbsp;
+ </TD>
+ <TD align="right">
+ <IMG src="http://incubator.apache.org/tuscany/images/apache-incubator-logo.png" border="0">
+ </TD>
+
+ <!-- Adds the edit page link to the top banner-->
+ <TD valign="bottom">
+ <DIV style="padding: 2px 10px; margin: 0px;">
+ <A href="http://cwiki.apache.org/confluence/pages/editpage.action?pageId=53224">
+ <IMG src="http://incubator.apache.org/tuscany/images/notep_16.gif" height="16" width="16" border="0" align="absmiddle" title="Edit Page"></A>
+ </DIV>
+ </TD>
+
+ </TR>
+ </TABLE>
+
+ <TABLE border="0" cellpadding="2" cellspacing="0" width="100%">
+ <TR class="topBar">
+ <TD align="left" valign="middle" class="topBarDiv" nowrap="true" width="100%">
+ &nbsp;<A href="home.html" title="Apache Tuscany">Apache Tuscany</A>&nbsp;&gt;&nbsp;<A href="home.html" title="Home">Home</A>&nbsp;&gt;&nbsp;<A href="sca-overview.html" title="SCA Overview">SCA Overview</A>&nbsp;&gt;&nbsp;<A href="sca-java.html" title="SCA Java">SCA Java</A>&nbsp;&gt;&nbsp;<A href="java-sca-documentation-menu.html" title="Java SCA Documentation Menu">Java SCA Documentation Menu</A>&nbsp;&gt;&nbsp;<A href="sca-java-extension-development-guide.html" title="SCA Java Extension Development Guide">SCA Java Extension Development Guide</A>&nbsp;&gt;&nbsp;<A href="" title="Mike Edwards Ramble through Adding a New Component Type">Mike Edwards Ramble through Adding a New Component Type</A>
+ </TD>
+
+ <TD align="left" valign="middle" class="topBarDiv" nowrap="true">
+ <A href="http://mail-archives.apache.org/mod_mbox/ws-tuscany-user">User List</A> | <A href="http://mail-archives.apache.org/mod_mbox/ws-tuscany-dev">Dev List</A> | <A href="http://issues.apache.org/jira/browse/Tuscany">Issue Tracker</A>&nbsp;&nbsp;
+ </TD>
+ </TR>
+ </TABLE>
+
+ <TABLE border="0" cellpadding="0" width="100%" bgcolor="#FFFFFF">
+ <TR>
+ <TD align="left" valign="top">
+ <DIV id="PageContent">
+
+ <DIV class="pagecontent">
+ <DIV class="wiki-content">
+ <H2><A name="MikeEdwardsRamblethroughAddingaNewComponentType-AddingaNewComponentType"></A>Adding a New Component Type</H2>
+
+<P>(3rd May 2007) I wanted to get the Spring and BPEL component types running with the new Tuscany Java core.&nbsp; This page and those hung off it are my ramblings as I go through the process of building the code for these component types.&nbsp; I hope that these will help anyone else who wants to venture down the path of adding a component type.&nbsp; 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.</P>
+
+<P>Associated with this general page is a set of pages dedicated to <A href="adding-the-spring-component-type.html" title="Adding the Spring Component Type">Adding the Spring Component Type</A> where specifics relating to the Spring implementation are described.</P>
+
+<H2><A name="MikeEdwardsRamblethroughAddingaNewComponentType-BasicInformationaboutcodeforaComponentType%26nbsp%3B"></A>Basic Information about code for a Component Type&nbsp;</H2>
+
+<P>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:</P>
+<UL>
+ <LI>xxxModuleActivator class, which implements the ModuleActivator interface</LI>
+ <LI>ModuleActivator file</LI>
+ <LI>xxxArtifactProcessor class, which processes the XML for an implementation type</LI>
+ <LI>xxxImplementation class, which represents a runtime instance of the implementation type</LI>
+</UL>
+
+
+<H3><A name="MikeEdwardsRamblethroughAddingaNewComponentType-HowdoesaComponentTypeModuledeclaretheXMLthatithandles%3F"></A>How does a Component Type Module declare the XML that it handles?</H3>
+
+<P>For a Component Type module, it is going to handle the XML &lt;implementation.xxx.../&gt;, which is a child of a &lt;component.../&gt; element in the SCDL.</P>
+
+<P>How does the module indicate to the core that it handles the &lt;implementation.xxx.../&gt; element?</P>
+
+<P>TODO: Get an answer to this question....&nbsp;</P>
+
+<H3><A name="MikeEdwardsRamblethroughAddingaNewComponentType-xxxModuleActivatorclass"></A>xxxModuleActivator class</H3>
+
+<P>Called when the Tuscany core is loading, starting and stopping the Module which implements the component type.</P>
+
+<P>Implements ModuleActivator interface, with 3 methods:</P>
+<UL>
+ <LI>start</LI>
+ <LI>stop</LI>
+ <LI>getExtensionPoints</LI>
+</UL>
+
+
+<P>Of these, start() is the most important - it seems possible to get by with the other 2 doing nothing.</P>
+
+<P>Start handles:&nbsp;</P>
+<UL>
+ <LI>Registration of xxxArtifactProcessor, which handles the &lt;implementation.xxx..../&gt; XML</LI>
+ <LI>Registration of xxxComponentBuilder, which builds a component of the type handled by the module</LI>
+ <LI>Registration of xxxPropertyValueObjectFactory</LI>
+</UL>
+
+
+<H3><A name="MikeEdwardsRamblethroughAddingaNewComponentType-TheModuleActivatorfile%26nbsp%3B"></A>The ModuleActivator file&nbsp;</H3>
+
+<P>This must be placed into the location</P>
+
+<P>META-INF/services/org.apache.tuscany.spi.bootstrap.ModuleActivator</P>
+
+<P>... this will be under the Resources directory in the source tree</P>
+
+<P>The file contains the class name for the implementation of your Module, eg:</P>
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-java"># Implementation class <SPAN class="code-keyword">for</SPAN> the ExtensionActivator <SPAN class="code-keyword">for</SPAN> module Foo
+org.apache.tuscany.implementation.foo.FooModuleActivator</PRE>
+</DIV></DIV>
+
+<H3><A name="MikeEdwardsRamblethroughAddingaNewComponentType-ThexxxArtifactProcessorclass"></A>The xxxArtifactProcessor class</H3>
+
+<P>This class is called to deal with the XML in the composite SCDL files which relates to the implementation type - ie. &lt;implementation.xxx.../&gt;</P>
+
+<P>The class is passed an XML stream which it reads and parses out the contents of the &lt;implementation.xxx.../&gt; element, principally getting all of the attributes and child elements (if present).</P>
+
+<P>When the information has been parsed out, the xxxArtifactProcessor class creates an xxxImplementation object which represents the runtime component corresponding to the implementation.xxx element.</P>
+
+<P>One other step that is handled by the xxxArtifactProcessor class is the resolution of the componentType for the component - teasing out its services, references and properties.&nbsp; This is either done by introspection of the implementation (instance) or via reading a componentType side file.&nbsp;</P>
+
+<H3><A name="MikeEdwardsRamblethroughAddingaNewComponentType-xxxImplementationclass"></A>xxxImplementation class</H3>
+
+<P>The xxxImplementation class represents the implementation instances themselves.</P>
+
+<P>Implements the org.apache.tuscany.assembly.Implementation interface&nbsp;</P>
+ </DIV>
+ </DIV>
+ </DIV>
+ </TD>
+ </TR>
+ </TABLE>
+
+ <SCRIPT src="http://www.google-analytics.com/urchin.js" type="text/javascript">
+ </SCRIPT>
+ <SCRIPT type="text/javascript">
+ _uacct = "UA-1174707-5";
+ urchinTracker();
+ </SCRIPT>
+
+ <A href="http://www.statcounter.com/" target="_blank"><IMG src="http://c26.statcounter.com/counter.php?sc_project=2619156&java=0&security=94bd7e7d&invisible=0" alt="website stats" border="0"></A>
+
+ <DIV class="footer">
+ Copyright &copy; 2003-2007, The Apache Software Foundation&nbsp;&nbsp;
+ </DIV>
+
+ </BODY>
+</HTML> \ No newline at end of file