summaryrefslogtreecommitdiffstats
path: root/site/trunk/site-publish/adding-the-spring-implementation-type.html
diff options
context:
space:
mode:
Diffstat (limited to 'site/trunk/site-publish/adding-the-spring-implementation-type.html')
-rw-r--r--site/trunk/site-publish/adding-the-spring-implementation-type.html273
1 files changed, 273 insertions, 0 deletions
diff --git a/site/trunk/site-publish/adding-the-spring-implementation-type.html b/site/trunk/site-publish/adding-the-spring-implementation-type.html
new file mode 100644
index 0000000000..e9718e06cc
--- /dev/null
+++ b/site/trunk/site-publish/adding-the-spring-implementation-type.html
@@ -0,0 +1,273 @@
+
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE- 2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+ <HEAD>
+ <!-- generateKeywords macro -->
+ <META name="description" content="Apache Tuscany">
+ <META name="keywords" content="apache, apache tuscany, tuscany, service, services, fabric, soa, service oriented architecture, sca, service component architecture, das, sdo, csa, ruby, opensource">
+ <!-- generateKeywords macro end -->
+
+ <LINK type="text/css" rel="stylesheet" href="http://tuscany.apache.org/stylesheets/default.css">
+ <LINK rel="SHORTCUT ICON" href="https://cwiki.apache.org/confluence/display/TUSCANY/$images/favicon.ico">
+ <TITLE>Apache Tuscany : Adding the Spring Implementation Type</TITLE>
+ <META http-equiv="Content-Type" content="text/html;charset=UTF-8"></HEAD>
+
+ <BODY onload="init()">
+ <!-- topNav macro -->
+ <TABLE valign="top" border="0" cellspacing="0" cellpadding="0" width="100%" background="http://tuscany.apache.org/images/TuscanyLogoNEW_Text_120px_bg.jpg">
+ <TR>
+ <TD valing="top" align="left">
+ <A href="https://cwiki.apache.org/confluence/pages/viewpage.action?spaceKey=TUSCANY&title=$siteroot"><IMG src="http://tuscany.apache.org/images/TuscanyLogoNEW_Text_120px_bg.jpg" height="91" width="25" border="0"></A>
+ </TD>
+ <TD>
+ <A href="http://tuscany.apache.org/"><IMG src="http://tuscany.apache.org/images/TuscanyLogo.jpg" border="0"></A>
+ </TD>
+
+ <TD width="100%">
+ &nbsp;
+ </TD>
+
+ <!-- Adds the edit page link to the top banner-->
+ <TD valign="bottom">
+ <DIV style="padding: 2px 10px; margin: 0px;">
+ <A href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=53225">
+ <IMG src="http://tuscany.apache.org/images/notep_16.gif" height="16" width="16" border="0" align="absmiddle" title="Edit Page"></A>
+ </DIV>
+ </TD>
+
+ </TR>
+ </TABLE>
+ <!-- topNav macro end -->
+
+ <!-- breadCrumbs macro -->
+ <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="mike-edwards-ramble-through-adding-a-new-implementation-type.html" title="Mike Edwards Ramble through Adding a New Implementation Type">Mike Edwards Ramble through Adding a New Implementation Type</A>&nbsp;&gt;&nbsp;<A href="" title="Adding the Spring Implementation Type">Adding the Spring Implementation Type</A>
+ </TD>
+
+ <TD align="right" valign="middle" class="topBarDiv" align="left" nowrap="true">
+ <A href="http://mail-archives.apache.org/mod_mbox/tuscany-user">User List</A> | <A href="http://mail-archives.apache.org/mod_mbox/tuscany-dev">Dev List</A> | <A href="http://issues.apache.org/jira/browse/Tuscany">Issue Tracker</A>&nbsp;&nbsp;
+ </TD>
+ </TR>
+ </TABLE>
+ <!-- breadCrumbs macro end -->
+
+
+ <TABLE border="0" cellpadding="0" width="100%" bgcolor="#FFFFFF">
+ <TR>
+ <TD align="left" valign="top">
+
+ <!-- pageContent macro -->
+ <DIV id="PageContent">
+
+ <DIV class="pagecontent">
+ <DIV class="wiki-content">
+ <P>(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.</P>
+
+<H2><A name="AddingtheSpringImplementationType-Sequence"></A>Sequence</H2>
+
+<DIV class="table-wrap">
+<TABLE class="confluenceTable"><TBODY>
+<TR>
+<TH class="confluenceTh"> Order </TH>
+<TH class="confluenceTh"> Work Item <BR class="atl-forced-newline"> </TH>
+<TH class="confluenceTh"> Comment </TH>
+</TR>
+<TR>
+<TD class="confluenceTd"> 0 <BR class="atl-forced-newline"> </TD>
+<TD class="confluenceTd"> implementation-spring module created <BR class="atl-forced-newline">
+<BR class="atl-forced-newline">
+org.apache.tuscany.implementation.spring package </TD>
+<TD class="confluenceTd">&nbsp;</TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> 1 </TD>
+<TD class="confluenceTd"> Created ModuleActivator file <BR class="atl-forced-newline"> </TD>
+<TD class="confluenceTd"> Points at the SpringModuleActivator class <BR class="atl-forced-newline"> </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> 2 </TD>
+<TD class="confluenceTd"> Create SpringModuleActivator class </TD>
+<TD class="confluenceTd"> Core of the Spring implementation module </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> 3 <BR class="atl-forced-newline"> </TD>
+<TD class="confluenceTd"> Create SpringArtifactProcessor class <BR class="atl-forced-newline"> </TD>
+<TD class="confluenceTd"> Reads the implementation.spring xml in the composite file <BR class="atl-forced-newline">
+ &#45; one required attribute = location, which specifies the location of the Spring application context <BR class="atl-forced-newline">
+ Creates the implementationSpring instance <BR class="atl-forced-newline">
+ Initiates resolution of the componentType of the Spring application context by calling SpringXMLComponentTypeLoader <BR class="atl-forced-newline"> </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> 4 <BR class="atl-forced-newline"> </TD>
+<TD class="confluenceTd"> Create SpringXMLComponentTypeLoader class <BR class="atl-forced-newline"> </TD>
+<TD class="confluenceTd"> 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) <BR class="atl-forced-newline"> </TD>
+</TR>
+<TR>
+<TD class="confluenceTd">&nbsp;</TD>
+<TD class="confluenceTd">&nbsp;</TD>
+<TD class="confluenceTd">&nbsp;</TD>
+</TR>
+<TR>
+<TD class="confluenceTd">&nbsp;</TD>
+<TD class="confluenceTd">&nbsp;</TD>
+<TD class="confluenceTd">&nbsp;</TD>
+</TR>
+<TR>
+<TD class="confluenceTd">&nbsp;</TD>
+<TD class="confluenceTd">&nbsp;</TD>
+<TD class="confluenceTd">&nbsp;</TD>
+</TR>
+<TR>
+<TD class="confluenceTd">&nbsp;</TD>
+<TD class="confluenceTd">&nbsp;</TD>
+<TD class="confluenceTd">&nbsp;</TD>
+</TR>
+<TR>
+<TD class="confluenceTd">&nbsp;</TD>
+<TD class="confluenceTd">&nbsp;</TD>
+<TD class="confluenceTd">&nbsp;</TD>
+</TR>
+</TBODY></TABLE>
+</DIV>
+
+
+<H2><A name="AddingtheSpringImplementationType-ModuleActivatorfile"></A>ModuleActivator file</H2>
+
+<P>Placed into the resources/META-INF/services directory:</P>
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java"># Implementation class <SPAN class="code-keyword">for</SPAN> the ExtensionActivator
+org.apache.tuscany.implementation.script.ScriptModuleActivator
+</PRE>
+</DIV></DIV>
+
+<H2><A name="AddingtheSpringImplementationType-SpringModuleActivatorclass%26nbsp%3B"></A>SpringModuleActivator class&nbsp;</H2>
+
+
+<H4><A name="AddingtheSpringImplementationType-Constructor"></A>Constructor</H4>
+
+<P>Creates resources used by other parts of the Module implementation:</P>
+<UL>
+ <LI>AssemblyFactory</LI>
+ <LI>JavaInterfaceFactory</LI>
+ <LI>PolicyFactory</LI>
+</UL>
+
+
+<H4><A name="AddingtheSpringImplementationType-start%28%29"></A>start()</H4>
+
+<P>Takes an ExtensionPointRegistry as input parameter, which provides access to configuration of the core.</P>
+<UL>
+ <LI>Creates a SpringArtifactProcessor and adds to the registry StAXArtifactProcessors</LI>
+ <LI>Creates a SpringImplementationProviderFactory and adds to the registry ProviderFactories</LI>
+</UL>
+
+
+<P>Creates a series of artifacts that are required by the SpringArtifactProcessor and SpringImplementationProviderFactory:</P>
+<UL>
+ <LI>ExtensibleJavaInterfaceIntrospector (used to introspect Spring Beans)</LI>
+ <LI>JavaPropertyValueObjectFactory</LI>
+</UL>
+
+
+<H4><A name="AddingtheSpringImplementationType-stop%28%29"></A>stop()</H4>
+
+<P>Removes the SpringArtifactProcessor from the registry StAXArtifactProcessors&nbsp;</P>
+
+<H4><A name="AddingtheSpringImplementationType-getExtensionPoints%28%29%26nbsp%3B"></A>getExtensionPoints()&nbsp;</H4>
+
+<P>Returns a very simple DefaultJavaClassIntrospectorExtensionPoint.&nbsp;</P>
+
+<H2><A name="AddingtheSpringImplementationType-SpringArtifactProcessorclass%26nbsp%3B"></A>SpringArtifactProcessor class&nbsp;</H2>
+
+<P>Handles the &lt;implementation.spring..../&gt; element used in composite files.</P>
+
+<H4><A name="AddingtheSpringImplementationType-Constructor"></A>Constructor</H4>
+
+<P>Takes a series of classes used&nbsp; in loading &amp; resolution:</P>
+<UL>
+ <LI>AssemblyFactory</LI>
+ <LI>JavaInterfaceFactory</LI>
+ <LI>JavaInterfaceIntrospector</LI>
+ <LI>PolicyFactory&nbsp;</LI>
+ <LI>JavaPropertyValueObjectFactor</LI>
+</UL>
+
+
+<H4><A name="AddingtheSpringImplementationType-read%28%29"></A>read()</H4>
+
+<P>Reads the &lt;implementation.spring.../&gt; element from the composite.</P>
+
+<P>Gets the <B><EM>location</EM></B> attribute - throws an exception if the attribute is missing.&nbsp;</P>
+
+<P>Creates a SpringImplementation instance, sets its location field and returns it.&nbsp;</P>
+
+<H4><A name="AddingtheSpringImplementationType-resolve%28%29%26nbsp%3B"></A>resolve()&nbsp;</H4>
+
+<P>Given the SpringImplementation instance and a ModelResolver, gets the ComponentType for the implementation.</P>
+
+<P>Does this by invoking&nbsp; SpringXMLComponentTypeLoader.load() - will follow up by reading a side file if this does not fully resolve the component type.</P>
+
+
+<H4><A name="AddingtheSpringImplementationType-getArtifactType%28%29%26nbsp%3B"></A>getArtifactType()&nbsp;</H4>
+
+<P>Returns the fully qualified name of the implementation.spring element (includes the SCA namespace...) &nbsp;</P>
+
+<H2><A name="AddingtheSpringImplementationType-%26nbsp%3BSpringXMLComponentTypeLoaderclass"></A>&nbsp;SpringXMLComponentTypeLoader class</H2>
+
+
+<OL>
+ <LI>&nbsp;</LI>
+</OL>
+
+
+<H3><A name="AddingtheSpringImplementationType-ResolutionoftheComponentTypeofSpringapplicationcontext"></A>Resolution of the ComponentType of Spring application context</H3>
+
+<P>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.</P>
+ </DIV>
+ </DIV>
+ </DIV>
+ <!-- pageContent macro end -->
+
+ </TD>
+ </TR>
+ </TABLE>
+
+ <!-- footer macro -->
+ <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 � 2003-2012, The Apache Software Foundation&nbsp;&nbsp;</BR>
+ Apache Tuscany and the Apache Tuscany project logo are trademarks of The Apache Software Foundation.
+ </DIV>
+ <!-- footer macro end -->
+
+ </BODY>
+</HTML>