SCA java編碼入門
調出單機的Tuscany運行時
當開始考慮Tuscany SCA java運行時環境的時候,理解高層調用是什么和為什么是非常有用的。當前關于”Domain”對象有些實現,該對象用于啟動Tuscany。
DefaultSCADomain –一個簡單的域實現,該實現隱藏了大部分的細節?,F在為止用于大多數的測試用例。
EmbeddedSCADomain – 用于將Tuscany嵌入到其他的系統中
HotUpdateSCADomain - 當他們改變的時候會自動裝載的例子
EmbeddedNode - 分布式域中的一個節點
一般認為EmbeddedSCADomain在調出運行時給出了一個必要的好的入口點。這個類在svn(http://svn.apache.org/repos/asf/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/EmbeddedSCADomain.java)并且測試程序可在(http://svn.apache.org/repos/asf/incubator/tuscany/java/sca/modules/host-embedded/src/test/java/org/apache/tuscany/sca/host/embedded/impl/EmbeddedSCADomainTestCase.java)中看到。
EmbeddedSCADomain類提供了將運行時的所有部件都集中在單個虛擬機里的SCA domain的實現。創建嵌入式domain很直接:
domain = new EmbeddedSCADomain(cl, domainName);
domain.start();
在domain上調用start方法會創建所有的運行時工件。特別地,所有的運行時擴展,比如implementation , binding , databinding , host會使用java的META-INF/services機制被加載和初始化。
接下來要做的就是加載SCA應用到域中。SCA應用被作為contribution部署。Contribution將composite文件(該文件是一個在SCA裝配規范中定義的結構)所需要的所有資源集合在composite文件中。這些資源可以是java,xml,xsd,swdl等等。EmbeddedSCADomain為讀取contribution提供了一個contribution服務。這里有一個獲取某個由URL標識的contribution的contribution服務的例子。
ContributionService contributionService = domain.getContributionService();
Contribution contribution = contributionService.contribute("http://calculator",
contributionURL,
null, //resolver,
false);
這個會在內存中生成一個裝配模型(詳情請查看我翻譯的裝配模型規范)。你能通過詢問最終生成的contribution來獲取模型的可部署部件。
Composite composite =contribution.getDeployables().get(0);
可部署模型的跟是composite。該composite包含了將運行于Tuscany運行時環境的組件層次信息。以下的各個步驟讓邏輯裝配模型變成可運行的工件,以便讓啟動組件。
第一步,將模型composite添加到頂層的本地域控制中。
Domain.getDomainComposite().getIncludes().add(composite);
然后是將邏輯模型的各個部件連接到一起的構建階段,不如對服務的引用等等。
Domain.getCompositeBuilder().build(composite);
最后基于邏輯模型創建運行時工件,這包括服務的endpoint和客戶端。
Domain.getCompositeActivator().activate(composite);
一旦所有的工作準備就緒,域中的每個composite將獨立啟動。其實這個階段,支持web service的servlet都已經部署了。
for (Composite composite : domain.getDomainComposite().getIncludes()) {
Domain.getCompositeActivator().start(composite);
}
分布式運行時
當域是分布式地跨越多個VM的時候,就需要做這步。一旦邏輯模型已經經過了構建階段,有一步是提供給運行時信息的,以便讓遠程服務能自動地解決跨網絡的問題。也就是說我們將裝配模型中的所有服務和引用連起來構成一個分布域的邏輯概念。
distriutedDomain.addDistributedDomainToBindings(composite);
posted on 2008-04-27 22:16 gembin 閱讀(626) 評論(0) 編輯 收藏 所屬分類: SCA 、SOA