2009-10-23 1 views
1

После обновления с 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. Я сделал все возможное, при определении его, и в конечном итоге с этим:Проблемы с параллелизмом в Spring DAO с 3.0.0.RC1

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

Когда я делаю блок тестирует один в то время, это прекрасно работает, и для большинства AJAX запросов работает хорошо, как хорошо, но по-видимому, случайным образом, я получаю странные ошибки в своих транзакциях, когда мой сеанс базы данных, кажется, закрывается на полпути в работе. То, как я могу спровоцировать эти ошибки, просто отправляет множество разных запросов AJAX на мои разные контроллеры с одного и того же клиента, тогда по крайней мере один из них будет случайным. В следующий раз, когда я попробую, он будет работать, а другой потерпит неудачу.

ошибка чаще всего происходит в моей userDAO, но и довольно часто в других DAOS, и исключения включают по крайней мере, следующее:

  • «java.sql.SQLException: Операция не допускается после ResultSet закрыто»
  • "org.hibernate.impl.AbstractSessionImpl: errorIfClosed(): сессия закрыта!"
  • "java.lang.NullPointerException на com.mysql.jdbc.PreparedStatement.fillSendPacket (PreparedStatement.java:2439)"
  • «java.util.ConcurrentModificationException в java.util.LinkedHashMap $ LinkedHashIterator.nextEntry (Unknown Source) "
  • „org.hibernate.LazyInitializationException: незаконный доступ к коллекции загрузки“
  • и т.д ...

Раньше я определить _authenticationManager боб, и те же запросы работал как шарм. Но с 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> 

ли я определил свою безопасность: Аутентификация менеджер неправильно, так что он будет разделять транзакции для нескольких запросов от одного клиента? Должен ли я определить его по-другому или я должен определить другую безопасность: beans?

Есть ли что-то, что я неправильно понял, что закрывает сеансы моей базы данных? В моей голове каждый запрос имеет свое собственное соединение с базой данных и транзакцию. Все геттеры и сеттеры являются синхронизированными методами, поэтому у меня действительно не должно быть проблем с параллелизмом. Все контроллеры REST, с которыми пользовательский интерфейс обрабатывает запросы, являются GET-запросами и работают только для чтения. Насколько мне известно, ни один INSERT/UPDATE/DELETE не выполняется во время любого из этих запросов, и я проверил журналы базы данных, чтобы проверить это.

Я с нетерпением жду ваших предложений о том, как избежать этих условий гонки.

Приветствия

Nik

PS, мой я обновил вопрос более конкретно, что проблема с безопасностью: аутентификации-менеджер (или так мне кажется, если у вас есть советы что это может быть что-то еще, что было бы здорово), что я вынужден использовать вместо своего собственного _authenticationManager, начиная с 3.0.0.RC1

PPS, вот нить, что заставило меня понять, я уже не мог определить _authenticationManager: SpringSource Forum Post

+0

Вы пытались модернизировать только один из Spring и Spring Security, а не как в то же время? Таким образом, вы, по крайней мере, знаете, какой из них вызывает проблему. – skaffman

+0

Доброе утро, Скаффман, и спасибо, что вернулись ко мне. :-) С RC1 мне пришлось переходить от того, что bean_authenticationManager для использования функции security: authentication-manager. Если я вернусь и снова использую _authenticationManager, все будет в порядке. Если я вернусь к M4, но использую security: authentication-manager, я получаю те же ошибки, что и с RC1. Поэтому, возможно, я должен был сформулировать свой вопрос: используя security: authentication-manager, как требуется в RC1, почему я получаю то, что похоже на проблемы параллелизма, как указано выше? Cheers -Nik – niklassaers

+0

Так вы говорите, что у вас такая же проблема с Spring Security 3.0.0.RC1 и Spring 3.0.0.M4? Если это так, то проблема, похоже, будет прочно связана с Spring Security 3.0.0.RC1, а не с ядром Spring. – skaffman

ответ

Смежные вопросы