سؤال

بعد الترقية من الربيع 3.0.0.M4 إلى 3.0.0.RC1 و الربيع الأمن 3.0.0.M2 3.0.0.RC1, لقد كان استخدام الأمن:المصادقة-مدير الوسم بدلا من تحديد _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>

عندما أقوم وحدة الاختبارات في وقت واحد, هذا يعمل كبيرة و معظم طلبات اياكس أنه يعمل بشكل جيد أيضا ، ولكن على ما يبدو بشكل عشوائي ، أحصل غريب أخطاء في المعاملات أين قاعدة بيانات الدورة ويبدو أن تغلق في منتصف الطريق في العمل.الطريقة التى يمكن أن تثير هذه الأخطاء هو مجرد إرسال الكثير من طلبات اياكس إلى وحدات تحكم مختلفة من نفس العميل ، ثم واحد منهم على الأقل سوف تفشل بشكل عشوائي.في المرة القادمة سأحاول أن أحد عمل آخر سوف تفشل.

الخطأ يحدث في معظم الأحيان في userDAO ، ولكن أيضا في كثير من الأحيان في الأخرى DAOS ، الاستثناءات تشمل على الأقل ما يلي:

  • "جافا.sql.SQLException:العملية غير مسموح بعد ResultSet مغلقة"
  • "org.السبات.impl.AbstractSessionImpl:errorIfClosed():جلسة مغلقة!"
  • "جافا.لانغ.NullPointerException في com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2439)"
  • "جافا.util.ConcurrentModificationException في جافا.util.LinkedHashMap$LinkedHashIterator.nextEntry(غير معروف المصدر)"
  • "org.السبات.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>

وقد عرفت الأمن:المصادقة-مدير غير صحيح بحيث أنه سيتم تبادل المعاملات طلبات متعددة من نفس العميل ؟ يجب تحديد ذلك بشكل مختلف ، أو يجب أن تحدد بعض الأمنية الأخرى:الفاصوليا ؟

هل هناك شيء كنت قد يساء فهمها أن يجعل قاعدة البيانات الخاصة بي جلسات قريبة ؟ في رأسي كل طلب لديها اتصال قاعدة البيانات والمعاملات.كل حاصل على واضعي متزامنة الطرق, لذلك أنا حقا لا ينبغي أن يكون أي مشكلات التوافق.كل ما تبقى من وحدات التحكم التي واجهة المستخدم يجعل طلبات ضد يتم الحصول على طلبات القيام للقراءة فقط العمل.على حد علمي لا احد إدراج/تحديث/حذف / يتم من خلال أي من هذه الطلبات ، لقد فحص سجلات قاعدة البيانات للتحقق من ذلك.

وإنني أتطلع إلى سماع اقتراحاتكم في كيفية تجنب هذه السباق الشروط.

هتافات

نيك

PS ، لقد تحديث يكون السؤال أكثر تحديدا أن المشكلة مع الأمن:المصادقة-مدير (أو هكذا يبدو لي, إذا كان لديك النصائح التي يمكن أن يكون شيء آخر من شأنه أن يكون كبيرا) انا مجبر على استخدامها بدلا من بلدي _authenticationManager بدءا من 3.0.0.RC1

PPS, هنا هو الخيط الذي جعلني أفهم لم يعد باستطاعتي تحديد _authenticationManager: SpringSource منتدى آخر

هل كانت مفيدة؟

المحلول

يبدو أن لدي مشكلة كبيرة في قاعدة البيانات التعامل جلسة في DAO, حتى لقد جعلت أكتب مشكلتي و نشر الحل في موضوع آخر هنا في ستاكوفيرفلوو وطلب رأي الناس على الحل.أتمنى أن لا تعطي أكثر القضايا :-)

هتافات

نيك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top