项目中在web.xml中配置OpenSessionInViewFilter。而applicationContext的加载方式我使用的是struts的plugin方式配置ServiceLocator,通过ServiceLocator.getInstance().getBean()方式取得bean.这里就有问题了,OpenSessionInViewFilter是setAttribute()一个context,而我并没有使用spring的Action的支持获取Context,而是通过ServiceLocator中的factory = new ClassPathXmlApplicationContext(fn);方式加载context,这时OpenSessionInViewFilter会管理session吗?也就是说OpenSessionInViewFilter会生效吗?我的lazy暂时是fasle。
我的疑惑在,如果我调用getSession(),spring是否真的不会管理session,是否需要手动关闭。若真需要手动关闭,那问题就有了,我显示的使用this.closeSessionIfNecessary(session);关才SESSION,为什么提示session is closed,是spring container在管理session吗?
具体spring事务配置如下:
${hibernate.connection.driver_class}
${hibernate.connection.url}
${hibernate.connection.username}
${hibernate.connection.password}
net.sf.hibernate.dialect.Oracle9Dialect
classpath:hibernate.duty.xml
class="com.boco.eoms.subsystem.duty.dao.impl.DyDutyConfigRuleDaoImpl">
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
有时还会出现这个问题,在一个人登陆后,退出重新登陆时,就会出现如下错误。
00:42:22,302 ERROR JDBCExceptionReporter:38 - Cannot open connection
java.sql.SQLException: ORA-01017: invalid username/password; logon denied
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.O3log.receive1st(O3log.java:407)
at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:259)
at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:346)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:468)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:291)
多谢。祝好~~~~~