﻿<?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-paulwong-随笔分类-SOA</title><link>http://www.blogjava.net/paulwong/category/54652.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 24 Dec 2014 14:03:36 GMT</lastBuildDate><pubDate>Wed, 24 Dec 2014 14:03:36 GMT</pubDate><ttl>60</ttl><item><title>Tuscany 2 的基本配置与流程</title><link>http://www.blogjava.net/paulwong/archive/2014/12/24/421751.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 24 Dec 2014 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/12/24/421751.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/421751.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/12/24/421751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/421751.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/421751.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">实习期间mentor让看看Tuscany&#8212;&#8212;apache的一个顶级项目。之前一直没有接触过，听mentor说了下用途过后，感觉其像是alibaba的分布式服务框架Dubbo，简要看了看，似乎和RMI也有相关性。总之它也是面向服务的分布式框架。经过一下午的尝试，发现Tuscany 2和Tuscany 1还是有比较大的不同（API方面、设计思想没有深入研究不知道），网上关于Tuscany的资料也不多，所以在此写文章mark一下。</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">Tuscany 1的API参考这位博主<a target="_blank" href="http://blog.csdn.net/ajun_studio/article/details/7770023" style="color: #336699; text-decoration: none;">http://blog.csdn.net/ajun_studio/article/details/7770023</a></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><br /></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><strong>1. 准备</strong></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">首先是在工程中引入Tuscany 2.0.1的jar包，从一个Apache的China镜像上不难找到（PS：Tuscany 1在官网上已经不维护了）。</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">工程需要实现客户端调用远程服务器端的服务的功能。该项目中调用远程完成&#8220;加&#8221;的功能。</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><br /></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><strong>2. 入门</strong></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">首先添加IAdd接口</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.ajun.tuscany.server;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">interface</span>&nbsp;IAdd&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;add(<span style="color: #0000FF; ">double</span>&nbsp;n1,<span style="color: #0000FF; ">double</span>&nbsp;n2);&nbsp;&nbsp;<br />} &nbsp;</div><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">然后是实现类Add</span><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.ajun.tuscany.server;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Add&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;IAdd&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;add(<span style="color: #0000FF; ">double</span>&nbsp;n1,&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;n2)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;n1&nbsp;+&nbsp;n2;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />}&nbsp;</div><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">加减乘除都属于&#8220;计算&#8221;类，此处为了简便，只实现&#8220;加&#8221;方法。然后是&#8220;计算&#8221;的接口。</span><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.ajun.tuscany.server;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">interface</span>&nbsp;ICalculator&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;add(<span style="color: #0000FF; ">double</span>&nbsp;n1,&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;n2);&nbsp;&nbsp;<br />} &nbsp;</div><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">然后是&#8220;计算&#8221;的实现，注意一定要在setter中加入@Reference，否则会报错，这里类似于Spring的注入。</span><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.ajun.tuscany.server;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.oasisopen.sca.annotation.Reference;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Calculator&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;ICalculator&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;IAdd&nbsp;add;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;IAdd&nbsp;getAdd()&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;add;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Reference&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setAdd(IAdd&nbsp;add)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.add&nbsp;=&nbsp;add;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;add(<span style="color: #0000FF; ">double</span>&nbsp;n1,&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;n2)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">this</span>.add.add(n1,&nbsp;n2);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />} &nbsp;</div><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">到此，基本的业务逻辑类就编写好了，接下来，是Tuscany中重要的配置文件，即XXX.composite，其本质也是一个xml。如果不是面向分布式服务，该xml文件结构类似Spring的application.xml。下面是Calculator.composite，注意配置文件中reference，name标记为add，应该也是同Spring的大写首字母规则，通过settrt注入。</span><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&lt;composite&nbsp;xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetNamespace="http://sample"&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:sample="http://sample"&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:scallop="http://scallop/xmlns/sca/1.1"&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name="Calculator"&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;component&nbsp;name="CalculatorServiceComponent"&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;implementation.java&nbsp;<span style="color: #0000FF; ">class</span>="com.ajun.tuscany.server.Calculator"&nbsp;/&gt;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;reference&nbsp;name="add"&nbsp;target="AddComponent"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/component&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;component&nbsp;name="AddComponent"&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;implementation.java&nbsp;<span style="color: #0000FF; ">class</span>="com.ajun.tuscany.server.Add"&nbsp;/&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/component&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&lt;/composite&gt;&nbsp; &nbsp;</div><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">最后是运行main的类</span><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.ajun.tuscany.server;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.tuscany.sca.node.Node;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.tuscany.sca.node.NodeFactory;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;StartService&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;node&nbsp;=&nbsp;NodeFactory.newInstance().createNode(&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Calculator.composite");&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.start();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("service启动");&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICalculator&nbsp;c&nbsp;=&nbsp;node.getService(Calculator.<span style="color: #0000FF; ">class</span>,&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"CalculatorServiceComponent");&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(c.add(2,&nbsp;2));&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />}&nbsp;</div><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">运行输出如下</span><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->2014-11-10&nbsp;17:39:24&nbsp;org.apache.tuscany.sca.node.impl.NodeFactoryImpl&nbsp;loadContributions<br />信息:&nbsp;Loading&nbsp;contribution:&nbsp;file:/E:/HuRanjie/EclipseWorkspace/Calculatoer_01/bin/<br />2014-11-10&nbsp;17:39:24&nbsp;org.apache.tuscany.sca.host.rmi.DefaultRMIHost&nbsp;registerService<br />信息:&nbsp;RMI&nbsp;service&nbsp;registered:&nbsp;rmi://127.0.0.1:8099/CalculatorRMIService<br />2014-11-10&nbsp;17:39:24&nbsp;org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl&nbsp;addEndpoint<br />信息:&nbsp;Add&nbsp;endpoint&nbsp;-&nbsp;binding.rmi&nbsp;-&nbsp;rmi://127.0.0.1:8099/CalculatorRMIService<br />2014-11-10&nbsp;17:39:24&nbsp;org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl&nbsp;addEndpoint<br />信息:&nbsp;Add&nbsp;endpoint&nbsp;-&nbsp;binding.sca&nbsp;-&nbsp;AddComponent/Add<br />service启动<br />4.0</div><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><br /></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><strong>3. 远程调用rmi</strong></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">上面并没有将&#8220;计算&#8221;类作为一个服务，暴露给远程调用，只是实现了本地的装配。下面将其作为服务给远程调用，后面可以看到，只需要暴露一个包括host、port、serviceName</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><br /></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">首先，修改配置文件，修改为如下样子&#8212;&#8212;在本地（127.0.0.1）的8099端口暴露出名字为CalculatorRMIService的服务</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">composite&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://docs.oasis-open.org/ns/opencsa/sca/200912"</span><span style="color: #FF0000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tuscany</span><span style="color: #0000FF; ">="http://tuscany.apache.org/xmlns/sca/1.1"</span><span style="color: #FF0000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetNamespace</span><span style="color: #0000FF; ">="http://sample"</span><span style="color: #FF0000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:sample</span><span style="color: #0000FF; ">="http://sample"</span><span style="color: #FF0000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:scallop</span><span style="color: #0000FF; ">="http://scallop/xmlns/sca/1.1"</span><span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000FF; ">="Calculator"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">component&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="CalculatorServiceComponent"</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">implementation</span><span style="color: #FF0000; ">.java&nbsp;class</span><span style="color: #0000FF; ">="com.ajun.tuscany.server.Calculator"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">service&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="Calculator"</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interface</span><span style="color: #FF0000; ">.java&nbsp;interface</span><span style="color: #0000FF; ">="com.ajun.tuscany.server.ICalculator"</span><span style="color: #0000FF; ">/&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tuscany:binding</span><span style="color: #FF0000; ">.rmi&nbsp;uri</span><span style="color: #0000FF; ">="rmi://127.0.0.1:8099/CalculatorRMIService"</span><span style="color: #0000FF; ">/&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">service</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">reference&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="add"</span><span style="color: #FF0000; ">&nbsp;target</span><span style="color: #0000FF; ">="AddComponent"</span><span style="color: #0000FF; ">/&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">component</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">component&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="AddComponent"</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">implementation</span><span style="color: #FF0000; ">.java&nbsp;class</span><span style="color: #0000FF; ">="com.ajun.tuscany.server.Add"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">component</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">composite</span><span style="color: #0000FF; ">&gt;</span>&nbsp; &nbsp;</div><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">服务器端的main主要功能是启动该服务，如下</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.ajun.tuscany.server;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.tuscany.sca.node.Node;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.tuscany.sca.node.NodeFactory;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;StartService&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;node&nbsp;=&nbsp;NodeFactory.newInstance().createNode(&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Calculator.composite");&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.start();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("service启动");&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />}&nbsp;</div><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">客户端通过rmi调用服务器端的服务，来实现功能，如下</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.ajun.tuscany.client;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.rmi.Naming;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">import</span>&nbsp;com.ajun.tuscany.server.ICalculator;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;CalculatorClient&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICalculator&nbsp;c=&nbsp;(ICalculator)&nbsp;Naming.lookup("//127.0.0.1:8099/CalculatorRMIService");&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(c.add(1,&nbsp;2));&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />} &nbsp;</div><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">启动服务端输出</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->2014-11-10&nbsp;18:00:30&nbsp;org.apache.tuscany.sca.node.impl.NodeImpl&nbsp;start<br />信息:&nbsp;Starting&nbsp;node:&nbsp;http://tuscany.apache.org/sca/1.1/nodes/default0&nbsp;domain:&nbsp;default<br />2014-11-10&nbsp;18:00:30&nbsp;org.apache.tuscany.sca.node.impl.NodeFactoryImpl&nbsp;loadContributions<br />信息:&nbsp;Loading&nbsp;contribution:&nbsp;file:/E:/HuRanjie/EclipseWorkspace/Calculatoer_01/bin/<br />2014-11-10&nbsp;18:00:31&nbsp;org.apache.tuscany.sca.host.rmi.DefaultRMIHost&nbsp;registerService<br />信息:&nbsp;RMI&nbsp;service&nbsp;registered:&nbsp;rmi://127.0.0.1:8099/CalculatorRMIService<br />2014-11-10&nbsp;18:00:31&nbsp;org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl&nbsp;addEndpoint<br />信息:&nbsp;Add&nbsp;endpoint&nbsp;-&nbsp;binding.rmi&nbsp;-&nbsp;rmi://127.0.0.1:8099/CalculatorRMIService<br />2014-11-10&nbsp;18:00:31&nbsp;org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl&nbsp;addEndpoint<br />信息:&nbsp;Add&nbsp;endpoint&nbsp;-&nbsp;binding.sca&nbsp;-&nbsp;AddComponent/Add<br />service启动<br /><br />客户端输出<br /><br />3.0</div><img src ="http://www.blogjava.net/paulwong/aggbug/421751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-12-24 14:07 <a href="http://www.blogjava.net/paulwong/archive/2014/12/24/421751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SOA资源</title><link>http://www.blogjava.net/paulwong/archive/2014/12/23/421696.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 23 Dec 2014 15:53:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/12/23/421696.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/421696.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/12/23/421696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/421696.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/421696.html</trackback:ping><description><![CDATA[Tuscany<br />档案项目架构文档SOA搭建过程<br /><a href="http://www.open-open.com/doc/view/54781005211b45fda0c15a44110efeaf" target="_blank">http://www.open-open.com/doc/view/54781005211b45fda0c15a44110efeaf</a><br /><br /><br />大用户量下的系统架构(SOA)<br /><a href="http://www.open-open.com/doc/view/2def65d401e949c1b8fe3bc306701234" target="_blank">http://www.open-open.com/doc/view/2def65d401e949c1b8fe3bc306701234</a><img src ="http://www.blogjava.net/paulwong/aggbug/421696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-12-23 23:53 <a href="http://www.blogjava.net/paulwong/archive/2014/12/23/421696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>