gembin

          OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

          HBase, Hadoop, ZooKeeper, Cassandra

          Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

          There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

          About Me

           

          基于Tuscany的Web應(yīng)用程序分析

          Tuscany下典型的Web架構(gòu):

          乍一看,平淡無(wú)奇,這不就是我們常用的Web目錄結(jié)構(gòu)么?沒(méi)錯(cuò)!

          但玄機(jī)出在Web.xml和Calculator.composite上,下面我們分別看下這兩個(gè)文件:

          Web.xml

          <?xml version="1.0" encoding="ISO-8859-1"?>
          <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
          Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
          <web-app>

          <display-name>Apache Tuscany Calculator Web Service Sample</display-name>

          <filter>
          <filter-name>tuscany</filter-name>
          <filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>
          </filter>

          <filter-mapping>
          <filter-name>tuscany</filter-name>
          <url-pattern>/*</url-pattern>
          </filter-mapping>

          <welcome-file-list id="WelcomeFileList">
          <welcome-file>calc.jsp</welcome-file>
          </welcome-file-list>

          </web-app>

          這里使用了TuscanyServletFilter過(guò)濾器,此過(guò)濾器的作用我們會(huì)在后文提到。

          Calculator.composite

          <?xml version="1.0" encoding="UTF-8"?>
          <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
          targetNamespace="http://sample"
          xmlns:sample="http://sample"
          name="Calculator">

          <component name="CalculatorServiceComponent">
          <implementation.java class="calculator.CalculatorServiceImpl"/>
          <reference name="addService" target="AddServiceComponent"></reference>
          <reference name="subtractService" target="SubtractServiceComponent"></reference>
          <reference name="multiplyService" target="MultiplyServiceComponent"></reference>
          <reference name="divideService" target="DivideServiceComponent"></reference>
          </component>

          <component name="AddServiceComponent">
          <implementation.java class="calculator.AddServiceImpl"/>
          </component>

          <component name="SubtractServiceComponent">
          <implementation.java class="calculator.SubtractServiceImpl"/>
          </component>

          <component name="MultiplyServiceComponent">
          <implementation.java class="calculator.MultiplyServiceImpl"/>
          </component>

          <component name="DivideServiceComponent">
          <implementation.java class="calculator.DivideServiceImpl"/>
          </component>

          </composite>
          此文件類似Spring,是Tuscany的服務(wù)配置文件,在此文件中提供了組件、實(shí)現(xiàn)的聲明及配置。

          下面,再結(jié)合調(diào)用時(shí)序圖,來(lái)詳述Tuscany在此應(yīng)用中的位置及作用。

          由此時(shí)序圖可知,整個(gè)流程如下:

          1、應(yīng)用服務(wù)器啟動(dòng);

          2、客戶端訪問(wèn)calc.jsp頁(yè)面,服務(wù)器調(diào)用Web.xml中的配置TuscanyServletFilter過(guò)濾器;

          3、在TuscanyServletFilter過(guò)濾器中,首先得到一個(gè)WebAppServletHost實(shí)例,WebAppServletHost是在Web應(yīng)用環(huán)境中使用的Tuscany功能提供者;

          4、在WebAppServletHost中,得到一個(gè)SCADomain實(shí)例,并將之放入ServletContext上下文中,以后可藉由相應(yīng)的key得到此SCADomain實(shí)例;

          5、calc.jsp中成功取得SCADomain實(shí)例;

          6、通過(guò)SCADomain實(shí)例取得CalculatorServiceComponent組件;

          7、調(diào)用CalculatorServiceComponent組件的各種業(yè)務(wù)方法實(shí)施計(jì)算。

          這一個(gè)完整的過(guò)程,演示了Tuscany在一個(gè)Web應(yīng)用中所充當(dāng)?shù)慕巧?,在某種意義上Tuscany和Spring是相同的,只不過(guò)粒度不一樣,

          Spring注重的是bean的管理,是技術(shù)層面的,粒度相對(duì)較細(xì);而Tuscany關(guān)注 則是業(yè)務(wù)組件的管理,是業(yè)務(wù)層面的,粒度相對(duì)較粗。

          從軟件重用角度講,業(yè)務(wù)重用比技術(shù)重用更加受歡迎,操作起來(lái)也更加容易。業(yè)務(wù)重用是趨勢(shì)?,F(xiàn)在的SAAS熱潮更加證明,軟件即服務(wù)的

          時(shí)代已經(jīng)到來(lái)。

          posted on 2008-04-27 21:35 gembin 閱讀(657) 評(píng)論(0)  編輯  收藏 所屬分類: SCASOA

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(6)

          隨筆分類(440)

          隨筆檔案(378)

          文章檔案(6)

          新聞檔案(1)

          相冊(cè)

          收藏夾(9)

          Adobe

          Android

          AS3

          Blog-Links

          Build

          Design Pattern

          Eclipse

          Favorite Links

          Flickr

          Game Dev

          HBase

          Identity Management

          IT resources

          JEE

          Language

          OpenID

          OSGi

          SOA

          Version Control

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          free counters
          主站蜘蛛池模板: 綦江县| 宜宾市| 徐闻县| 德保县| 股票| 柘城县| 玉龙| 津南区| 克东县| 虹口区| 阳新县| 平舆县| 陆河县| 凤凰县| 丹棱县| 社旗县| 江城| 昭平县| 扬中市| 霍林郭勒市| 西畴县| 怀化市| 宁德市| 社会| 万源市| 神木县| 淳安县| 民勤县| 剑河县| 长丰县| 甘肃省| 胶州市| 宜良县| 常州市| 丁青县| 榆中县| 交城县| 七台河市| 邹平县| 长武县| 富顺县|