Я пытаюсь настроить кластер Tomcat 7 с репликацией сеанса.Репликация сеанса с причиной Spring NotSerializableException
Я использовал this tutorial и все отлично работает на тестовых сервлетах, которые находятся в примерах tomcat. http://localhost/examples/servlets/servlet/SessionExample
.
Поэтому я добавил некоторые атрибуты, а затем остановил один из узлов, и сеанс был реплицирован успешно.
Но когда я перехожу эту конфигурацию моего приложения с спящим + Spring MVC + пружинной безопасностью, и когда я попытался войти в Я всегда получаю исключение,
SEVERE: Unable to serialize delta request for sessionid [69845CF0E87B3F0F64FB605FAC1D4987.node1]
java.io.NotSerializableException: org.apache.commons.dbcp.BasicDataSource
Всех мои объекты сессий Реализовать Serializable интерфейса , в web.xml Я добавил Я пробовал сделать EntityManager поле временное, но это не помогает. Я думаю, что это может быть то, что весна пытается сэкономить некоторые бобовые на сеанс, но я искал проект и не нашел никаких бонусов с сессией.
Есть ли у кого-нибудь идеи, как справиться с этой проблемой?
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>
Конечно, я редактировал свой пост. Извините из-за политики компании, я не могу поделиться всем кодом. Если это еще не все - скажите мне, и я дам дополнительный код. – Roston
спасибо! Ну, теперь, когда очевидная причина в том, что ... Возможно, вы каким-то образом сохраните 'entityManager' в другом месте вашего кода (например, вы создаете второй объект и передаете и сохраняете' entityManager' в своем конструкторе), или каким-то другим образом вы сохраняете ссылку на конкретный экземпляр 'entityManager'? – ljgw
Спасибо, я нашел несколько мест, где EntityManager не был преходящим, и я сделал его преходящим. Проблема все еще появляется. Я попытаюсь найти DAO, которые не реализуют Serializable. – Roston