Projemde, her işlem için varlık yöneticisini kapatmayı unuttum. Bir süre sonra, mysql sunucusuna aşırı bağlantılar nedeniyle istisna aldım. Bu, her bir varlık yöneticisinin bağlantıyı kurduğu anlamına mı geliyor? Bağlantıyı kapatmayı unuttuğumuzda ne olacak? Sadece tek bir varlık yöneticisi fabrikası kullandım.Bir varlık yöneticisi veritabanına bir bağlantı oluşturur mu?
cevap
Uygulama tarafından yönetilen bir varlık yöneticisi kullandığınızı varsayarsak, varlık yöneticisini başlatmak ve kapatmak sizin sorumluluğunuzdadır. Diğer taraftan, eğer varlık yöneticisini oturum çekirdeklerinize (veya yönetilen sınıflara) enjekte etmek için konteynere güveniyorsanız, kapsayıcı kuruluşun kapalı olmasını sağlamaktan sorumludur. Genelde, veritabanı yöneticisi, bağlantıya veritabanı oluşturmaktan sorumlu değildir. Bunun yerine, persistence.xml
'da tanımlanan bir bağlantı havuzu kullanır. Bu hem JTA varlık yöneticileri hem de kaynak-yerel varlık yöneticileri için geçerlidir; JTA varlık yöneticileri, uygulama sunucusu ortamı tarafından sağlanan bir JTA veri kaynağına güvenirken, kaynak yerel varlık yöneticileri kendi havuzlarını oluşturur ve yönetir.
Varlık yöneticilerini kapatmazsanız ve yeni örnekler oluşturmaya devam ederseniz, JTA veri kaynağındaki bağlantıları (JTA varlık yöneticileri için) tüketmeniz veya sunucu tanımlı bir sınıra ulaşmanız mümkündür. İstemci bağlantıları (hem JTA hem de kaynak yerel varlık yöneticileri için). Her bir veritabanı örneği, belirli sayıda bağlantıdan fazlasını kabul edecek şekilde yapılandırılacaktır. Tüm istemciler tarafından kurulan bağlantı sayısı bu sınırı aşarsa, sunucu yalnızca ekleme bağlantılarını bırakır. Bir havuzdan (JTA varlık yöneticileri için) ek bağlantılar için istekte bulunan veya yeni havuzlar (kaynak yerel varlık yöneticileri için) oluşturmak isteyen varlık yöneticisi örneklerini açarsanız, havuzun kendisinin de tükenmiş olması çok olasıdır. birçok bağlantı açılmış olurdu.
Bağlantıları doğrudan kapatamadığınızdan veya bağlantı havuzlarını uygulamanızdan yeniden boyutlandıramayacağınız için, artık gerekmediğinde varlık yöneticisi örneklerini kapatmanız gerektiği oldukça açıktır; Bu, varlık yöneticisi için kurulan bağlantıları otomatik olarak serbest bırakır.
Ayrıca, bir sebepten dolayı kaynak yerel varlık yöneticilerini kullanıyorsanız, her varlık yöneticisi örneği için iyi ayarlanmış ve yeterli boyutta bir bağlantı havuzunu kullanmak akıllıca olacaktır. Bir JTA varlık yöneticisi kullanıyorsanız, iyi ayarlanmış ve yeterli boyutta bir bağlantı havuzunun desteklediği kapsayıcı tarafından enjekte edilmiş varlık yöneticileri ve bir JTA veri kaynağı kullanmayı düşünün.
Her durumda - EntityManager'ı açık bir şekilde açarsanız (bunu EMFactory'den edinin), sonra kapatmanız gerekir. Bağlantının olup olmadığı (durumunuz böyle görünüyor) ya da değil JPA sağlayıcısıyla ilişkili ayarlara bağlıdır. Projemizde, EM her sorgu için bağlantıyı açar ve hemen geri verir (kapanır). Ancak başka seçenekler de var: bağlantıyı veya işlem yaşam döngüsünü takip eden bağlantıyı koruyun. Örneğin, settings for OpenJPA. EM, sorgu/işlem için bağlantıyı açtıysa, sorunu vurmayacağınızdan daha fazlasını söyleyebilirim. Görünüşe göre EM'iniz bağlantıyı alıp tutar.
Her durumda, oluşturduysanız EM'yi kapatmalısınız. En iyi uygulama, eğer mümkünse, aynı yöntemde yapmaktır, bu yüzden doğruluğu gözden geçirmek ve sonunda bloke etmek kolaydır.
- 1. Java'ya bir Veritabanına Bağlantı
- 2. Bir veritabanına bağlantı kurun
- 3. Bağlantı yöneticisi
- 4. Windows Mobile'da Bağlantı Yöneticisi
- 5. Bir veritabanına bağlantı olmadan bir MetadataWorkspace almak mümkün mü?
- 6. Varlık Çerçevesi'ni kullanarak bir MVC uygulamasından varolan bir Azure Veritabanına bağlanma
- 7. transaction and symfony2 varlık yöneticisi
- 8. Doctrine'nin varlık yöneticisi kilitleniyor ve
- 9. Bir yakınsama() sonra varlık yöneticisi nasıl açılır; JAVA EE
- 10. Spring, varlık yöneticisi fabrikasını enjekte etmiyor
- 11. Joomla Yönlendirme Yöneticisi çalışmıyor mu?
- 12. Symfony2'de Varlık Yöneticisi ne zaman kullanılmalıdır
- 13. Varlık Çerçevesinin Kullandığı Bağlantı Dizesinin Adını Değiştirme
- 14. C# 'da bir bağlantı dizesinde iki veritabanına nasıl bağlanır?
- 15. PHP ile bir veritabanına bağlanırken 1044 bağlantı hatası
- 16. Varlık çerçevesi Çekirdek Güncelleştirme-veritabanına özgü geçiş
- 17. Application.Restart(), uygulama için yeni bir süreç oluşturur mu?
- 18. Okta, tarayıcı düzeyinde otomatik olarak bir oturum çerezi oluşturur mu?
- 19. ToString(), dizelerde kullanıldığında yeni bir dize oluşturur mu?
- 20. Kod İlk varlık çerçevesindeki DbContext'i Veritabanına Dönüştür
- 21. Varlık Framework Şifrele bağlantı dizesi
- 22. Electron'da bir MySQL Veritabanına erişim
- 23. Milyarlarca görüntüyü Veritabanına kaydetmenin iyi bir fikir olduğunu mu düşünüyorsunuz?
- 24. Html.ActionLink bir giriş başarılı ve/Giriş altındaki bulunuyorsa bir bağlantı oluşturur basit bir görünüm var
- 25. Laravel Model Fabrikası veritabanına bağlantı olmadan
- 26. Bağlantı kuramıyor ve mysql veritabanına yazamıyorum
- 27. Bildiğiniz gibi biz komutunu kullanın bir veritabanına yeni bir bağlantı oluşturmak için, yeni bir SQL Bağlantı Hatası
- 28. Veritabanına bir tarih ekleme
- 29. Değerleri bir veritabanına kaydetme
- 30. Mongorestore farklı bir veritabanına