程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> OSGi與Spring DM:使用Spring DataSource

OSGi與Spring DM:使用Spring DataSource

編輯:J2EE

【51CTO精選譯文】本文是《你好,OSGi》系列的第九部分。之前已經完成了使用Spring DM構建簡單應用並導入導出服務套件的過程,下面將介紹Spring DataSource的使用。顧名思義,Spring DataSource用於完成Spring應用程序與數據庫直接的聯絡。

51CTO編輯推薦:OSGi入門與實踐全攻略

使用 Spring DataSource

Spring框架的長處之一在於它為處理常見需求提供了一組預制的bean。在最後這個小節中,我們將學習Spring DM如何允許用戶訪問基於OSGi應用程序中的這些預制bean。

在這個練習中,我們將修改 ContactDAO套件,使它連接到一個RDBMS,來與聯絡表互動。對於連接管理,我們將使用Spring DataSource (org.springframework.jdbc.datasource.DriverManagerDataSource) 類。請注意 Spring 的 DataSource 是 org.springframework.bundle.spring.jdbc 服務套件的一部分。在這個練習中,我使用 apache Derby 來測試應用程序的代碼;你也可以使用你喜歡的數據庫。

該練習的第一步是在你的數據庫中創建聯絡表。可以使用代碼清單 11 中的 DDL 腳本創建這個 CONTACT 表。

代碼清單 11. CONTACT 表的 DDL

  1. CREATE TABLE CONTACT(
  2. CONTACTID int NOT NULL,
  3. FIRSTNAME varchar(300),
  4. LASTNAME varchar(300)
  5. );

對於連接管理,我們想使用 Spring 的 DriverManagerDataSource bean。問題在於, DriverManagerDataSource 類是 spring.jdbc 套件的一部分,而後者為了完成其工作需訪問你的 JDBC 驅動程序類。要解決該依賴性,最簡單的方法是將你的 JDBC 驅動程序 JAR 導入到 spring.jdbc 套件中。

第一步,右鍵點擊 org.springframework.bundle.spring.jdbc 套件,然後點擊 New --> Folder。將該文件夾命名為“JARs folder”。

接著,右鍵點擊新創建的 JARs folder,然後點擊 Import --> General --> File System。在 From Directory 下,File System 對話框應顯示包含你的 JDBC 驅動程序 JAR 目錄的問題。對於我,該位置是 C:\software\db-derby-10.2.2.0-bin\lib。 選擇該位置,將在 Select 框中顯示 JAR 列表。選擇 derbyclient.jar(如果你使用的是 Derby)然後單擊完成。Eclipse 將 derbyclIEnt.jar 導入到你的 JARs folder 中。

導入 JDBC 驅動程序 JAR 的最後一步是將其添加到你的套件路徑中。為此,在 Plug-in Manifest Editor 編輯器中打開 org.springframework.bundle.spring.jdbc 套件的 MANIFEST.MF 文件。然後切換到 Runtimes 標簽欄並選擇 jars/derbyclIEnt.jar,如圖 3 所示。

將 derbyclient.jar 添加到套件路徑
圖 3. 將 derbyclIEnt.jar 添加到套件路徑

(如果你喜歡,可以收到更新 bundle-classpath 條目至:Bundle-ClassPath: spring-jdbc-2.5.jar, jars/derbyclIEnt.jar。)

現在,我們已經准備好了,可以通過將 JDBC 代碼修改 ContactDAOImpl 類的實現,用來與 CONTACT 表互動。如果你需要,可以從本文的示例代碼導入這個 ContactDAOImpl.Java;或者只需使用如代碼清單 12 中所示的內容。

代碼清單 12. RDBMS 訪問的 ContactDAO 實現 - ContactDAOImpl.Java

  1. public class ContactDAOImpl implements ContactDAO {
  2. DataSource dataSource;
  3. public DataSource getDataSource() {
  4. return dataSource;
  5. }
  6. public void setDataSource(DataSource dataSource) {
  7. this.dataSource = dataSource;
  8. }
  9. public List getContactList() {
  10. List contactList = new ArrayList();
  11. try {
  12. Connection connection = dataSource.getConnection();
  13. Statement stmt= connection.createStatement();
  14. ResultSet rs =stmt.executeQuery("SELECT * FROM CONTACT");
  15. while(rs.next()){
  16. int contactId = rs.getInt("CONTACTID");
  17. String firstName = rs.getString("FIRSTNAME");
  18. String lastName = rs.getString("LASTNAME");
  19. Contact contact = new Contact(contactId,firstName,lastName);
  20. contactList.add(contact);
  21. }
  22. } catch (SQLException e) {
  23. e.printStackTrace();
  24. }
  25. return contactList;
  26. }
  27. //
  28. }

你會注意到在代碼清單 12 中 ContactDAOImpl.Java 有幾處修改:

首先,我們添加了作為 Java bean 屬性的 dataSource,包含相應的 getter 和 setter。Spring 將負責創建 DataSource 對象以及將其導入到 ContactDAOImpl。

getContactList() 方法從數據源(datasource)獲取連接,然後使用它來檢索 CONTACT 表中的所有聯絡記錄。請注意,代碼清單 12 是 ContactDAOImpl.Java 的一部分代碼;完整的代碼請查看示例代碼。

ContactDAOImpl 已經准備就緒,我們要做的最後一步是修改 ContactDAO 套件中的 contactdao-service.xm,代碼如代碼清單13 所示:

代碼清單 13. 更新 Spring 語境文件 - contactdao-service.XML

  1. < ?XML version="1.0" encoding="UTF-8"?>
  2. < beans XMLns="http://www.springframework.org/schema/beans"
  3. XMLns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. < bean name="contactDAOService"
  6. class="com.Javaworld.sample.osgi.spring.contact.impl.ContactDAOImpl">
  7. < property name="dataSource" >
  8. < ref bean="dataSource" />
  9. < /property>
  10. < /bean>
  11. < bean name="dataSource"
  12. class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  13. < property name="driverClassName"
  14. value="org.apache.derby.jdbc.ClIEntDriver" />
  15. < property name="url"
  16. value="jdbc:derby://localhost:1527/C:/derby_home/databases/ClIEntDB" />
  17. < property name="username" value="test" />
  18. < property name="passWord" value="test" />
  19. < /bean>
  20. < /beans>

contactdao-service.XML 的修改如下:

◆我們聲明了一個 dataSource bean,指向org.springframework.jdbc.datasource.DriverManagerDataSource。這配置了 Spring,來負責應用程序的數據庫連接管理。(請確保在你的 bean 定義中使用你的數據庫專用的 JDBC 屬性。)

◆接著,我們修改 contactDAOService 的定義來添加對於 dataSource bean 的依賴性。

這樣,利用 Spring DM構建的 HelloWorld 服務應用程序已經准備好了。當在 Equinox 容器中執行該應用程序時,它將在應用程序啟動時在控制台上輸出聯絡列表。

總結

OSGi 規范為 Spring 應用程序的開發引入了模塊化和動態服務。對於已經熟悉 Spring 編程和配置的開發者,Spring DM代表了一種更為簡易的入口,可以學習 OSGi 的動態、模塊化的開發規范,而無需學習 OSGi API。正如你在本文中所看到的,Spring DM對於 OSGi 中的面向服務應用程序開發是一個非常棒的平台。在一個正在運行的系統中,使用 Spring DM編寫的應用程序模塊能夠動態地進行添加、移除和更新,而且你還可以同時部署指定模塊的多個版本。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved