论坛首页 入门技术论坛

遗留系统hibernate升级到spring+hibernate的问题

浏览 1856 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-04-21  
遗留系统用的是struts+hibernate,考虑到将来需要添加很多的横切功能,现在系统准备加上spring。
现在系统中是在hibernate.cfg.xml中配置的数据源,加上spring后,有一个问题有点迷惑,就是数据源的问题。
1.数据源必须在applicationContext.xml中配置吗,如果是的话,这两个数据源是什么关系?
2.是否可以将hibernate.cfg.xml中配置的数据源改为在applicationContext.xml配置?如果可以的话,原来持久层获取session的方式应该做哪些调整?
3.是否可以在程序中通过某种方式获取hibernate.cfg.xml中配置的数据源?

以上是我想到的几种可能,哪种方法比较合理,请各位指点迷津,谢谢!
   发表时间:2008-04-21  
我理解你的系统变更是这样的,想在系统中添加spring来作为ioc bean管理容器,所以原来的hibernate访问机制也从此改变,改由spring获得,建议你看看struts+spring+hibernate相关的集成文章。

如果引入spring,如何获取数据源,session的提供当然也由spring来提供,因为spring就是作为SSH三者中的粘合剂,在spring当中对hibernate的集成大致如下:
1.一个数据源bean(data source bean),比如你用apache的common dbcp作为数据库连接池,那么就有一个bean的application context的xml声明,不一定要在applicationContext.xml中,你可以叫其他名字比如xx-datasource.xml,只要能让spring加载这个文件就行
2. spring有对hibernate支持的session bean factory封装,在application context的xml配置中声明这个session bean factory,将1中配置的data source bean注入这个factory的dataSource属性中;如果你需要使用spring的jdbctemplate,也需要声明一个template bean,将data source bean也注入到template bean的dataSource属性中
3. 然后在你的应用中使用factory或者template吧,就像你在struts+hibernate一样,比如通过一个什么util来获得factory或session,如果你遗留系统中使用了dao模式,那么从spring的HibernateDaoSupport继承,重写你的基类dao,当然你这个基类dao也需要注入2中的factory
0 请登录后投票
   发表时间:2008-04-21  
我只要将遗留系统中的hibernate.cfg.xml注入到applicationContext中,是否这样就可以了?遗留系统获取session的程序是否需要改变?遗留系统采用jndi的方式来获取连接工厂的
0 请登录后投票
   发表时间:2008-04-21  
hibernate.cfg.xml仍然保留,因为这是hibernate引擎自己管理的,这个文件不包含数据源配置部分,但是其他如类映射这些仍在这个文件配置,数据源部分交给spring管理也就是配置;遗留系统取session部分要看你原来怎么取了,很可能要改
0 请登录后投票
   发表时间:2008-04-21  
可以写个类,用jndi的方式取得spring配置文件中的数据源吗?
0 请登录后投票
   发表时间:2008-04-21  
如果你的数据源是jndi获得的话,不用另外写类,直接在spring中配置就可以,类如:

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName"><value>you datasource jndi</value></property>
    </bean>

这就是你的数据源,然后注入session factory bean
0 请登录后投票
   发表时间:2008-04-21  
明白你说的这种方式.
加入spring后,要求是:遗留系统获取数据源的方式可以做适量的改变,但不能引起代码大量的修改.
想了个办法:数据源的配置就按seemoon说的来,然后我写个类,来获取spring生成的连接工厂,这样遗留系统中的关于数据源的部分就不用做太大的改动,这样可行吗?
0 请登录后投票
   发表时间:2008-04-21  
可以,不过最好使用spring的注入方式
0 请登录后投票
   发表时间:2008-04-22  
把原来的问题再整理下:

遗留系统采用了struts+hibernate,现在想添加spring,由它来做一些横切的功能和总体的控制。
遗留系统的数据源和事务处理是建立在hibernate的基础上,新功能的事务处理当然由spring来管理。
现在的问题是:
原来的数据源的获取和事务的管理可以做改动,但不能对代码做大量的修改。
有没有什么办法,可以实现:
1.遗留系统最小的改动;
2.新功能架设在spring之上;
3.新功能和遗留系统在数据源的获取和事务的管理上,各行其道,互相隔离。

看到有人在hibernate.cfg.xml中和applicationContext.xml中都配置了数据源,不知道两者是什么关系,
感觉这样不太对劲啊?

如果spring管理一个数据源,hibernate管理一个,会不会互相干扰?
如果两者户不相干,那倒是个不错的解决办法
0 请登录后投票
   发表时间:2008-04-23  
现在采用了数据源和映射文件都配置在hibernate.cfg.xml中,然后在spring中加载的方式.却出现一个问题,service无法注入到action中,怎样查找这个问题出在了什么地方?谢谢
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics