سؤال

ولقد بدأت للتو المهاجرة بلدي إطار استمرار محلية لنقابة الصحفيين.

وبالنظر إلى أن الأطر استمرار تخفي الكثير من والسباكة، وأنا مهتم في معرفة ما إذا كانت NOT إغلاق EntityManagers سيخلق تسرب الموارد، أو إذا كان الأطر وجمع وإغلاقها بالنسبة لي.

وأنوي في جميع الأماكن لإغلاقها، ولكن لا بد لي من؟

في الوقت الحالي باستخدام TopLink، فقط لأنه يعمل مع نتبيانس بسهولة، ولكن أنا سعيد للتحقيق مقدمي نقابة الصحفيين الآخرين.

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

المحلول

والامر يعتمد على كيفية حصلت عليه.

إذا قمت بإنشائه باستخدام EntityManagerFactory سيكون لديك لإغلاقه بغض النظر عن الإطار الذي تستخدمه.

إذا كنت الحصول عليها باستخدام حقن التبعية (على سبيل المثال باستخدام EJB والشرحPersistenceContext) يجب أن لا يغلق باليد (AFAIK ذلك سيكون سببا RuntimeException).

نصائح أخرى

ويجب عليك.

وأطر ليس لديهم فكرة عن كيفية كنت تنوي استخدام EM، بحيث لا يمكن إغلاقه (ما عدا، ربما، على وضع اللمسات الأخيرة، والتي لا سند). نعم، وليس إغلاقها من شأنه أن يخلق تسرب الموارد.

والفكرة هي نفس "java.sql.Connection دائما وثيقة" (على الرغم من بعض مصادر البيانات لديها إعدادات إغلاقها تلقائيا بواسطة الخمول) أو "دائما قريبة السبات الجلسة".

وعلاوة على ذلك، إذا كنت تخطط لكتابة التعليمات البرمجية المحمولة، يجب أن لا تعتمد على مزود JPA محدد "تكون ذكيا" - قد تفشل البعض لإغلاق EM في الوقت المناسب

ولقد حصلت EntityManager باستخدام @PersistenceContext الشرح في بلدي المخزون. أستطيع أن أرى أنه بعد connectionpools تصل maxPoolSize لها لا يحصل تنظيف.

ولكن إذا أنا خلق EntityManager باستخدام EntityManagerFactory ودعوة entitymanager.close() ثم يتم الحصول على اتصالات تنظيف. أنا أستخدم c3p0 كما مكتبة connectionpool.

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