首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

OSGI停的web应用开发(5)

2012-06-30 
OSGI下的web应用开发(5)这一节将对Dao Interface Bundle 和 Dao implementation Bundle进行开发。???上图是

OSGI下的web应用开发(5)

这一节将对Dao Interface Bundle 和 Dao implementation Bundle进行开发。

?

OSGI停的web应用开发(5)
??上图是Dao层的设计。为了尽可能的还原真实的设计架构,这里设计了一个BaseDao,用来定义最基本的Dao操作。然后有一个HibernateBaseDao的抽象类继承它并实现这些基本操作。然后定义了一个ContactDao,这个dao就是联系人相关业务的Dao接口,以及它的实现ContactDaoImpl。图中我们可以看到模块的划分情况,接口是一个bundle,实现是另一个bundle。
Dao Interface Bundle的开发(1)首先创建一个Bundle Project项目(创建的详细过程已经在前面的章节给出,请参考前面),定义项目名称为net.georgezeng.test.dao。
(2)定义上面图中的两个接口
BaseDao的定义:

?export:我们还需要把接口进行export才能让Dao Implementation Bundle进行引用,如图
OSGI停的web应用开发(5)
?注意:这里在引入的时候可能会有问题,因为bundle的引用默认是通过在Virgo server的repository目录中获取的,但是目前我们自己开发的bundle是不可能放在那个目录下面的,这个时候就没办法找到那个需要import的包了,所以我们需要做一点小操作,让IDE可以找到这个包。具体操作步骤如下:1)在Package Explorer中选中当前的项目,如图
OSGI停的web应用开发(5)
?我这里的项目名称是net.georgezeng.test.dao2, 然后右键点击弹出菜单,选择最下面的Properties选项,进入下图

OSGI停的web应用开发(5)
?选中Project References,然后在勾选上net.georgezeng.test.domain进行项目关联,这样就可以使import搜索到需要的package了。
2)这个应该是属于IDE工具本身的一个小bug,有的时候我们引入项目关联后虽然可以import需要的包了,但是还是提示找不到这个包,这个时候我们可以先将之前已经import的内容remove,再重新import一次就可以了。(后面讲到的项目间的引用都是通过这种方式实现)
这样我们的Dao Interface Bundle就开发完毕了,接下来我们来开发Dao Implementation Bundle
Dao Implementation Bundle新建Bundle Projecton工程,命名为net.georgezeng.test.dao.impl。(1)Dao的实现(1.1)HibernateBaseDao的定义

?

export:?这个bundle没有需要export的内容
(3)spring配置
(3.1)osgi-context.xml
??在前面的章节中Datasource Bundle已经曝露了dataSource的服务,这里我们需要引入,通过
我们就把服务引入了

(3.2)appContext.xml
?我们需要定义一个sessionFactory用于对Hibernate进行管理,请看其中对dataSource的引入
这里的bean 属性的值引用的是上面定义的osgi:reference标签中的id属性的值
接着我们还要定义一个transactionManager,用来对事务进行控制。这个transactionManager将会以服务的方式发布到OSGI中,让service层可以使用这个服务。在回头看osgi-context.xml中对服务的定义,
这里有一个很重要的属性需要设置,就是context-class-loader,需要设置为service-provider,目的是让service调用这个服务的时候使用的是服务提供者(即Dao Implementation Bundle)的classloader,这样就可以正确的调用hibernate的API,否则将会抛错提示hibernate的API不可见。其实我们也可以让transactionManager单独作为一个模块,但是意义不大,这里不做讨论。
我们还看到曝露了一个ContactDao的服务,这里ContactDao的id值正是与@Repository中的值相对应的,这样service层就可以使用DAO的服务了
至此dao层的开发就结束了
附上该项目的源码


非常易懂,期待继续。

另外能否先整体给应用特性个全面介绍,比如热部署、多版本、集群等特性。 非常易懂,期待继续。

另外能否先整体给应用特性个全面介绍,比如热部署、多版本、集群等特性。

后面将会有另外的篇幅来讲解如何使用virgo server,就会提到如何热部署了。
多版本我之前在OSGI的心得体会下有提到过的,也可以查看相关的资料。
至于集群目前我还没有研究,可以等有时间的时候再看看然后再搞个例子出来:)


150023448,可以加入这个群一起讨论

热点排行