引言
本文將說明開發和部署 SCA 應用程序的主要概念。我們將說明如何創建組件實現來提供遠程服務、本地服務、配置屬性和服務引用以及如何創建組件、入口點、外邊服務和模塊。
示例應用程序:Innova Solutions 開發
我們將詳細說明一家名為 Innova solutions 的虛構軟件公司所進行的活動,該公司向其員工提供不同的服務,以便查看自己的工資單信息、休假詳細信息、能力詳細信息、個人信息和績效評級。
以下示例說明了構建用于查看員工的工資單信息的服務的過程,可以通過 Web 應用程序和 Web 服務客戶機訪問此服務。Innova solutions 將其應用程序實現為兩個模塊,從而提供了可重用性和靈活性。這兩個模塊分別為 Payroll 模塊和 Web 前端模塊:
圖 1. Payroll 模塊關系圖
innovasolutions.payrollmodule 模塊表示 payroll 服務,此服務用于使用 Web 服務協議訪問遺留系統中的員工工資單信息。它包含以下內容:
下圖顯示了 Web front-end 模塊的不同組件:
圖 2. Payroll front-end 模塊
innovasolutions.webclientmodule 模塊可對用于將信息記錄到系統中和訪問員工工資單信息的基于瀏覽器的功能起到促進作用。它包含以下內容:
應用程序開發
示例應用程序開發涉及到兩個 SCA 模塊的開發,下面我們將對此進行介紹。
創建 innovasolutions.payrollmodule
SCA 模塊 innovasolutions.payrollmodule 是通過這樣構建的:在文件系統中構建一個名為 innovasolutions.payrollmodule 的文件夾,并在該文件夾的根目錄下放置一個 sca.module 文件。
清單 1 顯示了 sca.module 的內容,該文件是一個 xml 文件。
清單 1. sca.module<?xml version="1.0" encoding="ASCII"?> <module xmlns="http://www.osoa.org/xmlns/sca/0.9" name="innovasolutions.payrollmodule"> </module> |
Payroll Data Service Implementation:我們首先創建由 PayrollDataService 服務提供的 PayrollDataService 接口;此服務向其員工提供工資單信息。然后,我們將創建 PayrollDataServiceImpl,以向 Innova solutions 的員工提供 PayrollDataService 服務。
我們創建名為 services/payrolldata 的子目錄,并將所有組成 PayrollDataServiceImpl 實現的文件放置到其中。
清單 2 顯示了 PayrollDataService Java 接口。
清單 2. PayrollDataService Java 接口package services.payrolldata; public interface PayrollDataService { float getBasic(String employeeID); float getvariablePay(String employeeID); float getHRA(String employeeID); float getProvidentFund(String employeeID); float getConveyance(String employeeID); float getIncomeTax(String employeeID); float getProfessionalTax(String employeeID); float getNetPay(String employeeID); } |
清單 3 說明了 PayrollDataServiceImpl Java 實現。
清單 3. PayrollDataServiceImpl Java 實現package services.payrolldata; @Service(PayrollDataService.class) public class payrollDataServiceImpl implements payrollDataService { public float getBasic(String employeeID){ . . . } public float getVariablePay(String employeeID){ . . . } public float getHRA(String employeeID){ . . . } public float getProvidentFund(String employeeID){ . . . } float getConveyance(String employeeID){ . . .} float getProfessionalTax(String employeeID){ . . . } public float getNetPay(String employeeID){ . . . } } |
上面的代碼片段實現了之前的 PayrollDataService 接口。在實現中使用了一個 @Service Annotation 來聲明服務及其接口。
清單 4 顯示了上述實現的組件類型、side 文件。
清單 4. 組件類型、side 文件<xml version="1.0" encoding="ASCII"?> <componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"> <service name="payrollDataService"> <interface.java interface="services.payrolldata.PayrollDataService"/> </service> </componentType> |
Payroll Data Service Component:SCA 組件是通過配置實現的引用和屬性創建的。配置引用需要將其連接到其他組件提供的服務或外部服務。此處,我們將通過配置 PayrollDataServiceImpl 創建 PayrollDataServiceComponent。
將使用 component 元素將所創建的 SCA 組件添加到 sca.module 文件,該元素具有一個 name 屬性,指定組件的名稱。
清單 5 顯示了創建 payrollDataServiceComponent 后的 sca.module 文件。
清單 5. 創建了 payrollDataServiceComponent 后的 sca.module 文件
<?xml version="1.0" encoding="ASCII"?> <module xmlns="http://www.osoa.org/xmlns/sca/0.9" name="innovasolutions.payrollmodule"> <component name="payrollDataServiceComponent"> <implementation.java class="services.payrolldata.PayrollDataServiceImpl"> </component> </module> |
創建 TaxRateRules Web 服務外部服務:此處我們將創建一個外部服務 TaxRateRulesService,以提供向 innovasolutions.payrollmodule 的員工提供 TaxRateRulesService 接口的服務。
我們首先創建一個名為 services/taxraterules 的子目錄,以將 TaxRateRulesService 外部服務所需的所有文件放入其中。業務合作伙伴實際實現此外部服務,將提供一個 TaxRateRulesService.wsdl。為了處理靜態數據類型,我們為 wsdl portType 創建了對應的 Java 接口。
清單 6 顯示了 wsdl portType 的 Java 接口的大致情況。
清單 6. wsdl portType 的 Java 接口
package services.taxrate; public interface TaxRateRulesService { public float getTaxRate (Float taxableIncome); } |
接下來,我們將以下代碼添加到前面指定的 sca.module 文件,以創建名為 TaxrateRulesService 的外部服務。
清單 7 顯示了添加 TaxrateRulesService 后的 sca.module 文件。
清單 7. 添加 TaxrateRulesService 后的 sca.module 文件
<externalService name="TaxRateRulesService"> <interface.java interface="services.taxraterules.TaxRateRulesService"/> <binding.ws port="http://www.taxrules.com/ TaxRateRulesService # wsdl.endpoint(TaxRateRulesService / TaxRateRulesService SOAP)"/> </externalService> |
Payroll Service Implementation:此處我們將討論 PayrollServiceImpl 的實現,該實現提供一個服務,此服務在 innovasolutions.payrollmodule 中向其員工提供 PayrollService 接口。此實現使用兩個其他服務提供的接口引用這兩個服務,即 PayrollDataService 接口(本地服務)和 TaxRateRulesService 接口(外部服務)。
我們將首先創建名為 services/payroll 的子目錄,并將所有組成 PayrollServiceImpl 實現的文件放入其中。
清單 8 顯示了 PayrollService Java 接口。
清單 8. PayrollService Java 接口
package services.payroll; import org.osoa.sca.annotations.Remotable; @Remotable public interface PayrollService{ public PayrollStatement getPayrollStatement(String employeeID); |
上面的 PayrollService Java 接口包含一個 getPayrollStatement() 方法,其參數是 employeeID,將返回 PayrollStatement 對象。由于這需要為外部服務,因此使用 @Remotable Annotation 將接口聲明為遠程接口。在此實現中,通過遠程服務交換的所有參數都是服務數據對象(Service Data Objects,SDO)類型的數據。
清單 9 顯示了 PayrollStatement Java 接口。
清單 9. PayrollStatement Java 接口
package services.payroll; import java.util.List; public interface PayrollStatement { List getPayrollDetails(); float getNetPay(); } |
清單 10 顯示了 PaySplitUP Java 接口。
清單 10. PaySplitUP Java 接口
package services.payroll; public interface PaySplitUP { String getPaycategory(); void setPaycategory(String payCategory); void setEarnings(); void setDeductions(); float getEarnings(); float getDeductions(); } |
共2頁: 1 [2] 下一頁 |