﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Allen Young</title><link>http://www.blogjava.net/AllenYoung/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 00:05:13 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 00:05:13 GMT</pubDate><ttl>60</ttl><item><title>为何不让SOA变得简单？</title><link>http://www.blogjava.net/AllenYoung/archive/2006/05/12/45787.html</link><dc:creator>Allen Young</dc:creator><author>Allen Young</author><pubDate>Fri, 12 May 2006 02:26:00 GMT</pubDate><guid>http://www.blogjava.net/AllenYoung/archive/2006/05/12/45787.html</guid><wfw:comment>http://www.blogjava.net/AllenYoung/comments/45787.html</wfw:comment><comments>http://www.blogjava.net/AllenYoung/archive/2006/05/12/45787.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/AllenYoung/comments/commentRss/45787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AllenYoung/services/trackbacks/45787.html</trackback:ping><description><![CDATA[
		<font face="Courier New" size="2">转载自<a href="http://blog.csdn.net/donkeyzheng/">Rinso的专栏</a><br /><br /><a target="_blank" class="" title="" href="http://blog.csdn.net/donkeyzheng/archive/2006/05/11/724026.aspx">原文</a><br /></font>
<img src ="http://www.blogjava.net/AllenYoung/aggbug/45787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AllenYoung/" target="_blank">Allen Young</a> 2006-05-12 10:26 <a href="http://www.blogjava.net/AllenYoung/archive/2006/05/12/45787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SCA Assembly Model - Module</title><link>http://www.blogjava.net/AllenYoung/archive/2006/04/25/43043.html</link><dc:creator>Allen Young</dc:creator><author>Allen Young</author><pubDate>Tue, 25 Apr 2006 07:58:00 GMT</pubDate><guid>http://www.blogjava.net/AllenYoung/archive/2006/04/25/43043.html</guid><wfw:comment>http://www.blogjava.net/AllenYoung/comments/43043.html</wfw:comment><comments>http://www.blogjava.net/AllenYoung/archive/2006/04/25/43043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AllenYoung/comments/commentRss/43043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AllenYoung/services/trackbacks/43043.html</trackback:ping><description><![CDATA[
		<font face="Courier New" size="2">SCA
Module是紧耦合component的最大的组合物，同时也是松耦合SCA
System中的基本单元，也就是说，很多紧耦合的东东组成Module，然后很多Module组成松耦合的System。我们都知道一味的紧耦合及松耦
合都是不好的，过分的紧耦合会降低系统的灵活性、可重用性等，而过分的松耦合会导致系统性能的下降、开发难度增加、代码不直观、测试难做等，因此，选择一
个合适的紧耦合和松耦合之间的临界点是很重要的，而Module就是这个临界点。<br /><br />Module有如下几个标准特性：<br /></font>
		<ol>
				<li>
						<font face="Courier New" size="2">定义了Component可见性的边界，Component不可以在Module之外直接被引用。</font>
				</li>
				<li>
						<font face="Courier New" size="2">在同一个Module内，Service的本地调用采用by-reference语义（除了声明为remotable的接口）。在Module之间，Service的远程调用采用by-value语义。</font>
				</li>
				<li>
						<font face="Courier New" size="2">定义了部署的单元。Module用来为SCA System提供business service。</font>
				</li>
		</ol>
		<font face="Courier New" size="2">Module由sca.module中的module元素定义。下面是module的schema：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml version="1.0" encoding="ASCII"</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">module </span><span style="color: rgb(255, 0, 0);">xmlns</span><span style="color: rgb(0, 0, 255);">=”http://www.osoa.org/xmlns/sca/0.9”<br />    </span><span style="color: rgb(255, 0, 0);">xmlns:v</span><span style="color: rgb(0, 0, 255);">="http://www.osoa.org/xmlns/sca/values/0.9"</span><span style="color: rgb(255, 0, 0);"> name</span><span style="color: rgb(0, 0, 255);">="xs:NCName"</span><span style="color: rgb(0, 0, 255);">&gt;<br /><br /></span><span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">entryPoint </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="xs:NCName"</span><span style="color: rgb(255, 0, 0);"> multiplicity</span><span style="color: rgb(0, 0, 255);">="0..1 or 1..1 or 0..n or 1..n"</span><span style="color: rgb(255, 0, 0);"> ?</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">*<br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.interface-type </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">binding</span><span style="color: rgb(255, 0, 0);">.binding-type uri</span><span style="color: rgb(0, 0, 255);">="xs:anyURI"</span><span style="color: rgb(255, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);">+<br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">reference</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">wire-target-URI</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">reference</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">entryPoint</span><span style="color: rgb(0, 0, 255);">&gt;<br /><br /></span><span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">component </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="xs:NCName"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">*<br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">implementation</span><span style="color: rgb(255, 0, 0);">.implementation-type </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">properties</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">?<br />            </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">v:property-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">property-value</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">v:property-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">+<br />        </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">properties</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">references</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">?<br />            </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">v:reference-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">wire-target-URI</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">v:reference-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">+<br />        </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">references</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">component</span><span style="color: rgb(0, 0, 255);">&gt;<br /><br /></span><span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">externalService </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="xs:NCName"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">*<br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.interface-type </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);">+<br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">binding</span><span style="color: rgb(255, 0, 0);">.binding-type uri</span><span style="color: rgb(0, 0, 255);">="xs:anyURI"</span><span style="color: rgb(255, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);">*<br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">externalService</span><span style="color: rgb(0, 0, 255);">&gt;<br /><br /></span><span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">wire</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">*<br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">source</span><span style="color: rgb(255, 0, 0);">.uri</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">wire-source-URI</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">source.uri</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">target</span><span style="color: rgb(255, 0, 0);">.uri</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">wire-target-URI</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">target.uri</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">wire</span><span style="color: rgb(0, 0, 255);">&gt;<br /><br /></span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">module</span><span style="color: rgb(0, 0, 255);">&gt;</span></div><br /></font>
		<font size="+0">
				<font face="Courier New" size="2">
						<span style="color: rgb(0, 0, 255);">&lt;</span>
						<span style="color: rgb(128, 0, 0);">module</span>
						<span style="color: rgb(0, 0, 255);">/&gt;</span>
				</font>
		</font>
		<font face="Courier New" size="2">的name属性表示module的名字，在一个SCA System中是唯一的。这个名字不能包含/或#字符。<br /></font>
		<font size="+0">
				<font face="Courier New" size="2">
						<span style="color: rgb(0, 0, 255);">&lt;</span>
						<span style="color: rgb(128, 0, 0);">module</span>
						<span style="color: rgb(0, 0, 255);">/&gt;</span>
				</font>
		</font>
		<font face="Courier New" size="2">包含0或n个</font>
		<font size="+0">
				<font face="Courier New" size="2">
						<span style="color: rgb(0, 0, 255);">&lt;</span>
						<span style="color: rgb(128, 0, 0);">entryPoint</span>
						<span style="color: rgb(0, 0, 255);">/&gt;</span>
				</font>
		</font>
		<font face="Courier New" size="2">、</font>
		<font size="+0">
				<font face="Courier New" size="2">
						<span style="color: rgb(0, 0, 0);">
						</span>
						<span style="color: rgb(0, 0, 255);">&lt;</span>
						<span style="color: rgb(128, 0, 0);">component </span>
						<span style="color: rgb(0, 0, 255);">/&gt;</span>
				</font>
		</font>
		<font face="Courier New" size="2">、</font>
		<font size="+0">
				<font face="Courier New" size="2">
						<span style="color: rgb(0, 0, 255);">&lt;</span>
						<span style="color: rgb(128, 0, 0);">externalService</span>
						<span style="color: rgb(0, 0, 255);">/&gt;</span>
				</font>
		</font>
		<font face="Courier New" size="2">、</font> <font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">wire</span><span style="color: rgb(0, 0, 255);"> /&gt;</span></font></font><font face="Courier New" size="2">元素，这些元素的含义在之前的<a href="/AllenYoung/archive/2006/04/25/43019.html">随笔</a>中
已经说过。Component包含Module的业务逻辑，Wire描述Component之间的Service的连接，Entry
Point定义Module提供的、可供外部访问的public service，External
Service表示Module对外部Service的依赖。<br /></font><h1><font face="Courier New" size="2">Component</font></h1><font face="Courier New" size="2">Component
是Implementation的配置实例，它即提供
Service也消费Service。多个Component可以使用并配置同一个Implementation，只要每个Component都采用不同
的配置。Implementation通过component
type来定义可由Component配置的aspect。SCA支持多种不同的实现技术，如Java、BEPL、C++。SCA定义了一种可扩展机制来
引入新类型的Implementation。目前的规范不指定必须被SCA
runtime支持的实现技术，供应商可以选择他们认为重要的技术予以支持。我们来看一下Component的schema：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">component </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="xs:NCName"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">*<br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">implementation</span><span style="color: rgb(255, 0, 0);">.implementation-type </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">properties</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">?<br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">v:property-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">property-value</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">v:property-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">+<br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">properties</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">references</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">?<br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">v:reference-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">wire-target-URI</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">v:reference-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">+<br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">references</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">component</span><span style="color: rgb(0, 0, 255);">&gt;</span></div></font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">component</span><span style="color: rgb(0, 0, 255);"> /&gt;</span></font></font><font face="Courier New" size="2">的name属性表示这个component的名字，它必须在当前module中是唯一的。另外，当前module中的entry point和external servic不可以和component重名。<br /></font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">component</span><span style="color: rgb(0, 0, 255);"> /&gt;</span></font></font><font face="Courier New" size="2">必
须有一个implementation子元素，它指向component的具体实现。implementation元素的名字由两部分组成：
"implementation"+代表implementation-type的限定词，例如：implementation.java表示是由
Java来实现，</font><font face="Courier New" size="2">implementation.bepl表示是由BPEL来实现。<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">implementation</span><span style="color: rgb(255, 0, 0);">.java class</span><span style="color: rgb(0, 0, 255);">="services.myvalue.MyValueServiceImpl"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">implementation</span><span style="color: rgb(255, 0, 0);">.bpel process</span><span style="color: rgb(0, 0, 255);">="…"</span><span style="color: rgb(0, 0, 255);">/&gt;</span></div></font><h1><font face="Courier New" size="2">Component Type</font></h1><font face="Courier New" size="2">Component
Type表示一个Implementation的可配置的东东，它由Implementation提供的Service、可设置的关联到其他
Service的Reference和可设置的属性组成。属性和Reference将在使用这个Implementation的Component中具体
配置。<br />确定一个Component Type需要两个步骤：<br /></font><ol><li><font face="Courier New" size="2">从Implementation自身获得信息（例如：从code annotation获得信息）</font></li><li><font face="Courier New" size="2">从SCA component type文件获得信息（XML配置文件）</font></li></ol><font face="Courier New" size="2">这是时下流行的做法，既可以从code annotation进行配置，也可以从XML进行配置，如果两者同时使用，code annotation的优先级高，但是两者的配置要统一。<br /></font><font face="Courier New" size="2">SCA component type文件的扩展名为".componentType"，其中通过componentType元素来进行配置，我们来看看它的schema：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml version="1.0" encoding="ASCII"</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">componentType </span><span style="color: rgb(255, 0, 0);">xmlns</span><span style="color: rgb(0, 0, 255);">="http://www.osoa.org/xmlns/sca/0.9"</span><span style="color: rgb(255, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">&gt;<br /></span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">    &lt;</span><span style="color: rgb(128, 0, 0);">service </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="xs:NCName"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">*<br /></span><span style="color: rgb(0, 0, 255);">        &lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.interface-type</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">    &lt;/</span><span style="color: rgb(128, 0, 0);">service</span><span style="color: rgb(0, 0, 255);">&gt;<br /></span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">    &lt;</span><span style="color: rgb(128, 0, 0);">reference </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="xs:NCName"</span><span style="color: rgb(255, 0, 0);"> multiplicity</span><span style="color: rgb(0, 0, 255);">="0..1 or 1..1 or 0..n or 1..n"</span><span style="color: rgb(255, 0, 0);">?</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">*<br /></span><span style="color: rgb(0, 0, 255);">        &lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.interface-type</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">    &lt;/</span><span style="color: rgb(128, 0, 0);">reference</span><span style="color: rgb(0, 0, 255);">&gt;<br /></span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">    &lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="xs:NCName"</span><span style="color: rgb(255, 0, 0);"> type</span><span style="color: rgb(0, 0, 255);">="xs:QName"</span><span style="color: rgb(255, 0, 0);"> many</span><span style="color: rgb(0, 0, 255);">="xs:boolean"</span><span style="color: rgb(255, 0, 0);">? default</span><span style="color: rgb(0, 0, 255);">="xs:string"</span><span style="color: rgb(255, 0, 0);">? required</span><span style="color: rgb(0, 0, 255);">="xs:boolean"</span><span style="color: rgb(255, 0, 0);">?</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);">*<br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">componentType</span><span style="color: rgb(0, 0, 255);">&gt;</span></div></font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">service </span><span style="color: rgb(255, 0, 0);"></span><span style="color: rgb(0, 0, 255);">/&gt;</span></font></font><font face="Courier New" size="2">表示这个Component Type提供的Service，可以通过</font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.interface-type</span><span style="color: rgb(0, 0, 255);"> /&gt;<font color="#000000">设置其为remotable。</font></span></font></font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">reference </span><span style="color: rgb(255, 0, 0);"></span><span style="color: rgb(0, 0, 255);">/&gt;</span></font></font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">表示这个Component Type依赖的其他Service，也</font></span></font></font><font face="Courier New" size="2">可以通过</font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.interface-type </span><span style="color: rgb(0, 0, 255);">/&gt;<font color="#000000">设置其为remotable，multiplicity属性表示可以关联到这个Reference的Wire的数量。</font></span></font></font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);"></span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"></span></font></font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">表示这个</font></span></font></font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">Component Type</font></span></font></font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">可配置的属性。<br />让我们来看一个例子，Java文件MyValueServiceImpl是这个例子中的Implementation，其SCA component type如下：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml version="1.0" encoding="ASCII"</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">componentType </span><span style="color: rgb(255, 0, 0);">xmlns</span><span style="color: rgb(0, 0, 255);">="http://www.osoa.org/xmlns/sca/0.9"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">    &lt;</span><span style="color: rgb(128, 0, 0);">service </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="MyValueService"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">        &lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.java interface</span><span style="color: rgb(0, 0, 255);">="services.myvalue.MyValueService"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">    &lt;/</span><span style="color: rgb(128, 0, 0);">service</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">    &lt;</span><span style="color: rgb(128, 0, 0);">reference </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="customerService"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">        &lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.java interface</span><span style="color: rgb(0, 0, 255);">="services.customer.CustomerService"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">    &lt;/</span><span style="color: rgb(128, 0, 0);">reference</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">    &lt;</span><span style="color: rgb(128, 0, 0);">reference </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="stockQuoteService"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">        &lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.java interface</span><span style="color: rgb(0, 0, 255);">="services.stockquote.StockQuoteService"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">    &lt;/</span><span style="color: rgb(128, 0, 0);">reference</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">    &lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="currency"</span><span style="color: rgb(255, 0, 0);"> type</span><span style="color: rgb(0, 0, 255);">="xsd:string"</span><span style="color: rgb(255, 0, 0);"> default</span><span style="color: rgb(0, 0, 255);">="USD"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">componentType</span><span style="color: rgb(0, 0, 255);">&gt;</span></div></font></span></font></font><p><font size="2"><font face="Courier New">相应的Java代码如下：<br /></font></font></p><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> MyValueService interface.</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);"> services.myvalue;<br /><br /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">interface</span><span style="color: rgb(0, 0, 0);"> MyValueService {<br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> calculate();<br />}</span></div><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> MyValueServiceImpl class</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);"> services.myvalue;<br /><br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> services.customer.CustomerService;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> services.stockquote.StockQuoteService;<br /><br /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> MyValueServiceImpl </span><span style="color: rgb(0, 0, 255);">implements</span><span style="color: rgb(0, 0, 0);"> MyValueService {<br /><br />    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> Code annotation. 和XML的功能相同，两者取一个使用就够了。</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">    @Property<br />    </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> String currency </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">USD</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><br />    @Reference<br />    </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> CustomerService customerService;<br /><br />    @Reference<br />    </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> StockQuoteService stockQuoteService;<br /><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> calculate() {<br />        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> do your real business logic here.</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">    }<br />}<br /></span></div><br /><p></p><p><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"></span></font></font></p><h1><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">Implementation</font></span></font></font></h1><h1><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"></span></font></font></h1><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">Implementation
是业务逻辑的具体实现，这些业务逻辑会提供或消费Service。SCA支持多种实现技术，如Java、BPEL或C++。我们已经知道，
Service、Reference和Property是Implementation中关于配置的东东，他们组成Component
Type。在运行时，Implementation
Instance是Implementation的实例化，它提供的业务逻辑和Implementation中的相同，但Property和
Reference则取决于Component中的配置。下图描述了Component
Type、Component、Implementation和Implementation Instance之间的关系：<br /><img src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=632780334478750000" height="1" width="1" /><img alt="SCA-relationship-between-implementation-and-implementation-instance.PNG" src="http://www.blogjava.net/images/blogjava_net/allenyoung/SCA-relationship-between-implementation-and-implementation-instance.PNG" border="0" height="672" width="1041" /><br /></font></span></font></font><h1><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">Interface</font></span></font></font></h1><h1><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"></span></font></font></h1><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">Interface
负责定义一个或多个business function。这些business
function通过Service提供给外部，外部通过Reference使用它们。Service由自己实现的Interface定义。SCA支持如
下3种Interface：<br /></font></span></font></font><ul><li><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">Java interfaces</font></span></font></font></li><li><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">WSDL 1.1 portTypes</font></span></font></font></li><li><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">WSDL 2.0 interfaces</font></span></font></font></li></ul><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">我们一个一个来看：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.java interface</span><span style="color: rgb(0, 0, 255);">="NCName"</span><span style="color: rgb(255, 0, 0);"> … </span><span style="color: rgb(0, 0, 255);">/&gt;</span></div>其中interface属性为Java interface的全名（包括package）。例如：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.java interface</span><span style="color: rgb(0, 0, 255);">="services.stockquote.StockQuoteService"</span><span style="color: rgb(0, 0, 255);"> /&gt;</span></div><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.wsdl interface</span><span style="color: rgb(0, 0, 255);">="xs:anyURI"</span><span style="color: rgb(255, 0, 0);"> … </span><span style="color: rgb(0, 0, 255);">/&gt;</span></div>其中interface属性为portType/interface的URI，其格式为&lt;WSDL-namespace-URI&gt;#wsdl.interface(&lt;portType or Interface-name&gt;)。例如：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">interface</span><span style="color: rgb(255, 0, 0);">.wsdl interface</span><span style="color: rgb(0, 0, 255);">="http://www.stockquote.org/StockQuoteService#</span><font color="#0000ff"><span style="color: rgb(255, 0, 0);">wsdl.interface(StockQuote)"</span></font><span style="color: rgb(0, 0, 255);">/&gt;</span></div><br />如果使用Java interface，Service方法的传入参数和返回值可以使用Java class或Primitive type。最好使用SDO生成的Java class，因为它们和XML之间做了整合。（SDO也是IBM推出的一个SOA系列的标准。）<br />如果使用WSDL，Service方法的传入参数和返回值则使用XML schema描述。XML schema种描述的参数以SDO DataObject的形式暴露给开发者。<br /><br />一
个Component
Implementation的Service是否是remotable的是由Service的Interface定义的。如果使用Java，为
Interface添加@Remotable
annotation可以把Service声明为remotable。WSDL定义的interface永远是remotable的。<br />
典型的remoteable interface是粗力度的，用于松耦合的交互。Remotable Service Interface不允许函数重载。无论是在 Module之外还是在Module内的其他Component中使用</font></span></font></font><font size="+0"><font face="Courier New" size="2"><span style="color: rgb(0, 0, 255);"><font color="#000000">remotable Service，数据交换都采用by-value语义。<br />Remotable
Serviced的Implementation可能会在Service调用过程中或调用之后改变传入参数，也可能在调用之后修改返回值。如果
remotable Service被locally或remotely调用，SCA
container会保证传入参数及返回值的改变对Service的调用者是不可见的（这就是by-value语义）。下面是一个remotable
java interface的例子：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);"> services.hello;<br /><br />@Remotable<br /></span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> @AllowsPassByReference</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">interface</span><span style="color: rgb(0, 0, 0);"> HelloService {<br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> String sayHello(String message);<br />}</span></div>由External
Service提供的Service永远是remotable的。可以使用@AllowsPassByReference
annotation允许一个remotable
Service在被同一Module中的其他Component调用时使用by-reference语义，这样可以提高性能。<br /><br />
由local Interface提供的Service只能在同一Module中使用，它们不能通过Entry
Point发布到外部。如果不声明@Remotable，Java interface默认为local。典型的local
Interface是细粒度的，用于紧耦合的交互。它允许方法重载，并采用by-reference语义。<br /></font></span></font></font><img src ="http://www.blogjava.net/AllenYoung/aggbug/43043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AllenYoung/" target="_blank">Allen Young</a> 2006-04-25 15:58 <a href="http://www.blogjava.net/AllenYoung/archive/2006/04/25/43043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SCA Assembly Model Overview</title><link>http://www.blogjava.net/AllenYoung/archive/2006/04/25/43019.html</link><dc:creator>Allen Young</dc:creator><author>Allen Young</author><pubDate>Tue, 25 Apr 2006 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/AllenYoung/archive/2006/04/25/43019.html</guid><wfw:comment>http://www.blogjava.net/AllenYoung/comments/43019.html</wfw:comment><comments>http://www.blogjava.net/AllenYoung/archive/2006/04/25/43019.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/AllenYoung/comments/commentRss/43019.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AllenYoung/services/trackbacks/43019.html</trackback:ping><description><![CDATA[
		<font face="Courier New" size="2">SCA Assembly Model涵盖了两种model：<br /></font>
		<ul>
				<li>
						<font face="Courier New" size="2">用来组装紧耦合服务的model</font>
				</li>
				<li>
						<font face="Courier New" size="2">用来组装松耦合面向服务系统的model</font>
				</li>
		</ul>
		<font face="Courier New" size="2">
				<br />
SCA Assembly Model由一系列的artifact组成，这些artifact由XML文件中的element定义。下面先给出这些artifact的名词：<br /></font>
		<ul>
				<li>
						<font face="Courier New" size="2">Module</font>
				</li>
				<li>
						<font face="Courier New" size="2">Service</font>
				</li>
				<li>
						<font face="Courier New" size="2">Component</font>
				</li>
				<li>
						<font face="Courier New" size="2">Entry Point</font>
				</li>
				<li>
						<font face="Courier New" size="2">Reference</font>
				</li>
				<li>
						<font face="Courier New" size="2">External Service</font>
				</li>
				<li>
						<font face="Courier New" size="2">Wire</font>
				</li>
				<li>
						<font face="Courier New" size="2">Implementation</font>
				</li>
				<li>
						<font face="Courier New" size="2">SCA System</font>
				</li>
				<li>
						<font face="Courier New" size="2">Subsystem</font>
				</li>
				<li>
						<font face="Courier New" size="2">Module Component</font>
				</li>
		</ul>
		<font face="Courier New" size="2">最基本的artifact是Module，它是SCA的部署单元，用来保存可以被
remote访问的Service。一个Module包含一个或几个Component，这些Component包含了这个Module所要提供的
business
function。Component把这些function以Service的形式提供给外界，这些Service即可以被同一Model中的其他
Component使用，也可以通过Entry
Point在Module之外使用。Component也可以依赖于其他Component提供的Service，这些依赖叫做Reference。
Reference即可以是对同一Module内其他Component提供的Service的link，也可以是对Module外Service（其他
Module提供的Service）的link。连接到Module外部Service的Reference在其Module中被定义为External
Service。Reference和Service之间的连接也包含在这个Module中，用Wire来表示。<br /><br />
一个Component由一个配置好的Implementation组成，这个Implementation就是实现business
function的那段程序。Component使用具体的值来配置Implementation中声明的可配置的属性，Component也可以把
Implementation中声明的wiring of reference配置到具体的目标Service上去。<br /><br />
Module部署在SCA System中。一个SCA System往往表示一组相关Service的集合。为了方便建立和配置SCA
System，Subsystem可以用来对Module进行分组和配置。Subsystem包含Module
Component（Module的配置好了的实例），和Module一样，它也有Entry Point、External
Service和Wire。<br /><br />
下面附上两张图来展示这些artifact之间的关系。<br /><img src="http://www.blogjava.net/images/blogjava_net/allenyoung/SCA-module-assembly-diagram.PNG" alt="SCA-module-assembly-diagram.PNG" border="0" height="803" width="1043" /><br /><img src="http://www.blogjava.net/images/blogjava_net/allenyoung/SCA-system-assembly-diagram.PNG" alt="SCA-system-assembly-diagram.PNG" border="0" height="667" width="1028" /><br /></font>
<img src ="http://www.blogjava.net/AllenYoung/aggbug/43019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AllenYoung/" target="_blank">Allen Young</a> 2006-04-25 14:34 <a href="http://www.blogjava.net/AllenYoung/archive/2006/04/25/43019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SOA and Web services 新手入门</title><link>http://www.blogjava.net/AllenYoung/archive/2006/04/25/42969.html</link><dc:creator>Allen Young</dc:creator><author>Allen Young</author><pubDate>Tue, 25 Apr 2006 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/AllenYoung/archive/2006/04/25/42969.html</guid><wfw:comment>http://www.blogjava.net/AllenYoung/comments/42969.html</wfw:comment><comments>http://www.blogjava.net/AllenYoung/archive/2006/04/25/42969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AllenYoung/comments/commentRss/42969.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AllenYoung/services/trackbacks/42969.html</trackback:ping><description><![CDATA[
		<a target="_blank" class="" title="" href="http://www-128.ibm.com/developerworks/cn/webservices/newto/index.html">SOA and Web services 新手入门</a>，转自IBM DeveloperWorks，它的<a href="http://www-128.ibm.com/developerworks/cn/webservices/">SOA and Web Service专区</a>是学习SOA的很好的资源中心。本文章的内容如下：<br /><br /><ol><li>什么是面向服务的体系结构（SOA）？</li><li>我可以用面向服务的体系结构做什么？</li><li>构成 SOA 的技术是什么？</li><li><a name="4"></a>SOA 与其他技术的关系如何？</li><li>我可以如何构建 SOA 系统？</li><li>我可以如何提高我的 SOA 技能？</li><li>IBM 的什么工具和产品可用于 SOA？</li></ol>
IBM肯定会为自己做广告，呵呵，各位保持清醒就是了。<br /><img src ="http://www.blogjava.net/AllenYoung/aggbug/42969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AllenYoung/" target="_blank">Allen Young</a> 2006-04-25 11:09 <a href="http://www.blogjava.net/AllenYoung/archive/2006/04/25/42969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Elune Team 声明</title><link>http://www.blogjava.net/AllenYoung/archive/2006/04/25/42958.html</link><dc:creator>Allen Young</dc:creator><author>Allen Young</author><pubDate>Tue, 25 Apr 2006 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/AllenYoung/archive/2006/04/25/42958.html</guid><wfw:comment>http://www.blogjava.net/AllenYoung/comments/42958.html</wfw:comment><comments>http://www.blogjava.net/AllenYoung/archive/2006/04/25/42958.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AllenYoung/comments/commentRss/42958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AllenYoung/services/trackbacks/42958.html</trackback:ping><description><![CDATA[
		<font face="Courier New" size="2">Elune Team由Allen Young，atlanta，Helena和silver.sun组成，近期目标为参加2006 IBM杯中国高校SOA应用大赛，因此会在比赛期间在<a href="/team/SOA.html">BlogJava SOA Team Blog</a>进行相关讨论，内容以SOA为主，会涉及参赛项目管理，团队文化等。<br /></font>
<img src ="http://www.blogjava.net/AllenYoung/aggbug/42958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AllenYoung/" target="_blank">Allen Young</a> 2006-04-25 10:23 <a href="http://www.blogjava.net/AllenYoung/archive/2006/04/25/42958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BlogJava SOA Team Blog公告</title><link>http://www.blogjava.net/AllenYoung/archive/2006/04/25/42955.html</link><dc:creator>Allen Young</dc:creator><author>Allen Young</author><pubDate>Tue, 25 Apr 2006 02:17:00 GMT</pubDate><guid>http://www.blogjava.net/AllenYoung/archive/2006/04/25/42955.html</guid><wfw:comment>http://www.blogjava.net/AllenYoung/comments/42955.html</wfw:comment><comments>http://www.blogjava.net/AllenYoung/archive/2006/04/25/42955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/AllenYoung/comments/commentRss/42955.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/AllenYoung/services/trackbacks/42955.html</trackback:ping><description><![CDATA[
		<font face="Courier New" size="2">欢迎各位对SOA感兴趣的朋友加入讨论<a href="/team/SOA.html">BlogJava SOA Team Blog</a>，下面是个人的几点声明，各位可以给我建议或补充。<br /><br /></font>
		<ol>
				<li>
						<font face="Courier New" size="2">随笔要与Team Blog主题相关，否则将删除。</font>
				</li>
				<li>
						<font face="Courier New" size="2">做一个Critical Thinker，对自己的言论负责。</font>
				</li>
				<li>
						<font face="Courier New" size="2">欢迎各种观点（我们需要不同的声音），欢迎争论，不欢迎争吵。</font>
				</li>
				<li>
						<font face="Courier New" size="2">随笔请用Courier New字体，2号字，以便保持整体风格一致。<br /></font>
				</li>
		</ol>
		<font face="Courier New" size="2">
				<br />
SOA是一种态度，而不是一种技术。<br /></font>
<img src ="http://www.blogjava.net/AllenYoung/aggbug/42955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/AllenYoung/" target="_blank">Allen Young</a> 2006-04-25 10:17 <a href="http://www.blogjava.net/AllenYoung/archive/2006/04/25/42955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>