浏览 2698 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2006-01-11
软件环境:
struts + spring + hiberante 结构为action --> bo --> Service -->Dao 配置文件: <?xml version="1.0" encoding="GBK"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- 数据源--> <bean id="jndidataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <!-- "jdbc/example"为tomcat的JNDI数据源名--> <value>java:comp/env/jdbc/oa</value> </property> </bean> <!-- bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> <value>net.sourceforge.jtds.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=cwoa</value> <value>jdbc:jtds:sqlserver://127.0.0.1:1433/model</value> </property> <property name="username"> <value>sa</value> </property> <property name="password"> <value>sa</value> </property> </bean--> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <!-- 数据源名 --> <ref local="jndidataSource" /> </property> <property name="mappingResources"> <list> <!-- value>com/ippbx/voip/pojo/hibernate/xml/Tlog.hbm.xml</value> <value>com/ippbx/voip/pojo/hibernate/xml/Customer.hbm.xml</value> <value>com/ippbx/voip/pojo/hibernate/xml/Agent.hbm.xml</value--> <value>com/cuangwu/base/util/pojo/TShunxu.hbm.xml</value> <value>com/cuangwu/oa/pojo/xml/SysYongHu.hbm.xml</value> <value>com/cuangwu/oa/pojo/xml/SysYhyzguanLian.hbm.xml</value> <value>com/cuangwu/oa/pojo/xml/SysYongHuZu.hbm.xml</value> <value>com/cuangwu/oa/pojo/xml/SysWenJianGl.hbm.xml</value> <value>com/cuangwu/oa/pojo/xml/Syslog.hbm.xml</value> <value>com/cuangwu/oa/pojo/xml/SysMBLiuChen.hbm.xml</value> <value>com/cuangwu/oa/pojo/xml/SysMbhuanJie.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <!-- Spring的数据访问异常转换器(Data Access Exception Translator)定义 --> <bean id="jdbcExceptionTranslator" class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator"> <property name="dataSource"> <ref bean="jndidataSource" /> </property> </bean> <!-- Hibernate Template定义 --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> <property name="jdbcExceptionTranslator"> <ref bean="jdbcExceptionTranslator" /> </property> </bean> <!--事务基类: transactionProxy --> <bean id="transactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="proxyTargetClass"> <value>true</value> </property> <property name="transactionAttributes"> <props> <prop key="create*">PROPAGATION_REQUIRED</prop> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> <!--缺失了此属性会报错--> <prop key="del*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <!-- 业务表游水号 --> <bean id="shunxuDao" class="com.cuangwu.base.util.shunxu.implement.ShuXuDaoImp"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="shunxuTarget" class="com.cuangwu.base.util.shunxu.implement.ShunxuSvrImpl"> <property name="IDao"> <ref local="shunxuDao" /> </property> </bean> <bean id="shunxuManager" parent="transactionProxy"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="shunxuTarget" /> </property> </bean> <!-- 业务相关设置 --> <!-- hibernate实现, Dao必须继承HibernateDaoSupport --> <!-- 日志 --> <bean id="logDao" class="com.cuangwu.oa.log.implement.LogDaoimpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="logTarget" class="com.cuangwu.oa.log.implement.LogSvrimpl"> <property name="IDao"> <ref local="logDao" /> </property> </bean> <bean id="logManager" parent="transactionProxy"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="logTarget" /> </property> </bean> <!-- 用户 --> <bean id="yonghuDao" class="com.cuangwu.oa.yonghu.implement.YonghuDaoimpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="yonghuTarget" class="com.cuangwu.oa.yonghu.implement.YonghuSvrimpl"> <property name="IDao"> <ref local="yonghuDao" /> </property> </bean> <bean id="yonghuManager" parent="transactionProxy"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="yonghuTarget" /> </property> </bean> <!-- 用户组 --> <bean id="yonghuzuDao" class="com.cuangwu.oa.yonghu.implement.YonghuzuDaoimpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="yonghuzuTarget" class="com.cuangwu.oa.yonghu.implement.YonghuzuSvrimpl"> <property name="IDao"> <ref local="yonghuzuDao" /> </property> </bean> <bean id="yonghuzuManager" parent="transactionProxy"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="yonghuzuTarget" /> </property> </bean> <!-- 文件管理 wenjiangl --> <bean id="wenjianglDao" class="com.cuangwu.oa.wenjiangl.implement.WenjianglDaoimpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="wenjianglTarget" class="com.cuangwu.oa.wenjiangl.implement.WenjianglSvrimpl"> <property name="IDao"> <ref local="wenjianglDao" /> </property> </bean> <bean id="wenjianglManager" parent="transactionProxy"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="wenjianglTarget" /> </property> </bean> <!-- 流程模板 mbliuchen --> <bean id="mbliuchenDao" class="com.cuangwu.oa.liuchen.implement.MbLiuchenDaoimpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="mbliuchenTarget" class="com.cuangwu.oa.liuchen.implement.MbLiuchenSvrimpl"> <property name="IDao"> <ref local="mbliuchenDao" /> </property> </bean> <bean id="mbliuchenManager" parent="transactionProxy"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="mbliuchenTarget" /> </property> </bean> </beans> 错误提示信息: failed to lazily initialize a collection of role: com.cuangwu.oa.pojo.SysYongHu.sysYhyzguanLians - no session or session was closed 你的分析: 我现在是把hibernate的session放在Dao层. session通过Dao.openSession()方法获得 protected Session openSession() { return SessionFactoryUtils.getSession(getSessionFactory(), false); //return getSession(); } 其中,YongHu表与YongHuzu是多对一关系.lazily定义为true(不想用false) 当在Bo层调用Service.load(1)得到了YongHu对象.但接下来要通过YongHu获取YongHuzu就报错session was closed了. 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-01-12
这不很明显,session已经close掉了你再去取lazy的东东。你的session是在哪关的?事物处理是在bo还是sevice?
小弟不才,能问下为什么要分这么一层么 bo --> Service 谢谢 |
|
| 返回顶楼 | |
|
最后更新时间:2006-01-12
KayMO 写道 这不很明显,session已经close掉了你再去取lazy的东东。你的session是在哪关的?事物处理是在bo还是sevice?
在DAO的每个操作数据库的方法中,只用openSession()获取Session,没有关闭它操作的.
小弟不才,能问下为什么要分这么一层么 bo --> Service 谢谢 :D 小弟不才,能问下为什么要分这么一层么 bo --> Service bo是完全的业务类,只调用service. service只是事务处理功能. |
|
| 返回顶楼 | |
|
最后更新时间:2006-01-12
Session难道没关?这样很容易引起连接混乱。至少我就被折磨过。
为什么不直接把事务弄到你的bo里面呢?根据业务操作来操控session的关闭,我想应该能解决你的问题,好象还省了serivce层 |
|
| 返回顶楼 | |
|
最后更新时间:2006-01-12
KayMO 写道 Session难道没关?这样很容易引起连接混乱。至少我就被折磨过。
如果在serivce操作session,Dao的每个方法都要接收调用方传来的session吗?
为什么不直接把事务弄到你的bo里面呢?根据业务操作来操控session的关闭,我想应该能解决你的问题,好象还省了serivce层 :arrow: |
|
| 返回顶楼 | |
|
最后更新时间:2006-01-12
dao是dao,事务是事务,具体操作请搜索以前帖
|
|
| 返回顶楼 | |
|
最后更新时间:2006-02-03
我zm就觉得。。。 service 与 bo的位置 应该调换。。。。因为通常 讲的service中的事务不是 db tx 而是 bizlogic tx 而 db tx应该在 dao所在的 layer 覆盖掉
|
|
| 返回顶楼 | |






