浏览 1856 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-21
现在系统中是在hibernate.cfg.xml中配置的数据源,加上spring后,有一个问题有点迷惑,就是数据源的问题。 1.数据源必须在applicationContext.xml中配置吗,如果是的话,这两个数据源是什么关系? 2.是否可以将hibernate.cfg.xml中配置的数据源改为在applicationContext.xml配置?如果可以的话,原来持久层获取session的方式应该做哪些调整? 3.是否可以在程序中通过某种方式获取hibernate.cfg.xml中配置的数据源? 以上是我想到的几种可能,哪种方法比较合理,请各位指点迷津,谢谢! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2008-04-21
我只要将遗留系统中的hibernate.cfg.xml注入到applicationContext中,是否这样就可以了?遗留系统获取session的程序是否需要改变?遗留系统采用jndi的方式来获取连接工厂的
|
|
返回顶楼 | |
发表时间:2008-04-21
hibernate.cfg.xml仍然保留,因为这是hibernate引擎自己管理的,这个文件不包含数据源配置部分,但是其他如类映射这些仍在这个文件配置,数据源部分交给spring管理也就是配置;遗留系统取session部分要看你原来怎么取了,很可能要改
|
|
返回顶楼 | |
发表时间:2008-04-21
可以写个类,用jndi的方式取得spring配置文件中的数据源吗?
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2008-04-21
明白你说的这种方式.
加入spring后,要求是:遗留系统获取数据源的方式可以做适量的改变,但不能引起代码大量的修改. 想了个办法:数据源的配置就按seemoon说的来,然后我写个类,来获取spring生成的连接工厂,这样遗留系统中的关于数据源的部分就不用做太大的改动,这样可行吗? |
|
返回顶楼 | |
发表时间:2008-04-21
可以,不过最好使用spring的注入方式
|
|
返回顶楼 | |
发表时间:2008-04-22
把原来的问题再整理下:
遗留系统采用了struts+hibernate,现在想添加spring,由它来做一些横切的功能和总体的控制。 遗留系统的数据源和事务处理是建立在hibernate的基础上,新功能的事务处理当然由spring来管理。 现在的问题是: 原来的数据源的获取和事务的管理可以做改动,但不能对代码做大量的修改。 有没有什么办法,可以实现: 1.遗留系统最小的改动; 2.新功能架设在spring之上; 3.新功能和遗留系统在数据源的获取和事务的管理上,各行其道,互相隔离。 看到有人在hibernate.cfg.xml中和applicationContext.xml中都配置了数据源,不知道两者是什么关系, 感觉这样不太对劲啊? 如果spring管理一个数据源,hibernate管理一个,会不会互相干扰? 如果两者户不相干,那倒是个不错的解决办法 |
|
返回顶楼 | |
发表时间:2008-04-23
现在采用了数据源和映射文件都配置在hibernate.cfg.xml中,然后在spring中加载的方式.却出现一个问题,service无法注入到action中,怎样查找这个问题出在了什么地方?谢谢
|
|
返回顶楼 | |