我正在尝试使用会话复制配置tomcat 7群集。
我使用this tutorial,一切都可以在测试servlet上运行,这些servlet位于tomcat示例中。
http://localhost/examples/servlets/servlet/SessionExample
。
所以我添加了一些属性,然后停止了其中一个节点,并且会话已成功复制。
但是当我使用hibernate + spring mvc + spring security将此配置移动到我的应用程序时,当我尝试登录时,我总是得到异常
SEVERE: Unable to serialize delta request for sessionid [69845CF0E87B3F0F64FB605FAC1D4987.node1]
java.io.NotSerializableException: org.apache.commons.dbcp.BasicDataSource
我的所有会话对象都实现了 Serializable 接口,在web.xml中我添加了 我试过make EntityManager 字段瞬态,但它没有帮助。我认为可能是春天试图将一些bean保存到会话中,但我搜索了项目并没有找到任何会话范围的bean。
有人有想法如何处理这个问题吗?
UPD:
public abstract class AbstractDAOImpl<E, I> implements AbstractDAO<E, I> {
private static final long serialVersionUID = 7372882616977337461L;
@PersistenceContext
protected transient EntityManager entityManager;
的applicationContext.xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
p:driverClassName="${jdbc-driver}" p:url="${jdbc-db-url}" p:username="${jdbc-db-username}"
p:password="${jdbc-db-passwd}" p:testWhileIdle="true"
p:timeBetweenEvictionRunsMillis="7200000" p:validationQuery="select 1;"
destroy-method="close" />
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="MIQlocal" />
<property name="dataSource" ref="dataSource" />
<property name="jpaDialect" ref="jpaDialect" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
</bean>
<bean id="transactionManager" name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
答案 0 :(得分:0)
您的数据源不是 Serializable 。
将您的类字段设为org.apache.commons.dbcp.BasicDataSource
transient
的实例,并确保它由Spring注入,您已完成。
编辑:刚才我看到你已经使EntityManager成为瞬态,所以我必须要求你尽可能提供相关的代码。