| 2007 年 1 月 04 日 使用面向 Java 編程語(yǔ)言的 SCA 客戶(hù)機與實(shí)現模型構建和集成應用程序。本文說(shuō)明了實(shí)現示例 SCA 應用程序的基本步驟,包括本地和遠程服務(wù)以及組裝各種服務(wù)。 本文將說(shuō)明開(kāi)發(fā)和部署 SCA 應用程序的主要概念。我們將說(shuō)明如何創(chuàng )建組件實(shí)現來(lái)提供遠程服務(wù)、本地服務(wù)、配置屬性和服務(wù)引用以及如何創(chuàng )建組件、入口點(diǎn)、外邊服務(wù)和模塊。 示例應用程序:Innova Solutions 開(kāi)發(fā) 我們將詳細說(shuō)明一家名為 Innova solutions 的虛構軟件公司所進(jìn)行的活動(dòng),該公司向其員工提供不同的服務(wù),以便查看自己的工資單信息、休假詳細信息、能力詳細信息、個(gè)人信息和績(jì)效評級。 以 下示例說(shuō)明了構建用于查看員工的工資單信息的服務(wù)的過(guò)程,可以通過(guò) Web 應用程序和 Web 服務(wù)客戶(hù)機訪(fǎng)問(wèn)此服務(wù)。Innova solutions 將其應用程序實(shí)現為兩個(gè)模塊,從而提供了可重用性和靈活性。這兩個(gè)模塊分別為 Payroll 模塊和 Web 前端模塊: 圖 1. Payroll 模塊關(guān)系圖 ![]() innovasolutions.payrollmodule 模塊表示 payroll 服務(wù),此服務(wù)用于使用 Web 服務(wù)協(xié)議訪(fǎng)問(wèn)遺留系統中的員工工資單信息。它包含以下內容:
下圖顯示了 Web front-end 模塊的不同組件: 圖 2. Payroll front-end 模塊 ![]() innovasolutions.webclientmodule 模塊可對用于將信息記錄到系統中和訪(fǎng)問(wèn)員工工資單信息的基于瀏覽器的功能起到促進(jìn)作用。它包含以下內容:
示例應用程序開(kāi)發(fā)涉及到兩個(gè) SCA 模塊的開(kāi)發(fā),下面我們將對此進(jìn)行介紹。 創(chuàng )建 innovasolutions.payrollmodule SCA 模塊 innovasolutions.payrollmodule 是通過(guò)這樣構建的:在文件系統中構建一個(gè)名為 innovasolutions.payrollmodule 的文件夾,并在該文件夾的根目錄下放置一個(gè) sca.module 文件。 清單 1 顯示了 sca.module 的內容,該文件是一個(gè) xml 文件。 清單 1. sca.module
Payroll Data Service Implementation:我們首先創(chuàng )建由 PayrollDataService 服務(wù)提供的 PayrollDataService 接口;此服務(wù)向其員工提供工資單信息。然后,我們將創(chuàng )建 PayrollDataServiceImpl,以向 Innova solutions 的員工提供 PayrollDataService 服務(wù)。 我們創(chuàng )建名為 services/payrolldata 的子目錄,并將所有組成 PayrollDataServiceImpl 實(shí)現的文件放置到其中。 清單 2 顯示了 PayrollDataService Java 接口。 清單 2. PayrollDataService Java 接口
清單 3 說(shuō)明了 PayrollDataServiceImpl Java 實(shí)現。 清單 3. PayrollDataServiceImpl Java 實(shí)現
上面的代碼片段實(shí)現了之前的 PayrollDataService 接口。在實(shí)現中使用了一個(gè) @Service Annotation 來(lái)聲明服務(wù)及其接口。 清單 4 顯示了上述實(shí)現的組件類(lèi)型、side 文件。 清單 4. 組件類(lèi)型、side 文件
Payroll Data Service Component:SCA 組件是通過(guò)配置實(shí)現的引用和屬性創(chuàng )建的。配置引用需要將其連接到其他組件提供的服務(wù)或外部服務(wù)。此處,我們將通過(guò)配置 PayrollDataServiceImpl 創(chuàng )建 PayrollDataServiceComponent。 將使用 component 元素將所創(chuàng )建的 SCA 組件添加到 sca.module 文件,該元素具有一個(gè) name 屬性,指定組件的名稱(chēng)。 清單 5 顯示了創(chuàng )建 payrollDataServiceComponent 后的 sca.module 文件。 清單 5. 創(chuàng )建了 payrollDataServiceComponent 后的 sca.module 文件
創(chuàng )建 TaxRateRules Web 服務(wù)外部服務(wù):此處我們將創(chuàng )建一個(gè)外部服務(wù) TaxRateRulesService,以提供向 innovasolutions.payrollmodule 的員工提供 TaxRateRulesService 接口的服務(wù)。 我們首先創(chuàng )建一個(gè)名為 services/taxraterules 的子目錄,以將 TaxRateRulesService 外部服務(wù)所需的所有文件放入其中。業(yè)務(wù)合作伙伴實(shí)際實(shí)現此外部服務(wù),將提供一個(gè) TaxRateRulesService.wsdl。為了處理靜態(tài)數據類(lèi)型,我們?yōu)?wsdl portType 創(chuàng )建了對應的 Java 接口。 清單 6 顯示了 wsdl portType 的 Java 接口的大致情況。 清單 6. wsdl portType 的 Java 接口
接下來(lái),我們將以下代碼添加到前面指定的 sca.module 文件,以創(chuàng )建名為 TaxrateRulesService 的外部服務(wù)。 清單 7 顯示了添加 TaxrateRulesService 后的 sca.module 文件。 清單 7. 添加 TaxrateRulesService 后的 sca.module 文件
Payroll Service Implementation:此處我們將討論 PayrollServiceImpl 的實(shí)現,該實(shí)現提供一個(gè)服務(wù),此服務(wù)在 innovasolutions.payrollmodule 中向其員工提供 PayrollService 接口。此實(shí)現使用兩個(gè)其他服務(wù)提供的接口引用這兩個(gè)服務(wù),即 PayrollDataService 接口(本地服務(wù))和 TaxRateRulesService 接口(外部服務(wù))。 我們將首先創(chuàng )建名為 services/payroll 的子目錄,并將所有組成 PayrollServiceImpl 實(shí)現的文件放入其中。 清單 8 顯示了 PayrollService Java 接口。 清單 8. PayrollService Java 接口
上面的 PayrollService Java 接口包含一個(gè) getPayrollStatement() 方法,其參數是 employeeID,將返回 PayrollStatement 對象。由于這需要為外部服務(wù),因此使用 @Remotable Annotation 將接口聲明為遠程接口。在此實(shí)現中,通過(guò)遠程服務(wù)交換的所有參數都是服務(wù)數據對象(Service Data Objects,SDO)類(lèi)型的數據。 清單 9 顯示了 PayrollStatement Java 接口。 清單 9. PayrollStatement Java 接口
清單 10 顯示了 PaySplitUP Java 接口。 清單 10. PaySplitUP Java 接口
清單 11 說(shuō)明了 PayrollServiceImpl Java 實(shí)現類(lèi)。 清單 11. PayrollServiceImpl Java 實(shí)現類(lèi)
上面所示的 PayrollServiceImpl 類(lèi)實(shí)現了 PayrollService 接口。PayrollServiceImpl 使用 @Reference Annotation 定義了兩個(gè)成員變量,以引用另外兩個(gè)服務(wù),即 PayrollDataService 和 TaxRateRulesService。SCA 運行時(shí)通過(guò)注入解析這些引用。PayrollServiceImpl 使用 @Property Annotation 在運行時(shí)配置成員變量 currency。PayrollStatement 對象是使用 SDO 數據工廠(chǎng) API 作為服務(wù)數據對象 (SDO) 創(chuàng )建的。 清單 12 顯示了上述 PayrollServiceImpl 的組件類(lèi)型文件。 清單 12. PayrollServiceImpl 的組件類(lèi)型文件
Payroll Service Component:現在我們將通過(guò)配置上面實(shí)現的 PayrollServiceImpl 來(lái)創(chuàng )建 PayrollServiceComponent。我們將對上面指定的 sca.module 文件添加若干行代碼來(lái)包括 PayrollServiceComponent,如清單 13 中所示。 清單 13. 添加了額外代碼行的 sca.module 文件
創(chuàng )建 payroll 服務(wù) Web 服務(wù)入口點(diǎn):下一步我們將創(chuàng )建名為 PayrollService 的入口點(diǎn)來(lái)發(fā)布 PayrollService,以便 Web 服務(wù)客戶(hù)機能夠訪(fǎng)問(wèn) PayrollService。需要首先創(chuàng )建 SCA 運行時(shí)用于綁定到入口點(diǎn)的 WSDL 定義文件,然后才能在 sca.module 文件中創(chuàng )建入口點(diǎn)。我們向 sca.module 文件添加數行代碼來(lái)表示 PayrollService 入口點(diǎn)的創(chuàng )建。 清單 14 顯示了添加到上面指定的 sca.module 文件中的代碼行。 清單 14. 添加了額外代碼行的指定 sca.module 文件
創(chuàng )建 innovasolutions.webclientmodule 在 此部分,我們將創(chuàng )建 Innova Solutions Web 應用程序,以訪(fǎng)問(wèn)名為 payroll service 的外部服務(wù),此服務(wù)使用了本地服務(wù)組件、SCA 范圍管理、JSP 和 Servlet。Innova Solutions Web 應用程序允許其員工登錄并使用范圍確定為 HTTP 會(huì )話(huà)的本地服務(wù)跟蹤自己的概要,還向其提供了對工資單系統的訪(fǎng)問(wèn)和顯示他們每月的工資單。它將首先把用戶(hù)導航到登錄頁(yè),然后前進(jìn)到工資單系統,在其中顯示 每月的工資單。 以下各個(gè)部分將說(shuō)明如何創(chuàng )建 InnovaSolutions Web 應用程序外部的各個(gè) SCA 服務(wù),即 login、user profile 和 payroll。然后我們將了解如何由 Servlet、JSP 和標記庫訪(fǎng)問(wèn)這些服務(wù),以提供用戶(hù)界面。 我 們將首先實(shí)現 LoginServiceImpl,此服務(wù)負責將用戶(hù)登錄到應用程序中。LoginServiceImpl 提供服務(wù) LoginService,該服務(wù)在 innovasolutions.webclientmodule 中向員工提供 LoginService 接口。 首先,我們創(chuàng )建名為 services/profile 的子文件夾,并將屬于 LoginServiceImpl 實(shí)現的所有文件放入其中。 清單 15 顯示了 LoginService Java 接口。 清單 15. LoginService Java 接口
接下來(lái),編寫(xiě)實(shí)現 LoningService 接口的 LoginServiceImpl Java 實(shí)現,該實(shí)現使用其接口 profileservice 引用本地服務(wù)。 清單 16 給出了 LoginServiceImpl Java 實(shí)現。 清單 16. LoginServiceImpl Java 實(shí)現
上面的 LoginServiceImpl 實(shí)現了 LoginService 接口,并使用其接口 profileservice 引用本地服務(wù)。 Login Component:此處我們將通過(guò)配置 LoginServiceImpl 實(shí)現來(lái)創(chuàng )建 LoginServiceComponent。讓我們看看顯示包含 LoginServiceComponent 的 innovasolutions.webclientmodule 的 sca.module 文件的代碼。 清單 17 顯示了 innovasolutions.webclientmodule 的 sca.module 文件。 清單 17. innovasolutions.webclientmodule 的 sca.module 文件
Profile Service Implementation:在此部分,我們將簡(jiǎn)要地給出 profileServiceImpl,此實(shí)現提供了由接口 ProfileService 訪(fǎng)問(wèn)的服務(wù)。通過(guò)使用 ProfileService,可以在用戶(hù)的 Web 應用程序內導航時(shí)跟蹤用戶(hù)狀態(tài)。我們使用前面創(chuàng )建的子文件夾 services/profile 來(lái)放置組成 profileServiceImpl 實(shí)現的所有文件。 profileService Java 接口使用 @Scope Annotation 來(lái)聲明 ProfileServiceImpl 實(shí)例的范圍由會(huì )話(huà)確定。 清單 18 顯示了 ProfileService Java 接口。 清單 18. ProfileService Java 接口
ProfileServiceImpl 實(shí)現了 ProfileService Java 接口。清單 19 說(shuō)明了 ProfileServiceImpl Java 實(shí)現。 清單 19. ProfileServiceImpl Java 實(shí)現
Profile Service Component:現在我們將清單 20 中所示的代碼片段添加到 innovasolutions.webclientmodule 的 sca.module 文件中,從而創(chuàng )建 ProfileServiceComponent。 清單 20. 添加了額外代碼行的 sca.module 文件
清單 21 顯示了在 component 元素下添加的三行代碼 LoginServiceComponent。 清單 21. LoginServiceComponent
Payroll Service Web Service External Service:在此部分,我們將創(chuàng )建名為 PayrollService 的外部服務(wù),該接口在 innovasolutions.webclientmodule 中向用戶(hù)提供名為 PayrollService 的接口。 我 們首先創(chuàng )建一個(gè)名為 services/payroll 的子目錄,以將 PayrollService 外部服務(wù)所需的所有文件放入其中。此外部服務(wù)提供一個(gè) PayrollService.wsdl 文件。我們?yōu)?wsdl portType 創(chuàng )建對應的 Java 接口,即 PayrollService、PayrollStatement 和 PaySplitUP,以便在使用 PayrollService 時(shí)處理靜態(tài) Java 類(lèi)型。 最后,我們添加清單 22 中所示的代碼,以在 innovasolutions.webclientmodule 的 sca.module 文件中創(chuàng )建名為 PayrollService 的外部服務(wù)。 清單 22. 經(jīng)過(guò)修改以創(chuàng )建 PayrollService 的 sca.module 文件
Login HTML 頁(yè):login.html 頁(yè)將當前用戶(hù)的用戶(hù)名和密碼發(fā)送給 login Servlet。 Login Servlet:login Servlet 處理從 login.html 獲得的用戶(hù)名和密碼,并使用 ModuleContext API 調用 login 本地服務(wù)。CurrentModuleContext.getContext() 返回當前的模塊上下文,并隨后調用 locateService("LoginServiceComponent") 查詢(xún)本地服務(wù)。 Payroll Statement JSP: PayrollStatement.JSP 顯示 payroll 服務(wù)返回的員工的所有工資單信息。為了讓 Payroll Statement 頁(yè)不受實(shí)現細節的限制,Payroll Statement.jsp 使用了一系列 JSP 標記,即 login 標記、service 標記和 payroll status 標記。 以下部分對子系統構件進(jìn)行說(shuō)明。 創(chuàng )建 innovasolutions.payrollsubsystem 在此部分,我們將創(chuàng )建 innovasolutions.payrollsubsystem,此子系統對 innovasolutions.payroll 模塊進(jìn)行配置。首先,在文件系統中創(chuàng )建名為 innovasolutions.payrollsubsystem 的文件夾,并在根目錄放置 sca.subsystem 文件。 清單 23 顯示了 innovasolutions.payrollsubsystem 的 sca.subsystem 文件。 清單 23. innovasolutions.payrollsubsystem 的 sca.subsystem 文件
創(chuàng )建 innovasolutions.webclientsubsystem 在此部分,我們將創(chuàng )建 innovasolutions.webclientsubsystem,此子系統對 innovasolutions.webclient 模塊進(jìn)行配置。首先,在文件系統中創(chuàng )建名為 innovasolutions.webclientsubsystem 的文件夾,并在根目錄放置一個(gè) sca.subsystem 文件。 清單 24 顯示了 innovasolutions.webclientsubsystem 的 sca.subsystem 文件。 清單 24. innovasolutions.webclientsubsystem 的 sca.subsystem 文件
我們已經(jīng)演示了應用程序 Innova Solutions 開(kāi)發(fā)過(guò)程,以幫助您使用 SCA 客戶(hù)機和實(shí)現模型利用 Java 編程語(yǔ)言構建和集成應用程序。SCA 應用程序提供了服務(wù)的可移植性、可重用性和靈活性,從而將開(kāi)發(fā)人員從中間件編程的復雜性中解放出來(lái)。
| ||||||||||||||||||||||||||||||||||||||
聯(lián)系客服