当前位置: 首页 > 知识库问答 >
问题:

使用Spring的会话复制导致NotSerializableException

陈渊
2023-03-14

所以我添加了一些属性,然后停止了其中一个节点,会话复制成功。

但是当我用hibernate+spring mvc+spring security将这个配置移到我的应用程序中时,当我尝试登录时,我总是得到异常

SEVERE: Unable to serialize delta request for sessionid [69845CF0E87B3F0F64FB605FAC1D4987.node1]
java.io.NotSerializableException: org.apache.commons.dbcp.BasicDataSource

我的所有会话对象都实现了可序列化接口,在web.xml中我已经添加了,我尝试过让EntityManager字段瞬态化,但没有帮助。我认为可能是spring试图将一些bean保存到session,但我搜索了project,没有找到任何session作用域bean。

public abstract class AbstractDAOImpl<E, I> implements AbstractDAO<E, I> {

    private static final long serialVersionUID = 7372882616977337461L;

    @PersistenceContext
    protected transient EntityManager entityManager;
<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>

共有1个答案

卫高明
2023-03-14

您的数据源不可序列化。

将您的类字段设置为org.apache.commons.dbcp.basicDataSourcetransient实例,并确保Spring注入了它,并且已经完成。

编辑:刚才我看到您已经使EntityManager瞬态化,所以我必须要求您在可能的情况下提供相关代码。

 类似资料:
  • 我在Spring Boot应用程序中遵循基于Hazelcast的会话复制文档。 谢谢Aravind

  • 我试图使用Spring Cloud的Zuul、Eureka和我自己的服务实现微服务架构。我有多个具有UI和服务的服务,每个服务都可以使用x509安全性对用户进行身份验证。现在我想把祖尔放在那些服务机构的前面。由于Zuul无法将客户端证书转发到后端,我认为下一个最好的方法是在Zuul的前门对用户进行身份验证,然后使用Spring会话在后端服务中复制他们的身份验证状态。我遵循了Dave Syer的教程

  • 我使用的是Spring 4.3.2.RELEASE和Hibernate 4.3.11.RELEASE。一旦我自动连线任何刀,我就会得到一个NullPointerException。在Dao实现中,我自动连接sessionFactory,然后使用sessionFactory.getCurrentSession()。错误消息本身是一个长嵌套异常,最终导致以下情况: 我的配置类与sessionFacto

  • 我正在尝试使用Hazelcast分布式缓存来复制带有Spring Boot&Spring Security的HTTP会话,但无法进行设置(不过,简单的缓存复制工作良好,我已经通过在一个应用程序节点的map中设置一些值并尝试在其他集群节点上获得它来验证了这一点)。 我已经通过网页上的东西,但不幸的是,我无法设置这一点。应用程序在集群中运行时,在一个节点上登录后,我没有在其他节点上获取会话对象(我正在

  • 当我介绍hazelcast时,第一次验证是成功的。之后,第一个请求也是成功的。但在那之后 org.springframework.security.web.context.httpsessionSecurityContextRepository找不到会话... 正如我所说,在配置com.hazelcast.web.webfilter进行sesion复制之后,就开始出现这种情况,如下所示: 2017

  • 我在Windows的JBoss EAP 6.1中成功地使用了会话复制。但后来我改为JBoss EAP 6.4在ubuntu中进行开发测试,同样的代码停止了工作。 没什么,我只是添加了<代码> 我将类的实例存储在超文本传输协议会话中,使用(环境变量)关闭服务器,然后再次启动服务器。服务器启动后,当我再次尝试访问会话时,我无法检索类实例,控制台中出现以下错误: 我不知道从哪里开始研究,因为我对JBos