OSGi与Spring DM:使用Spring DataSource

【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

CREATE TABLE CONTACT( 
CONTACTID int NOT NULL, 
FIRSTNAME varchar(300), 
LASTNAME varchar(300) 
);

对于连接管理,我们想使用 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

public class ContactDAOImpl implements ContactDAO { 
  DataSource dataSource; 
  public DataSource getDataSource() { 
    return dataSource; 
  } 
  public void setDataSource(DataSource dataSource) { 
    this.dataSource = dataSource; 
  } 
  public List getContactList() { 
    List contactList = new ArrayList(); 
    try { 
      Connection connection = dataSource.getConnection(); 
      Statement stmt= connection.createStatement(); 
      ResultSet rs =stmt.executeQuery("SELECT * FROM CONTACT"); 
      while(rs.next()){ 
        int contactId = rs.getInt("CONTACTID"); 
        String firstName = rs.getString("FIRSTNAME"); 
        String lastName = rs.getString("LASTNAME"); 
        Contact contact = new Contact(contactId,firstName,lastName); 
        contactList.add(contact); 
      } 
    } catch (SQLException e) { 
      e.printStackTrace(); 
    } 
    return contactList; 
  } 
  // 
}

你会注意到在代码清单 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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="contactDAOService"
class="com.javaworld.sample.osgi.spring.contact.impl.ContactDAOImpl">
<property name="dataSource" >
<ref bean="dataSource" />
</property>
</bean>
<bean name="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="org.apache.derby.jdbc.ClientDriver" />
<property name="url"
value="jdbc:derby://localhost:1527/C:/derby_home/databases/ClientDB" />
<property name="username" value="test" />
<property name="password" value="test" />
</bean>
</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编写的应用程序模块能够动态地进行添加、移除和更新,而且你还可以同时部署指定模块的多个版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值