某軟件項(xiàng)目開發(fā)手冊(cè)_第1頁
某軟件項(xiàng)目開發(fā)手冊(cè)_第2頁
某軟件項(xiàng)目開發(fā)手冊(cè)_第3頁
某軟件項(xiàng)目開發(fā)手冊(cè)_第4頁
某軟件項(xiàng)目開發(fā)手冊(cè)_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、文件編號(hào):p01-01 分 冊(cè) 號(hào):1/1 頁 碼:51 密 級(jí):c inforguard 項(xiàng)項(xiàng)目目 開開發(fā)發(fā)手手冊(cè)冊(cè) 中創(chuàng)軟件商用中間件股份有限公司 2010 年 05 月 變更記錄變更記錄 變更版本日期圖表、表格、段落號(hào) a/m/d 原因與修改情況描述修訂人審核人 1.02010-1-1alla創(chuàng)建文檔李銘 注:a 增加 m 修改 d 刪節(jié) 目錄目錄 第第 1 章章 概述概述.1 1.1. 開發(fā)場(chǎng)景.1 1.2. 基本概念.1 第第 2 章章 搭建開發(fā)環(huán)境搭建開發(fā)環(huán)境.2 2.1. 準(zhǔn)備開發(fā)工具.2 2.2. 工具安裝及環(huán)境配置.2 2.2.1. 安裝jdk及配置java環(huán)境.2 2.2.

2、2. 安裝maven及配置倉(cāng)庫(kù).3 2.2.3. eclipse中安裝m2eclipse插件.4 2.2.4. eclipse中安裝rap開發(fā)環(huán)境.4 2.2.5. eclipse中安裝國(guó)際化編輯插件.5 2.2.6. eclipse中導(dǎo)入編碼樣式.5 2.2.7. 設(shè)置eclipse的默認(rèn)編碼.5 第第 3 章章 開發(fā)案例開發(fā)案例.7 3.1. 開發(fā)前準(zhǔn)備.7 3.2. 組織結(jié)構(gòu).7 3.2.1. 目錄結(jié)構(gòu).7 3.2.2. 源碼組織.8 3.3. 開發(fā)流程.8 3.3.1. 建立eclipse插件工程.8 3.3.2. 添加依賴.9 3.3.3. 添加導(dǎo)出包.10 3.3.4. 開發(fā)聲明式

3、服務(wù)(dservice).11 第第 4 章章 常見問題解答常見問題解答.23 第第 5 章章 參考參考.24 附錄一附錄一 setting.xml.25 附錄二附錄二 常用動(dòng)名詞常用動(dòng)名詞.33 附錄三附錄三 本地化資源文件的創(chuàng)建方法本地化資源文件的創(chuàng)建方法.34 附錄四附錄四 manifest.mf .35 附錄五附錄五 pom.xml.36 附件六附件六 osgi 命令說明命令說明.39 附件七附件七 metadata.xml.41 第第 1 章章 概概述述 該文檔是為 inforguard utmp 開發(fā)人員開發(fā)新功能所編寫的規(guī)范性文檔。 1.1. 開開發(fā)發(fā)場(chǎng)場(chǎng)景景 當(dāng) utmp 添加

4、新的功能時(shí),開發(fā)人員可以根據(jù)該文檔更快更有效的進(jìn)行開發(fā)。 1.2. 基基本本概概念念 osgi:osgi(jsr 291)也叫 java 語言的動(dòng)態(tài)模塊系統(tǒng),它為模塊化應(yīng)用的開發(fā)定義了一個(gè) 基礎(chǔ)架構(gòu)。osgi 容器已有多家開源實(shí)現(xiàn),比如 knoflerfish、equinox 和 apache 的 felix。 更多信息可以訪問: /main/homepage、http:/ equinox:equinox 是 eclipse 中的項(xiàng)目之一,equinox 是作為 osgi r4 ri 而知名的,同時(shí) 由于 equinox 有 eclipse ide 這么個(gè)成

5、功案例,反應(yīng)出了 equinox 作為 osgi 框架的優(yōu)勢(shì)。 更多信息可以訪問:/equinox/、/。 bundle:osgi 服務(wù)框架定義的模塊化單元,稱之為一個(gè) bundle。一個(gè) bundle 由 java 的類 和其他資源組成,可以為終端用戶提供功能。bundle 的描述信息存放在一個(gè) manifest 文件 中,這個(gè)文件包含在 jar 文件中的 meta-inf 目錄下,命名為 manifest.mf。通過 bundle 的符號(hào)名稱和版本號(hào)可以在框架中惟一的確定一個(gè) bundle。 eclipse

6、 rap: eclipse rap 項(xiàng)目的目的是讓開發(fā)人員能夠利用 eclipse 開發(fā)模型來構(gòu)建 rich,ajax-enabled web 應(yīng)用程序。主要運(yùn)用著名的 eclipse 平臺(tái)擴(kuò)展點(diǎn)插件機(jī)制和一個(gè)包 含 swt/jface api 的 widget 工具包。rap 項(xiàng)目旨在使開發(fā)人員能夠使用 eclipse 開發(fā)模 型構(gòu)建富 internet 應(yīng)用程序。rap 允許開發(fā)人員使用豐富的 java 庫(kù)和 eclipse api 構(gòu) 建基于瀏覽器的 ajax 應(yīng)用程序。它通過提供 swt、jface 和 eclipse workbench 的基于 web 的實(shí)現(xiàn)來提供此項(xiàng)功能。 更多

7、rap 信息可訪問:/rap/。 第第 2 章章 搭搭建建開開發(fā)發(fā)環(huán)環(huán)境境 2.1. 準(zhǔn)準(zhǔn)備備開開發(fā)發(fā)工工具具 jdk 1.5 或以上版本,下載地址: 1/tools/program/jdk/jdk-1_5_0_16-windows-i586-p.exe/ maven 2.0.9 或以上版本,下載地址: 1/tools/program/maven/apache-maven-2.2.1-bin.zip eclipse 3.5 或以上版本,下載地址: 1/

8、tools/program/%b1%e0%bc%ad%c6%f7/eclipse/eclipse-java-galileo- sr2-win32.zip 注:1 的用戶名/密碼:user/123 2.2. 工工具具安安裝裝及及環(huán)環(huán)境境配配置置 2.2.1. 安裝安裝 jdk 及配置及配置 java 環(huán)境環(huán)境 1.安裝 windows 操作系統(tǒng)上的 jdk 安裝程序是一個(gè) exe 可執(zhí)行程序,直接安裝即可,在安裝過程中 可以選擇安裝路徑以及安裝的組件等,如果沒有特殊要求,選擇默認(rèn)設(shè)置即可。程序默認(rèn)的安裝路 徑在 c:program filesjava 目錄下。 2.環(huán)境變

9、量設(shè)置: 配置步驟為: 1)右擊“我的電腦”,點(diǎn)擊“屬性”:選擇“高級(jí)”選項(xiàng)卡,點(diǎn)擊“環(huán)境變量”。 2)在“系統(tǒng)變量”中,設(shè)置 3 項(xiàng)屬性,java_home,path,classpath(不分大小寫) java_home 指明 jdk 安裝路徑,假設(shè) jdk 的版本為 1.6.0_16,安裝路徑為默認(rèn)路 徑, 則該值應(yīng)設(shè)為 c:program filesjavajdk1.6.0_16,此路徑下包括 lib,bin,jre 等 文件夾(此變量最好設(shè)置,因?yàn)橐院筮\(yùn)行一體化管理平臺(tái),eclipse 等都需要此變量) ; path 使得系統(tǒng)可以在任何路徑下識(shí)別 java 命令,設(shè)為:%java_ho

10、me%bin; classpath 為 java 加載類(class or lib)路徑,只有類在 classpath 中,java 命令才能 識(shí)別,設(shè)為:.;%java_home%libdt.jar;%java_home%libtools.jar (要加.表示當(dāng) 前路徑),%java_home%就是引用前面指定的 java_home。 3.驗(yàn)證安裝成功: 1)打開“開始”“運(yùn)行” cmd java version 屏幕輸出 java 版本信息說明安裝成功,否則說明配置錯(cuò)誤,需要重新進(jìn)行配置。 2.2.2. 安裝安裝 maven 及配置倉(cāng)庫(kù)及配置倉(cāng)庫(kù) 1.安裝 1)下載并解壓至想要安裝的目錄

11、2)設(shè)置 maven 系統(tǒng)環(huán)境變量,例如:maven_home=e:apache-maven 3)添加%maven_home%bin 至系統(tǒng)環(huán)境變量 path 中。 4)確認(rèn) maven 的安裝: cmd mvn version 屏幕輸出 maven 版本說明安裝成功。 2.配置本地 repository 本地 repository 的默認(rèn)值是$user.home/.m2/repository/??梢栽?user configuration(即在 $maven_home/conf/setting.xml)中改變本地 repository 的位置。例如本地倉(cāng)庫(kù)的位置在硬盤 的位置為:e:repo

12、sitory。在 setting.xml 可以進(jìn)行如下配置: e:repository 注意:本地 repository 必須是絕對(duì)路徑。 3.配置代理 可以在 user configuration(即在$maven_home/conf/setting.xml)中配置代理,配置如下: cvicseproxy true http 0 80 localhost releases admin loong2009 snapshots admin loong2009 trustie repository1 central human readable name for this m

13、irror. 8/content/groups/treleases trustie snapshots repository1 public-snapshots human readable name for this mirror. 8/content/groups/tsnapshots 注:setting.xml 配置文件見附件一 2.2.3. eclipse 中安裝中安裝 m2eclipse 插件插件 在 eclipse 中選擇help install new software .,在彈出的 install 對(duì)話框的 wor

14、k with 文本框中 添加 m2eclipse 插件的安裝地址 /sites/m2e,選擇“maven integration for eclipse (required)”進(jìn)行安裝。 安裝完成之后需要在 eclipse 中自行指定在本機(jī)中 maven 的 repository 位置。打開 window/proferences 菜單,點(diǎn)擊 maven 配置項(xiàng)的 installations,去掉默認(rèn)的 launch maven,添加機(jī)器 上的 maven 并選擇使用,點(diǎn)擊 maven 配置項(xiàng)的 user settings,選擇$maven

15、_home /conf/setting.xml 文件,完成配置。 2.2.4. eclipse 中安裝中安裝 rap 開發(fā)環(huán)境開發(fā)環(huán)境 打開 eclipse,選擇help install new software . 菜單。 在彈出的 install 對(duì)話框的 work with 文本框中輸入 rap 的安裝地址,如 1.3 版本為: /rt/rap/1.3/tooling。 選擇列表中出現(xiàn)的 rich ajax platform 并點(diǎn)擊下一步。 在詳細(xì)頁面點(diǎn)擊下一步。 在許可證頁面選擇同意并點(diǎn)擊完成按鈕。 安裝完成后確認(rèn)重啟 eclipse

16、。 eclipse 重啟后會(huì)出現(xiàn)歡迎頁面,選擇 rich ajax platform(rap) 選擇 install target platform 選擇確定按鈕。 2.2.5. eclipse 中安裝國(guó)際化編輯插件中安裝國(guó)際化編輯插件 打開 eclipse,選擇help install new software . 菜單。 在彈出的 install 對(duì)話框的 work with 文本框中輸入 jinto 的安裝地址: http:/www.guh- software.de/eclipse/。 選擇列表中出現(xiàn)的 opensource tools 并點(diǎn)擊下一步。 在詳細(xì)頁面點(diǎn)擊下一步。 在許可證頁

17、面選擇同意并點(diǎn)擊完成按鈕。 安裝完成后確認(rèn)重啟 eclipse。 2.2.6. eclipse 中導(dǎo)入編碼樣式中導(dǎo)入編碼樣式 打開 eclipse,選擇window preferencesjavacode stylecode templates 菜單。 點(diǎn)擊界面右面的 import 按鈕,選擇 idccodetemplates.xm 文件,點(diǎn)擊 apply 按鈕。 當(dāng)新建 java 接口/類時(shí),需要選擇 generate comments,如下圖: 2.2.7. 設(shè)置設(shè)置 eclipse 的默認(rèn)編碼的默認(rèn)編碼 打開 eclipse,選擇window preferencesgeneralwork

18、space菜單。 在 text file encoding 中選擇 other,并且把編碼改成 utf-8。 第第 3 章章 開開發(fā)發(fā)案案例例 3.1. 開開發(fā)發(fā)前前準(zhǔn)準(zhǔn)備備 參照第 2 章搭建好開發(fā)環(huán)境。 3.2. 組組織織結(jié)結(jié)構(gòu)構(gòu) 3.2.1. 目錄結(jié)構(gòu)目錄結(jié)構(gòu) 目錄目錄說明說明 cloud-ui界面原型的 web 工程 cloud-flexflex 開發(fā)工程 cloud -web 存放展示層構(gòu)件工程 user-management 存放用戶管理工程 3.2.2. 源碼組織源碼組織 本項(xiàng)目主要的包結(jié)構(gòu)如下:rguard.utmp.模塊名.構(gòu)件名.分組名 3.3

19、. 開開發(fā)發(fā)流流程程 3.3.1. 建立建立 eclipse 插件工程插件工程 啟動(dòng) eclispe, 從 eclispe 的 file 菜單創(chuàng)建一個(gè) eclipse 插件工程,file new project plug-in development plug-in project,輸入工程名 cloud-userman-impl,選擇合適的工程目錄,點(diǎn) 擊 next,進(jìn)入 plug-in project 向?qū)В渲猛瓿珊簏c(diǎn)擊 finish,完成建立工作。 參考上圖設(shè)置,點(diǎn)擊 finish 按鈕完成工程創(chuàng)建。 注意:(1)由于我們開發(fā)的是第一個(gè)版本,所以 version 先寫成 0.0.1。(

20、2)需要把”generate an activator, a java class that controls the plug-ins life cycle”取消勾選狀態(tài)。(3)如果開發(fā)的是 web 插件,需要把”this plug-in will make contributions to the ui”勾選上。 3.3.2. 添加依賴添加依賴 用 plug-in manifest edit 打開 manifest.mf 文件,切換到 dependecies 視圖,如下圖。 在 required plug-ins 中加入依賴的插件。 在 imported packages 中加入依賴的包。

21、 3.3.3. 添加導(dǎo)出包添加導(dǎo)出包 用 plug-in manifest edit 打開 manifest.mf 文件,切換到 runtime 視圖,如下圖: 在 exported packages 中添加要導(dǎo)出的包。 3.3.4. 開發(fā)聲明式服務(wù)開發(fā)聲明式服務(wù)(dservice) 在這里我們將開發(fā)一個(gè)簡(jiǎn)單的例子,這個(gè)例子包括以下部分: 發(fā)布一個(gè) osgi 服務(wù)。 引用一個(gè) osgi 服務(wù)。 使用構(gòu)件實(shí)例生命周期控制方法來激活和去活構(gòu)件實(shí)例。 為了舉例說明 dservice 功能,我們將開發(fā)一個(gè)簡(jiǎn)單的程序來展現(xiàn)它。這個(gè)例子包括 3 個(gè) bundle, 其一是服務(wù)接口(hello servic

22、e),對(duì)應(yīng) pojo project 其二是服務(wù)實(shí)現(xiàn),作為一個(gè)單獨(dú)的構(gòu)件位于單獨(dú)的 bundle 中,并且該構(gòu)件提供 osgi 服務(wù) (pojo-impl),對(duì)應(yīng) pojo-impl project 其三是服務(wù)使用方,也是作為一個(gè)單獨(dú)的構(gòu)件位于單獨(dú)的 bundle 中,并且該構(gòu)件需要使用 hello service 接口的 osgi 服務(wù),對(duì)應(yīng) pojo client project。 首先,創(chuàng)建一個(gè) hello-api 的服務(wù)接口工程(創(chuàng)建過程見 3.3.1. ),添加一個(gè)接口類: rguard.utmp.example.hello.ihello,代碼如下: /

23、* * * inforguard copyright 2010 cvicse, co.ltd . * all rights reserved. * * package: rguard.utmp.example.hello * filename: ihello.java * */ package rguard.utmp.example.hello; /* * * 描述: * * 服務(wù)接口 * * 創(chuàng)建日期 2010-6-1 * * author li_ming * version 1.0 * */ public interface ih

24、ello /* * 打招呼 * param name 姓名 * return 打招呼語句 */ public string sayhello(string name); 使 hello-api 工程支持 maven,操作如下圖: 點(diǎn)擊“enable dependency managerment”,彈出配置界面,填寫如下: 填寫完后,點(diǎn)擊“finish”,這時(shí)候 pom.xml 文件會(huì)報(bào)錯(cuò),你需要把下面的代碼加入 pom.xml 的標(biāo)簽后面: org.codehaus.mojo build-helper-maven-plugin 1.1 add-source generate-sources a

25、dd-source src org.apache.felix maven-bundle-plugin 2.0.0 true $pom.artifactid rguard.utmp.example.hello pom.xml 中各標(biāo)簽的詳細(xì)說明見附錄五。 雙擊 manifest.mf,在 runtime 中把 rguard.utmp.example.hello 包暴露出來, 詳見 3.3.3. 。 接下來只需要在 eclipse 中右擊工程或者 pom 文件,選擇 run as maven install 即完成工程的構(gòu)建 工作。當(dāng) m

26、aven 報(bào)告info build successful 則 hello service 服務(wù)構(gòu)件的 jar 包已經(jīng)安裝到 maven 的本地庫(kù)中,同時(shí)生成一個(gè)副本位于工程根目錄的 target 下。 第二步創(chuàng)建 hello 接口的實(shí)現(xiàn)工程:hello-impl,雙擊 manifest.mf,在 dependencies 中添加 hello-api 插件的依賴,詳見 3.3.2. 。 添加一個(gè) ihello 接口的實(shí)現(xiàn)類:rguard.utmp.example.hello.impl. helloimpl,代碼 如下: /* * * inforguard copyr

27、ight 2010 cvicse, co.ltd . * all rights reserved. * * package: rguard.utmp.example.hello.impl * filename: helloimpl.java * */ package rguard.utmp.example.hello.impl; import rguard.utmp.example.hello.ihello; /* * * 描述: * * 服務(wù)的實(shí)現(xiàn) * * 創(chuàng)建日期 2010-6-1 * * autho

28、r li_ming * version 1.0 * */ public class helloimpl implements ihello /* * 構(gòu)造函數(shù) */ public helloimpl() system.out.println(helloimpl starting.); /* (non-javadoc) * see rguard.utmp.example.hello.ihello#sayhello(java.lang.string) */ public string sayhello(string name) string result = hell

29、o + name; return result; 為了能夠管理這些構(gòu)件和讓 dservice 框架識(shí)別我們寫的 pojo 并將之發(fā)布為 hello 的 osgi 服務(wù), 我們還必須要定義一個(gè)元數(shù)據(jù)文件,名稱為 metadata.xml(詳見附件七),位于本 project 的根目錄下。 其內(nèi)容如下: component 節(jié)點(diǎn)聲明了一個(gè)構(gòu)件,classname 聲明了該構(gòu)件實(shí)現(xiàn)類,immediate 聲明該構(gòu)件不是 即時(shí)構(gòu)件,也就是說當(dāng) osgi 框架中發(fā)現(xiàn)需要該服務(wù)時(shí)才實(shí)例化該構(gòu)件。 component 下的 service 節(jié)點(diǎn)表示本構(gòu)件會(huì)以構(gòu)件實(shí)例為服務(wù)對(duì)象對(duì)外提供 osgi 服務(wù),服務(wù)的

30、 接口默認(rèn)暴露出當(dāng)前構(gòu)件實(shí)現(xiàn)的所有接口,也可以在 service 節(jié)點(diǎn)下加入 provide 節(jié)點(diǎn)來決定該暴露 的詳細(xì)的接口,以及對(duì)應(yīng)的服務(wù)屬性等,詳見附件七。 instance 節(jié)點(diǎn)表示在當(dāng)前構(gòu)件在運(yùn)行時(shí)被 dservice 框架初始化完畢之后,根據(jù)配置來確定實(shí)例 化構(gòu)件的次數(shù),即有多少個(gè) instance 就會(huì)有多少個(gè)構(gòu)件實(shí)例(注意不是指服務(wù)對(duì)象)。 源代碼和元數(shù)據(jù)定義完成之后,還需要使 hello-impl 工程支持 maven,并修改 pom.xml: org.codehaus.mojo build-helper-maven-plugin 1.1 add-source generate

31、-sources add-source src org.apache.felix maven-bundle-plugin 2.0.0 true $pom.artifactid rguard.utmp.example.hello.impl metadata.xml org.trustie.loong.modules.loong-dservice loong-dservice-plugin 1.0.0 dservice-bundle rguard.utmp.example hello-api 0.0.1 bundle 本 project

32、所有工作做完之后,同樣只需要在 eclipse 中右擊 project,run as maven install,maven 會(huì)為我們將 project 打包成為 dservice bundle 安裝到 maven 本地庫(kù)中,并在 target 目 錄下生成同樣一份 jar 文件。 最后建立一個(gè)服務(wù)消費(fèi)工程 hello-client,雙擊 manifest.mf,在 dependencies 中添加 rguard.utmp.example.hello的依賴,詳見 3.3.2. 。 添加一個(gè)服務(wù)使用類:rguard.utmp.examp

33、le.hello.client.helloclient,代碼如下: /* * * inforguard copyright 2010 cvicse, co.ltd . * all rights reserved. * * package: rguard.utmp.example.hello.client * filename: helloclient.java * */ package rguard.utmp.example.hello.client; import rguard.utmp.example

34、.hello.ihello; /* * * 描述: 服務(wù)消費(fèi)類 * 創(chuàng)建日期 2010-6-1 * author li_ming * version 1.0 * */ public class helloclient implements runnable /* * 兩個(gè)調(diào)用之間的延遲。 */ private static final int delay = 5000; /* * hello 服務(wù)。 * 通過容器注入。 * */ private ihello m_hello; / 需要引用的服務(wù)。 /* * 結(jié)束標(biāo)志。 */ private boolean m_end = false; /*

35、* 名稱屬性。 * 通過容器注入。 */ private string m_name; public helloclient() system.out.println(helloclient starting.); /* * run 方法。 * see java.lang.runnable#run() */ public void run() while (!m_end) try invokehelloservices(); thread.sleep(delay); catch (interruptedexception ie) /* 將重新檢查 */ /* * 調(diào)用 hello 服務(wù)。 */

36、 public void invokehelloservices() for (int i = 0; m_hello != null i+) system.out.println(m_helloi.sayhello(m_name); /* * 啟動(dòng)。 */ public void starting() system.out.println(hello client is starting in mathod starting.); m_end = false; new thread(this).start(); /* * 停止。 */ public void stopping() system

37、.out.println(hello client is stopping in mathod stopping.); m_end = true; 該構(gòu)件將會(huì)創(chuàng)建一個(gè)線程,循環(huán)調(diào)用服務(wù)對(duì)象的 sayhello 方法。當(dāng)該構(gòu)件在 dservice 框架中 初始化之后,只要發(fā)現(xiàn)有 hello 接口的服務(wù)存在,就會(huì)馬上創(chuàng)建一個(gè)構(gòu)件實(shí)例,并啟動(dòng)之,調(diào)用構(gòu) 件實(shí)例生命周期控制方法(即 helloclient 的 starting 方法,該方法在元數(shù)據(jù)中聲明。)啟動(dòng)一個(gè)新 的線程并循環(huán)調(diào)用服務(wù)對(duì)象的 sayhello 方法。當(dāng)服務(wù)提供提供者去活之后,即服務(wù)對(duì)象消失時(shí), dservice 框架也會(huì)停止構(gòu)件實(shí)

38、例,同時(shí)也會(huì)調(diào)用構(gòu)件的聲明周期控制方法設(shè)置線程啟動(dòng)標(biāo)識(shí),停止 線程。 在 dservice 構(gòu)件中,如果需要使用 osgi 服務(wù),只需要在構(gòu)件實(shí)現(xiàn)類中定義一個(gè)成員變量,類 型為服務(wù)接口類型,并在元數(shù)據(jù)中聲明引用 osgi 服務(wù),就可以在下面的代碼中直接使用該變量了, 因?yàn)?dservice 框架會(huì)將具體的服務(wù)對(duì)象引用動(dòng)態(tài)的注入到當(dāng)前構(gòu)件實(shí)例,或者通過元數(shù)據(jù)中聲明 的方法將服務(wù)對(duì)象綁定到構(gòu)件實(shí)例。 dservice 框架的服務(wù)對(duì)象注入本身是考慮了同步的,所以開發(fā)人員并不需要關(guān)注對(duì)于服務(wù)對(duì)象 的同步控制。從構(gòu)件的公共方法進(jìn)入一直到該方法完成,只要該服務(wù)提供者存在,引用的服務(wù)對(duì)象 都不會(huì)中途改變,但

39、是由于 osgi 環(huán)境的動(dòng)態(tài)性,服務(wù)對(duì)象隨時(shí)都有可能因?yàn)榉?wù)不再提供而消失 (或其他服務(wù)對(duì)象變更),如果在調(diào)用服務(wù)的構(gòu)件中服務(wù)對(duì)象消失的話,構(gòu)件調(diào)用服務(wù)對(duì)象的方法 處會(huì)收到一個(gè) runtimeexception,表示服務(wù)對(duì)象已經(jīng)不存在了;而且如果還有其他的該服務(wù)的使用 者的話,dservice 框架也有機(jī)制保證基于之前已銷毀的服務(wù)對(duì)象的操作不會(huì)再繼續(xù)做下去,而其他 使用者的操作也會(huì)等到新的服務(wù)對(duì)象注入完成之后,基于新的服務(wù)對(duì)象來完成后續(xù)的內(nèi)容。 在上面的構(gòu)件中還定義了 2 個(gè)構(gòu)件實(shí)例生命周期控制方法,starting 和 stoping 方法,這些方法 是被 dservice 框架調(diào)用,用來通

40、知構(gòu)件實(shí)例生命周期變化的。構(gòu)件啟動(dòng)之后包括 2 種時(shí)期: 當(dāng)構(gòu)件實(shí)例生命周期到為 valid 時(shí)期,表示構(gòu)件在元數(shù)據(jù)中所有的聲明的方面都已經(jīng)準(zhǔn)備好, 可以對(duì)外提供服務(wù)或者使用服務(wù)了。在 pojo-client 這個(gè)構(gòu)件中,當(dāng)構(gòu)件實(shí)例生命周期到 valid 時(shí)期,dservice 框架調(diào)用 starting 方法啟動(dòng)線程,線程直接使用服務(wù)對(duì)象循環(huán)打印出一句“hello loong loong loong”,之后當(dāng)服務(wù)引用不滿足時(shí),構(gòu)件的 stopping 方法會(huì)被調(diào)用,并停止該線程。 pojo-client 構(gòu)件同樣需要元數(shù)據(jù),因?yàn)橐粋€(gè)僅有一個(gè) pojo 的 bundle 是無法被 dservi

41、ce 框架 識(shí)別出并自動(dòng)部署的。為了讓 dservice 框架能夠識(shí)別當(dāng)前構(gòu)件的需求,必須為構(gòu)件定義元數(shù)據(jù), 元數(shù)據(jù)文件必須位于 project 的根目錄下,名稱為 metadata.xml,具體的元數(shù)據(jù)內(nèi)容如下: 聲明的元數(shù)據(jù)意義按照 xml 中注釋的序號(hào)標(biāo)注,依次為: 1.聲明一個(gè)名稱為helloclient的構(gòu)件,構(gòu)件實(shí)現(xiàn)類為 rguard.utmp.example.hello.client.helloclient ,是即時(shí)構(gòu)件(即所有聲明的 方面狀態(tài)為可用時(shí)即刻激活構(gòu)件實(shí)例)。 2.聲明構(gòu)件實(shí)例生命周期控制的 2 個(gè)方法,當(dāng)狀態(tài)變?yōu)?valid 時(shí)調(diào)用 s

42、tarting 方法,當(dāng)狀 態(tài)變?yōu)?invalid 時(shí)調(diào)用 stopping 方法。 3.聲明配置屬性,該屬性名稱為helloc,與字段 m_name 關(guān)聯(lián),但是沒有聲明 屬性值。如果屬性是與字段關(guān)聯(lián)的話,則是由 dservice 框架注入到具體的構(gòu)件實(shí)例對(duì)象中的。 4.聲明引用 osgi 服務(wù),該服務(wù)對(duì)象直接關(guān)聯(lián)到 pojo 的字段m_hello,服務(wù)的接口類型此 處沒有聲明,則是直接通過反射字段的類型取得,因?yàn)樵撟侄问菙?shù)組,所以接口類型 dservice 框 架已知。引用的基數(shù)是至少有一個(gè)服務(wù),最多不限,即當(dāng)服務(wù)提供者少于一個(gè)時(shí),構(gòu)件會(huì)變?yōu)?invalid 的狀態(tài),而多

43、于 1 個(gè)時(shí),會(huì)將所有的服務(wù)對(duì)象以數(shù)組的形式交給構(gòu)件實(shí)例。此處引用服務(wù) 是關(guān)聯(lián)到字段,所以 dservice 框架會(huì)通過注入的方式將服務(wù)對(duì)象傳遞給構(gòu)件實(shí)例對(duì)象。 5.聲明一個(gè)構(gòu)件實(shí)例,構(gòu)件和構(gòu)件實(shí)例的關(guān)系好比 java 的類和對(duì)象的關(guān)系,當(dāng)聲明一個(gè) component 之后只定義了一個(gè)構(gòu)件類型,而具體的構(gòu)件實(shí)例則需要通過聲明 instance 來定義。此 處聲明的 instance 表示需要?jiǎng)?chuàng)建構(gòu)件helloclient的一個(gè)構(gòu)件實(shí)例。 6.聲明在構(gòu)件中定義的名稱為helloc的屬性的值是loong loong loong。構(gòu) 件實(shí)例節(jié)點(diǎn)下的屬性會(huì)覆蓋掉構(gòu)件中聲明的同名的屬

44、性的值。 源代碼和元數(shù)據(jù)定義完成之后,還需要使 hello-client 工程支持 maven,并修改 pom.xml: 完成以上步驟之后請(qǐng)執(zhí)行 run as maven install。當(dāng) maven 提示構(gòu)建成功之后,本 jar 包會(huì)安裝到 本地 maven 庫(kù)中,并且位于 project 根目錄下的 target 目錄下同時(shí)產(chǎn)生打包成 bundle 的 jar 文件。 第第 4 章章 常常見見問問題題解解答答 【列出開發(fā)過程中的常見問題清單。 】 格式: 清單 1:清單項(xiàng)描述; 清單 2:清單項(xiàng)描述。 第第 5 章章 參參考考 此處列出本文檔的參考文獻(xiàn) 格式: 編號(hào) 文獻(xiàn)名稱 版本號(hào)清單

45、(多個(gè)需用逗號(hào)間隔),組織名清單(多個(gè)需用逗號(hào)間隔), 時(shí)間 url 地址 舉例: 1 the standard for the format of arpa internet text messages std 11, rfc 822, udel, august 1982 /rfc/rfc822.txt 引用舉例: 2 the standard for the format of arpa internet text messages 附附錄錄一一 setting.xml !- localrepository | the path to the local

46、 repository maven will use to store artifacts. | | default: /.m2/repository /path/to/local/repo - e:rapworkspacerepository !- interactivemode | this will determine whether maven prompts you when it needs input. if set to false, | maven will use a sensible default value, perhaps based on some other s

47、etting, for | the parameter in question. | | default: true true - !- offline | determines whether maven should attempt to connect to the network when executing a build. | this will have an effect on artifact downloads, artifact deployment, and others. | | default: false false - !- plugingroup | spec

48、ifies a further group identifier to use for plugin lookup. com.your.plugins - cvicseproxy true http 0 80 localhost !- server | specifies the authentication information to use when connecting to a particular server, identified by | a unique name within the system (referred to by the id att

49、ribute below). | | note: you should either specify username/password or privatekey/passphrase, since these pairings are | used together. | deploymentrepo repouser repopwd - !- another sample, using keys to authenticate. siteserver /path/to/private/key optional; leave empty if not used. - releases ad

50、min loong2009 snapshots admin loong2009 !- mirror | specifies a repository mirror site to use instead of a given repository. the repository that | this mirror serves has an id that matches the mirrorof element of this mirror. ids are used | for inheritance and direct lookup purposes, and must be uni

51、que across the set of mirrors. | mirrorid repositoryid human readable name for this mirror. http:/ - trustie repository1 central human readable name for this mirror. 8/content/groups/treleases trustie snapshots repository1 public-snapshots human readable name for this mirror. http:/5

52、8/content/groups/tsnapshots !- profile | specifies a set of introductions to the build process, to be activated using one or more of the | mechanisms described above. for inheritance purposes, and to activate profiles via | or the command line, profiles have to have an id that is unique. |

53、| an encouraged best practice for profile identification is to use a consistent naming convention | for profiles, such as env-dev, env-test, env-production, user- jdcasey, user-brett, etc. | this will make it more intuitive to understand what the set of introduced profiles is attempting | to accompl

54、ish, particularly when you only have a list of profile ids for debug. | | this profile example uses the jdk version to trigger activation, and provides a jdk-specific repo. jdk-1.4 1.4 jdk14 repository for jdk 1.4 builds http:/ default always - !- | here is another profile, activated by the system p

55、roperty target-env with a value of dev, | which provides a specific path to the tomcat instance. to use this, your plugin configuration | might hypothetically look like: | | . | | org.myco.myplugins | myplugin | | | $tomcatpath | | | . | | note: if you just wanted to inject this configuration whenev

56、er someone set target-env to | anything, you could just leave off the inside the activation- property. | env-dev target-env dev /path/to/tomcat/instance - !- activeprofiles | list of profiles that are active for all builds. | alwaysactiveprofile anotheralwaysactiveprofile - 附附錄錄二二 常常用用動(dòng)動(dòng)名名詞詞 常用名稱:常用

57、名稱: 用戶user角色role 知識(shí)庫(kù)knowledge流程workflow 策略rule 資產(chǎn)asset 報(bào)表report 工單order 配置config組group 代理agent 視圖view 區(qū)域zone 機(jī)房machine room 線line節(jié)點(diǎn)node 機(jī)架frame 動(dòng)作action 風(fēng)險(xiǎn)risk 拓?fù)鋞opology 模板template中心center 適配器adapter 權(quán)限popedom 日志log 狀態(tài)state 威脅threat 常用動(dòng)詞:常用動(dòng)詞: 添加add 刪除del 修改modify 查詢(返回一個(gè)對(duì)象)load 查詢(返回一組對(duì)象且查 詢包含過濾條件

58、) query枚舉enum 分析analyse 統(tǒng)計(jì)stat 關(guān)聯(lián)correlate評(píng)估assess 獲取get設(shè)置set 附附錄錄三三 本本地地化化資資源源文文件件的的創(chuàng)創(chuàng)建建方方法法 首先需在 eclipse 中安裝 jinto 插件,安裝地址為 http:/www.guh-software.de/eclipse/。 在 src 中新建一個(gè) resourcebundle file 文件 打開的對(duì)話框中 設(shè)置屬性文件前綴名 name 比如 eventinfo 選擇 language chinese 選擇 country china 點(diǎn)擊添加,添加一個(gè)文件為 eventinfo_zh_cn.p

59、roperties 之后可以多次選擇 language conntry 點(diǎn)擊添加 創(chuàng)建多個(gè) properties 文件 點(diǎn)擊完成 finish 打開剛才創(chuàng)建的文件 keys 列設(shè)置鍵 chinese(china)列設(shè)置相應(yīng)的值 附附錄錄四四 manifest.mf manifest-version: 1.0 bundle-manifestversion: 2 bundle-name: %bundle-name bundle-vendor: %bundle-vendor bundle-localization: localization/eventinfo bundle-symbolicname

60、: loong-admin-tools-event;singleton:=true bundle-version: 1.0.0.qualifier require-bundle: org.eclipse.rap.ui,loong-integration-commons;bundle-version=1.0.0 bundle-activationpolicy: lazy bundle-requiredexecutionenvironment: javase-1.6 import-package: org.osgi.service.event;version=1.2.0,org.trustie.l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論