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