سؤال

مرحبًا، أنا أقوم بتطوير تطبيق سطح مكتب باستخدام Spring وHibernate، ولدي مشكلة في البدء البطيء.لقد بحثت في الويب وكان كل حل مرتبطًا بالجلسة المفتوحة في نمط العرض، لكن لا يمكنني استخدام هذا النمط.لقد حاولت أيضًا الحصول على sessionfactory من HibernateTemplate, ، لكنه يعود لي بجلسة غير متصلة.

هل يعرف أحد حلا آخر؟

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

المحلول

أود أن أقترح أن يكون لديك حلان أساسيان:

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

  2. قم بإيقاف تشغيل جميع التهيئة البطيئة للكائنات المستمرة في وضع السبات.

قد يؤدي الخيار 2 إلى قدر كبير من الوصول غير الضروري إلى قاعدة البيانات، والخيار 1 يعني أنه يتعين عليك دراسة سير العمل وحالات الاستخدام بجدية.

امل ان يساعد!

نصائح أخرى

وخيار واحد هو الدعوة Hibernate.initialize () على كيانات أو مجموعات لإجبار تهيئة لهم. وكنت تريد أن تفعل هذا قبل إرجاع البيانات إلى وجهة نظركم. وأود أن تنظر هذا بعناية، حيث انها سوف تولد الكثير من البيانات SQL إلى قاعدة البيانات.

وأنت قد ترغب في النظر في استخدام "جلب" في الاستعلامات HQL أو تكوين الوضع إلى "حريصة" في تعيينات الجلب (أعتقد أنه من FetchMode.EAGER في النقابة أو كسول = "كاذبة" في hbm.xml).

وJose: لا إدارة الدورة في ThreadLocal الخاصة بك. استخدام SessionFactory.getCurrentSession () وتكوين السبات لاستخدام "موضوع" SessionContext.

لقد واجهت مشكلة مشابهة جدًا، ولم أتمكن من العثور على أي حل مناسب لها حقًا.لقد توصلت إلى طريقتي الخاصة التي تجمع بين الكثير من الأساليب المختلفة الموجودة على الويب ونشرتها على مدونتي.

آسف، لأنني لم أذكر كل ذلك هنا، ولكن يتطلب الأمر الكثير من العمل للقيام بذلك مرارًا وتكرارًا في جميع المنتديات التي وجدت أشخاصًا يواجهون هذه المشكلة أو مشكلة مماثلة

تحميل كسول عن بعد مع السبات والربيع

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