`

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编写的应用程序模块能够动态地进行添加、移除和更新,而且你还可以同时部署指定模块的多个版本。

分享到:
评论

相关推荐

    OSGi与Spring:Spring DM开发

    Spring DM不仅充分利用了Spring框架的强大功能,还实现了与OSGi规范的高度集成,使得开发者可以在OSGi环境下无缝地使用Spring的各种特性。Spring DM框架支持OSGi Specification Release 4及以上版本,同时兼容JDK ...

    SpringDM笔记31-Testing with OSGi and SpringDM

    标题 "SpringDM笔记31-Testing with OSGi and SpringDM" 涉及到的是在OSGi环境中使用SpringDM进行测试的相关知识。OSGi(Open Service Gateway Initiative)是一种Java模块化系统,允许动态地发现、加载和卸载服务。...

    基于OSGi和Spring开发Web应用.doc

    1. OSGi:OSGi 是一种面向服务的框架,能够提供动态模块部署和管理的能力。 2. Spring:Spring 是一个轻量级的 J2EE 开发框架,特点是面向接口编程和非侵入式的依赖注入。 3. Spring-DM:Spring-DM 是 Spring 开发...

    OSGI+SpringDM+Hessian

    SpringDM允许开发者使用熟悉的Spring配置来定义服务,这些服务可以在OSGI容器中被发现和使用。通过SpringDM,开发者可以利用Spring的强大功能,如依赖注入、AOP(面向切面编程)等,同时享受到OSGI带来的动态性。 ...

    osgi_spring_dm_jr

    标题中的"osgi_spring_dm_jr"可能是指OSGi(Open Service Gateway Initiative)框架下,Spring Dynamic Modules(Spring DM)的Java Runtime环境相关的知识。OSGi是一种模块化系统,用于构建可升级、可扩展和可配置...

    osgi+maven+springdm文档集

    **OSGI MAVEN SPRINGDM 文档集** 这个文档集主要涵盖了三个关键的Java开发技术:OSGI(Open Service Gateway Initiative)、Maven以及Spring Dynamic Modules(Spring DM)。这些技术都是现代Java开发中的重要组成...

    学习SpringDM+OSGI的总结

    最后,我们来看看如何将SpringDM与OSGI结合使用,并解决其中遇到的一些问题。 1. **版本冲突**:在整合过程中,可能会遇到版本不兼容的问题。例如,SpringDM中的`org.springframework.osgi.core`构建所需的JDK版本...

    未来10年:OSGi、Spring_DM

    Spring DM是Spring Framework的一个扩展,它将Spring框架的功能与OSGi的模块化能力相结合,提供了更为灵活的应用开发和部署模型。 - **SpringDM的关键作用**:SpringDM不仅能够充分利用OSGi的模块化优势,还能保持...

    spring-dm-osgi整合jar包

    标题“spring-dm-osgi整合jar包”和描述“spring-dm整合osgi所需所有jar包”提及的核心知识点是Spring Dynamic Modules(简称Spring DM)与OSGi(Open Service Gateway Initiative)框架的集成。这两个技术在Java...

    osgi-SpringDM

    Spring-DM指的是 Spring ...Spring-DM 的主要目的是能够方便地将 Spring 框架和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环境中,利用OSGi框架提供的服务,将应用变得 更加模块化。

    未来10年:OSGi、Spring-DM.docx

    未来10年:OSGi、Spring-DM OSGi(Open Service Gateway Initiative)是一种基于Java的动态模块化框架,旨在解决Java EE开发及部署模型的局限性。该框架可以提供模块化、动态性和灵活性,解决研发、部署和维护等...

    Eclipse RCP与Spring OSGi技术详解与最佳实践

    《Eclipse RCP与Spring OSGi:技术详解与最佳实践》由资源的Eclipse专家亲自执笔,并得到了Eclipse官方技术社区的强烈推荐,权威性毋庸置疑!内容全面,系统讲解了利用Eclipse RCP和Spring OSGi开发大规模Java应用的...

    SpringDM笔记28-Spring And OSGi:Layers of Integration

    标题中的"SpringDM笔记28-Spring And OSGi:Layers of Integration"表明这是一篇关于Spring框架与OSGi(Open Service Gateway Initiative)集成的详细笔记。OSGi是一种模块化系统,它允许Java应用程序以模块化的方式...

    osgi spring实例

    然而,需要注意的是,Spring DM在Spring 3.0之后被弃用,取而代之的是Spring OSGi,所以这个实例可能较旧,或者需要更新到现代的Spring Boot与OSGi结合的方式。 至于压缩包内的"整合代码原版",这可能是一个完整的...

    SpringDM笔记7-开发SpringDM Bundle

    Spring配置文件可以使用标准的Spring XML格式,但需添加一些特定于OSGi的元素,如`&lt;osgi:reference&gt;`用于声明对其他服务的依赖,以及`&lt;osgi:service&gt;`用于发布自己的服务。SpringDM会自动处理服务的注册和解注册,...

    osgi&spring规范

    Spring DM(Dependency Management)项目(现在称为Spring OSGi)为在OSGi环境中使用Spring提供了便利。它允许Spring的应用程序组件以模块化方式部署,并且能利用OSGi的服务注册和发现机制。 Spring在OSGi中的主要...

    spring osgi相关资源

    Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的一种技术,它允许在OSGi容器中运行和管理Spring应用。OSGi是一种模块化系统,为Java应用程序提供了动态部署、版本控制和依赖管理的...

    osgi选型比较 实例Equinox、Apache Felix与Spring DM

    然而,Spring DM自2012年后已不再更新,推荐使用Spring Boot和Spring Framework的最新版本与OSGi结合。 在创建OSGi工程时,一般步骤包括: 1. **创建Plug-in工程**:在Eclipse等IDE中,选择"OSGI Bundle"作为工程...

Global site tag (gtag.js) - Google Analytics