gpt4 book ai didi

java - Spring DAO 3.0.0.RC1 中的并发问题

转载 作者:行者123 更新时间:2023-12-01 05:59:15 25 4
gpt4 key购买 nike

从 Spring 3.0.0.M4 升级到 3.0.0.RC1 以及 Spring Security 3.0.0.M2 升级到 3.0.0.RC1 后,我必须使用 security:authentication-manager 标签而不是定义_authenticationManager 就像我在 M4/M2 中使用的那样。我已尽力定义它,并最终得到以下结果:

<security:authentication-manager alias="authenticationManager">
<security:authentication-provider user-service-ref="userService">
<security:password-encoder hash="plaintext"/>
</security:authentication-provider>
</security:authentication-manager>

当我一次进行一个单元测试时,这效果很好,对于大多数 AJAX 请求,它也工作得很好,但看似随机,我在事务中遇到奇怪的错误,其中我的数据库 session 似乎在中途关闭工作。我引发这些错误的方法就是从同一客户端向不同的 Controller 发送许多不同的 AJAX 请求,然后至少其中一个会随机失败。下次我尝试时,一个会起作用,另一个会失败。

该错误在我的 userDAO 中最常发生,但在其他 DAOS 中也很常见,异常(exception)情况至少包括以下内容:

  • “java.sql.SQLException:结果集关闭后不允许操作”
  • “org.hibernate.impl.AbstractSessionImpl:errorIfClosed(): session 已关闭!”
  • “com.mysql.jdbc.PreparedStatement.fillSendPacket (PreparedStatement.java:2439) 处出现 java.lang.NullPointerException”
  • “java.util.LinkedHashMap$LinkedHashIterator.nextEntry(来源未知)处的 java.util.ConcurrentModificationException”
  • “org.hibernate.LazyInitializationException:非法访问加载集合”
  • 等等...

之前,我曾经定义过一个 _authenticationManager bean,并且相同的请求非常有效。但对于 RC1,我不再被允许定义它。它曾经看起来像这样:

<bean id="_authenticationManager" class="org.springframework.security.authentication.ProviderManager">
<property name="providers">
<list>
<bean class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userService"/>
<property name="passwordEncoder">
<bean class="org.springframework.security.authentication.encoding.PlaintextPasswordEncoder" />
</property>
</bean>
</list>
</property>
</bean>

我是否错误地定义了 security:authentication-manager,以便它将共享来自同一客户端的多个请求的事务?我应该以不同的方式定义它,还是应该定义其他一些安全性:bean?

我是否误解了什么导致我的数据库 session 关闭?在我看来,每个请求都有自己的数据库连接和事务。所有 getter 和 setter 都是同步方法,所以我真的不应该有任何并发​​问题。 UI 发出请求的所有 REST Controller 都是 GET 请求,并且执行只读工作。据我所知,在任何这些请求期间都没有执行任何插入/更新/删除操作,并且我检查了数据库日志来验证这一点。

我期待听到您关于如何避免这些竞争条件的建议。

干杯

尼克

PS,我已经更新了问题,更具体地说,问题出在 security:authentication-manager 上(或者在我看来,如果您有提示,这可能是其他问题,那就太好了)我被迫使用它来代替我自己的 _authenticationManager 从 3.0.0.RC1 开始

PPS,这是让我明白我无法再定义 _authenticationManager 的线程:SpringSource Forum Post

最佳答案

看来我在 DAO 中的数据库 session 处理方面遇到了很大的问题,所以我做了一个 write-up of my problem and posted the solution in another thread here at StackOverflow并征求人们对解决方案的意见。我希望它不会带来更多问题:-)

干杯

尼克

关于java - Spring DAO 3.0.0.RC1 中的并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com