最困难的时期已经过去,配置好环境之后下一步就是写一个测试程序跑一下。由于我主要是为了整合Hibernate,所以测试程序就以此为前提了。
Hibernate整合本身比较简单,但如果想把框架设计得更加灵活、耦合性更低,支持以插件方式添加新的数据库表映射以及数据库操作将会比较麻烦,会涉 及到SessionFactory的生成,这些问题后续文章会陆续谈到。我们这里采用的例子是一个典型的基于角色的权限校验系统,简化后我们不再关心持久 层,只来讨论与Spring结合是如何配置的问题。
首先建一个用来注册实体类的接口,可以动态监控数据库实体类的注册与销毁。接口相当简单,代码如下:
java 代码
1.package wanged.core.persistent.entity;
2.
3.@SuppressWarnings("unchecked")
4.public interface EntityRegister {
5. Class[] register(); // 返回需要注册的实体类的数组
6.}
这个接口单独作为一个Bundle(命名为wanged_core_persistent_entity_register),MANIFEST.MF中只需要导出该接口所在的包供其他Bundle引用即可。
现在需要实现接口了,这个接口会被用来声明一类服务,这样就可以利用OSGi的服务来达到动态添加数据库表映射的目的。
建一个包含实体类的Bundle(命名为wanged_security_entity),其实就是一个插件工程,为简单起见就叫Bundle,下同。新建一个类实现EntityRegister接口,代码如下:
java 代码
1.package wanged.security.entity;
2.
3.import java.util.ArrayList;
4.import wanged.core.persistent.entity.EntityRegister;
5.
6.@SuppressWarnings("unchecked")
7.public class SecurityEntityRegisterImpl implements EntityRegister{
8.
9. public Class[] register() {
10. ArrayList cList = new ArrayList();
11.
12. cList.add(Role.class); // 用户角色实体类Role
13. cList.add(User.class); // 用户信息实体类User
14.
15. return cList.toArray(new Class[cList.size()]);
16. }
17.}
MANIFEST.MF 中需要引入EntityRegister接口所在的包,否则会找不到该接口。另外还需要导出Role和User所在的包,以便其他Bundle调用。现在 类建好了,需要声明我们的服务了。Spring和OSGi结合可以省去DS的配置文件,这也是上一篇文章在导入所需Bundle时没有引入DS相关的 Bundle的原因。Spring可以在META-INF/spring目录下查找所有的xml文件,并自动解析生成其中定义的Bean。下面我们建一个 bean.xml的文件来声明服务,内容如下:
xml 代码
1.<osgi:service interface="wanged.core.persistent.entity.EntityRegister">
2. <bean class="wanged.security.entity.SecurityEntityRegister">
3.</osgi:service>
在这个xml文件中,我们声明了一个服务,用来注册权限管理中使用的实体类User和Role。
现在是万事俱备只欠东风,服务已经声明,唯独缺少使用该服务的Bundle。建一个Bundle(命名为wanged_core_persistent),新建一个测试类TestEntityRegister,代码如下:
java 代码
1.package test.core.persistent;
2.
3.import wanged.core.persistent.entity.EntityRegister;
4.
5.public class TestEntityRegister{
6.
7. // 由于要注册多个这样的服务,所以参数为数组格式
8. @SuppressWarnings("unchecked")
9. public void setEntityRegister(EntityRegister[] erArr) {
10. for(EntityRegister er: erArr) {
11. System.out.println("EntityRegister class : " + er.getName());
12. for(Class c : er.register()) {
13. System.out.println(c.getName());
14. }
15. }
16. }
17.}
在MANIFEST.MF中引入包wanged.core.persistent.entity。在META-INF中添加spring/bean.xml,并定义该测试类:
xml 代码
1.<osgi:reference id="entityRegister"
2. interface="wanged.core.persistent.entity.EntityRegister" cardinality="1..n" />
3.
4.<bean id="testEntityRegister" class="test.core.persistent.TestEntityRegister">
5. <property name="entityRegister" ref="entityRegister" />
6.</bean>
注意上面的cardinality设置正是和setEntityRegister()方法的数组参数对应。
分享到:
相关推荐
osig与spring:springDM开发环境配置,eclipse配置osgi开发环境,及命令
NULL 博文链接:https://malixxx.iteye.com/blog/560674
Spring是一个全功能的Java/JEE应用框架。它提供了一个轻量级的容易和一个用于...使用Spring框架初始化,配置,整合并使用模块中和跨模块的组件 对于使用OSGI平台特性的企业级开发者来说这些都是简单和熟悉的编程模型
全部代码与配置 1. run virgo 2. html5 演示 3. freemarker运用
osgi数据库连接一章demo,c3p0配置oracle连接池和ibatis在osgi框架中的使用
Spring 2.5 jar 所有开发包及完整文档及项目开发实例 spring jar 包详解spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock....这使得在OSGi环境中使用Spring 更加方便,不再需要定制打包了。
主要描述了使用OSGI开发环境,在配置上spring时的一些规范
osgi多个bundle之间读取同一配置文件,需要单独添加一个用来读取配置文件的bundle
运行嵌入式Apache Felix OSGI容器的示例Spring Boot Web应用程序 这个想法是能够: 加载运行嵌入式Felix Framework的基本Spring Boot App。 使用标准的注解(例如Spring Web控制器和ServletFilter等),使用普通...
Spring DM 1.1.x最大特性便是它可以支持在其中部署WEB应用我使用后感觉这是个很酷特性我甚 至觉得用这种方式开发基于OSGi WEB...使用Spring DM进行WEB应用开发人来说成功地配置却不是件容易事,文档详细讲解了相关配置
1、微内核2、配置简单3、模块化4、开箱即用5、完全兼容Spring6、设计理念极其先进,很多思想来自OSGi,但是在现有技术的实现 缺点: 二次改造定制难缺少成熟的SOA或者RPC框架Dubbox: 1、完全兼容...
1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 解决构造程序歧义 17 ...
1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 解决构造程序歧义 17 ...
令人遗憾的是,OSGi、Spring、Java EE、SE以及其他在Java中运行的框架和解决方案都提供了自己的配置API和格式。其中有很多会使用专有的XML格式,另外一些则可能使用更为现代化的格式,比如Yaml。Java EE甚至不支持...
如何使用Spring来配置Jetty 如何使用XBean来配置Jetty 客户端 Asynchronous HTTP Client教程 日志 / 监控 如何配置Request Logs 如何配置自定义错误页面(Custom Error Pages) 配置Jetty Statistics(统计) 配置...
org.springframework.web-x.x.x.RELEASE.jar:在web.xml中配置启动Spring容器所需,包括上下文和监听器。 Struts2相关的jar包: Struts2的核心库,如struts2-core-x.x.x.jar。 以及其他与Struts2相关的库,例如用于...
dbcp、c3p0、jdbc常用连接xml配置 留此备用 com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar spring-jdbc-3.0.5.RELEASE.jar com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar 详细链接 ...