該文檔是SCA Java項(xiàng)目的開發(fā)者指南
l 一般性指南
l 獲取源代碼
l 配置你的開發(fā)環(huán)境
l 構(gòu)建二進(jìn)制和源代碼發(fā)布包
l 導(dǎo)入SCA模塊到你的開發(fā)IDE環(huán)境中
l 理解SCA代碼路徑
l 編碼指南
l 測(cè)試
l Maven構(gòu)建結(jié)構(gòu)
l 報(bào)告遇到的問題和提供補(bǔ)丁
l 開發(fā)提示
Ø 為Webapp樣例代碼生成Eclipse WTP Web工程
Ø 為樣例中的程序生成ant的依賴關(guān)系
一般性指南
歡迎來到Tuscany SCA java子工程。我們期待你的參與并努力幫助你。在郵件列表中問你問題是非常輕松的。
這里有些我們這個(gè)項(xiàng)目中所使用的一般原則
l Java SCA子項(xiàng)目的目的是為了提供一個(gè)基于SCA的企業(yè)級(jí)的服務(wù)基礎(chǔ)設(shè)施
l Tuscany SCA不僅僅是一個(gè)參考的實(shí)現(xiàn)。我們鼓勵(lì)基于SCA原則上的創(chuàng)新。我們所做的許多工作是對(duì)規(guī)范提供一個(gè)反饋。
l Java SCA基礎(chǔ)設(shè)施應(yīng)該提供靈活性和可選擇性。它不應(yīng)該規(guī)定死編程模型而是應(yīng)該支持多種編程模型。
l Java SCA基礎(chǔ)設(shè)施是非常模塊化的,高度的可擴(kuò)展性以便用戶可以定制它來適合自己的需求。
獲取源代碼
Java SCA項(xiàng)目的Subversion 庫的地址:https://svn.apache.org/repos/asf/incubator/tuscany/java/sca
也可以在地址:http://svn.apache.org/viewvc/incubator/tuscany/java上在線查看。
任何人都可以check out出代碼。你只需要指定用戶名和密碼以便更新subversion庫,當(dāng)然只有Tuscany提交者才有權(quán)限做這些。
從Subversion里check out代碼
使用如下的命令:
Svn checkout http://svn.apache.org/repos/asf/incubator/tuscany/java/sca
提交修改到Subversion
任何的Tuscany提交者在svn.apache.org上都應(yīng)該有一個(gè)帳號(hào)。在你能提交之前,你需要設(shè)置你自己的Subversion的密碼??梢缘顷懙?/span>svn.apache.org,然后運(yùn)行svnpasswd命令。
一旦設(shè)置了密碼,你就可以用下面的命令提交:
svn commit
如果Subversion沒有給出你的用戶名,你可以顯式地告訴它:
svn –username <name> commit
Subversion會(huì)提示你輸入密碼,一旦你輸入后,它將記住密碼。注意你用svnpasswd配置的密碼不是你的shell或其他的密碼。
配置開發(fā)環(huán)境
首要條件:
Java SCA要求如下:
l JDK 5.0+ (J2SE 1.5.0+)
l Apache Maven(2.0.5)(注意:現(xiàn)在使用Maven的版本高于2.0.5可能會(huì)在構(gòu)建Tuscany時(shí)出現(xiàn)問題,查看TUSCANY-1676)
l Subversion(1.2+)
構(gòu)建樹結(jié)構(gòu)
構(gòu)建樹有利于模塊化開發(fā)和發(fā)布。Java SCA當(dāng)前是使用如下的模塊分層:
-java
|-- sca
|-- demos SCA 演示應(yīng)用程序
|-- distribution SCA 發(fā)布程序
|-- itest SCA 集成測(cè)試
|-- modules SCA 實(shí)現(xiàn)的各個(gè)模塊 (core, runtimes, contribution, extensions等等)
|-- samples SCA 樣例程序
|-- tools SCA 工具 (Eclipse插件, wsdl2java, java2wsdl等等)
|-- tutorial SCA 教程
自頂向下的構(gòu)建(推薦方法)
Check out出所有的java源代碼
svn checkout http://svn.apache.org/repos/afs/incubator/tuscany/java
構(gòu)建SCA源代碼非常簡(jiǎn)單
cd java/sca
mvn
即使你由一個(gè)空的Maven本地庫,它也是會(huì)工作的。它總是會(huì)有效的,但是當(dāng)你第一次構(gòu)建Tuscany項(xiàng)目的時(shí)候會(huì)下載許多依賴的庫,這個(gè)會(huì)花費(fèi)比較長(zhǎng)的時(shí)間,當(dāng)然也有可能在獲取依賴庫的時(shí)候失敗。
在從遠(yuǎn)程的Maven庫下載的時(shí)候會(huì)發(fā)生偶然性的問題,所以假如mvn失敗是與網(wǎng)絡(luò)相關(guān)的話,只要再重試一遍就可以解決問題了。
主干代碼有時(shí)候會(huì)SNAPSHOT依賴,該依賴從你的本地庫獲取時(shí)間。所以如果你用下列命令升級(jí)了SNAPSHOT jar,你會(huì)看到odd構(gòu)建失敗信息。
mvn –U
一旦你做了自頂向下的構(gòu)建,你的本地maven庫就組裝好了,你能用maven的離線選項(xiàng)加速構(gòu)建的過程
mvn –o
構(gòu)建二進(jìn)制和源代碼發(fā)布包
二進(jìn)制和源代碼發(fā)布包是在distribution文件夾下運(yùn)行maven命令創(chuàng)建的,如下:
cd java/sca/distribution
mvn clean install –o
發(fā)布包工件生成在distribution文件夾下的target文件夾下。
導(dǎo)入SCA模塊到你的開發(fā)IDE環(huán)境中
使用Eclipse
假如這是你第一次用maven m2本地庫用于你的workspace(Eclipse里的工作空間),你要告知你的Eclipse工作空間的目錄路徑,命令如下:
mvn –Declipse.workspace=[path-to-eclipse-workspace] eclipse:add-maven-repo
為了生成必要的項(xiàng)目文件,你需要使用maven的eclipse插件
cd java/sca
mvn –Peclipse eclipse:eclipse
現(xiàn)在,啟動(dòng)你的Eclipse IDE,選擇FileàImportàExisting projects into Workplace,然后選擇SCA的啟始目錄(例如 java/sca),然后按Finish,就會(huì)導(dǎo)入所有的SCA模塊到Eclipse中了。
理解SCA的代碼路線
這里有一個(gè)關(guān)鍵方法/函數(shù)的概述可以幫助你入門SCA java開發(fā)。
(請(qǐng)看我翻譯的SCA編碼入門)
編碼指南
開發(fā)java SCA有些簡(jiǎn)單的指導(dǎo)原則:
l 基本的編碼風(fēng)格在Sun Java編碼標(biāo)準(zhǔn)里描述了,但主要是要保證與你正在升級(jí)的代碼保持一致性。
l 總是在所有的文件包含Apache License的頭信息(源代碼和象xml文檔的資源文件都包含)
l 包含checkin信息的描述日子信息,比如“修復(fù)了某某某問題”
命名規(guī)范增強(qiáng)代碼一致性
文件夾名稱:都使用小寫和-破折號(hào)
n Maven的工件id = Tuscany-<文件夾的名字>
包名:模塊中的包名應(yīng)該包含模塊名,以便很容易地在代碼樹上定位源代碼。例如,java/sca/module/implementation-java就在包org.apache.tuscany.implementation.java.*里。
測(cè)試
Tuscany使用普通的junit測(cè)試用例來做單元和集成測(cè)試,下面就是一個(gè)例子,它可以作為寫新的測(cè)試用例的一個(gè)模板來使用。它演示了在你的測(cè)試用例中如何加載Tuscany SCA運(yùn)行時(shí),同時(shí)因?yàn)樗麄兪腔?/span>junit的,你能選擇從IDE或者從Maven啟動(dòng)。
/**
* Description of your test case and necessary details you find necessary
*/
public class YourTestCase extends TestCase {
private SCADomain domain;
private YourService service;
@Override
protected void setUp() throws Exception {
domain = SCADomain.newInstance("YourTest.composite");
service = domain.getService(YourService.class, "serviceName");
}
@Override
protected void tearDown() throws Exception {
&nb%2