Dlaczego warto używać tylko jednego obiektu SessionFactory dla każdej aplikacji? Jakie są zalety używania obiektu fabryki pojedynczej sesji dla każdej aplikacji?Dlaczego warto używać tylko jednego obiektu SessionFactory dla każdej aplikacji?
Odpowiedz
Obiekty fabryki sesji należy wdrożyć, korzystając ze wzoru projektu singleton. Instancje SessionFactory są wątkowo bezpieczne i zwykle są udostępniane w całej aplikacji. Ponieważ te obiekty mają dużą wagę, ponieważ zawierają informacje o połączeniu, informacje o konfiguracji hibernacji i pliki odwzorowań, ścieżkę lokalizacji. Stworzenie liczby wystąpień sprawi, że nasza aplikacja będzie miała wagę ciężaru. Ale obiekty sesji nie są bezpieczne dla wątków. Tak więc w skrócie - obiekty SessionFactory są po jednej aplikacji i obiekty sesji są po jednym na klienta.
W związku z tym byłaby to jedna SessionFactory dla źródła danych. Twoja aplikacja może mieć więcej niż jedno źródło danych, więc możesz mieć więcej niż jeden obiekt SessionFactory w tej instancji. Ale nie chcesz tworzyć SessionFactory więcej niż jeden raz w aplikacji.
Zalety: Oczywiście jego poprawę wydajności aplikacji :)
AKTUALIZACJA - Wyciąg z Hibernate Doc
Stan wewnętrzny z SessionFactory jest niezmienna. Po utworzeniu tego stanu wewnętrznego jest ustawiony. Ten stan wewnętrzny obejmuje wszystkie metadane dotyczące odwzorowania obiektu/relacyjnego ( ).
Nie mylisz się DarkHorse SessionFactory nie jest zaimplementowany przy użyciu wzorca projektowego singleton. –
@DarkHorse SessionFactory nie jest Singleton, jest używany jako singleton, jest niezmienny http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/SessionFactory.html – anshulkatta
Ponieważ utworzenie SessionFactory
jest niezwykle kosztowny proces, który wymaga analizowania właściwości hibernacji konfiguracja/mapowanie i tworzenia puli połączeń bazy danych .Creating puli połączeń bazy danych wymaga ustanowienia połączenia z bazą danych (tj tworzenie Connection obiektów), który ma nad głową z powodu czas potrzebny na zlokalizowanie serwera DB, ustanowienie kanału komunikacji i wymianę informacji w celu uwierzytelnienia.
Jeśli więc utworzysz SessionFactory
dla każdego żądania, oznacza to, że nie używasz puli połączeń z bazą danych do obsługi Twojego żądania. Musisz skonfigurować nowe połączenie według powyższego procesu dla każdego żądania, zamiast tylko otwierać otwarte połączenie z puli połączeń z bazą danych.
Istnieje kilka kluczowych punktów dotyczących jednego SessionFactory obiekt za Zastosowanie: -
1.Single Danych sklep: - To sklep pojedyncze dane dla całej aplikacji. Chociaż możesz mieć wiele SessionFactory, ale każdy SessionFactory będzie miał jedną inną bazę danych z nim związaną.
2.Thread Safe: - SessionFactory jest bezpieczny dla wątków, więc dzięki tej funkcji wiele wątków może uzyskać dostęp do SessionFactory.
3.Immutable: - Po utworzeniu obiektu SessionFactory nie można zmienić ani ustawić wartości Facsesr sesji. Jego stan wewnętrzny jest ustalany w momencie tworzenia.
4.Singleton: - SessionFactory jest zbudowany w momencie uruchamiania aplikacji i jest zgodny ze wzorcem singleton.
Mam nadzieję, że to odpowiedziałoby na twoje pytanie ..
Aby uzyskać więcej informacji na temat tworzenia SessionFactory prosimy mają odnosić się do adresu URL: http://techpost360.blogspot.in/2015/07/what-is-hibernate-sessionfactory.html
Ya, Jego bardzo proste do zrozumienia, że SessionFactory śledzić wzorca projektowego singleton. Dzięki temu można utworzyć tylko jeden obiekt w aplikacji otworu. SessionFactory jest również bezpieczny dla wątków, więc tylko jeden wątek może wykonywać jednocześnie swój kod. Instancja sessionFactory jest ważna, ponieważ zawiera połączenie, konfigurację hibernacji, pliki mapujące, ścieżkę lokalizacji, więc jeśli utworzysz numer instancji klasy sessionFactory, kod stanie się bardzo ciężki. Z tego powodu używamy tylko jednej instancji sessionFactory dla jednej aplikacji. Aby poprawić wydajność naszej aplikacji używamy tylko jednej instancji sessionFactory w jednej aplikacji.
- 1. Dlaczego warto używać Gradle?
- 2. Dlaczego warto używać NSAutoreleasePool?
- 3. Dlaczego warto używać QObject :: setObjectName()?
- 4. Dlaczego warto używać shm_open?
- 5. Dlaczego warto używać Object.create do prototypu podczas rozszerzania obiektu?
- 6. Dlaczego warto używać obiektu object.prototype.constructor w javascript OOP?
- 7. Dlaczego warto używać angularfire $ destroy()?
- 8. Dlaczego warto używać JIT UNITVERSIONING?
- 9. Dlaczego warto używać AsynchronousFileChannel Java?
- 10. Dlaczego warto używać wzorca konstruktora?
- 11. Dlaczego warto używać aliasingów klas?
- 12. ReactJS: Dlaczego warto używać this.props.children?
- 13. Dlaczego warto używać metody classmethod zamiast staticmethod?
- 14. Dlaczego warto używać ROLAP zamiast zwykłego MySQL?
- 15. Dlaczego warto używać Dart jako programisty?
- 16. dlaczego warto używać WeakReference na Android Słuchacze?
- 17. Dlaczego warto używać "succeed do" w Haml?
- 18. Dlaczego warto używać spyOn zamiast jaśminu.createSpy?
- 19. Dlaczego warto używać Ext.apply w initComponent
- 20. Czy warto używać generycznych wyjątków?
- 21. Dlaczego warto używać wskaźników klasy bazowej dla klas pochodnych?
- 22. Dlaczego warto używać Celery zamiast RabbitMQ?
- 23. Dlaczego warto używać argparse zamiast optparse?
- 24. Dlaczego warto używać AsQueryable() zamiast List()?
- 25. Dlaczego warto używać opcji Opcjonalnie.Opcji na Opcjonalne.Niewłączalne?
- 26. Dlaczego warto używać var zamiast nazwy klasy?
- 27. Dlaczego warto używać statycznego w D?
- 28. Dlaczego warto używać $ {@ + "$ @"} w skryptach powłoki?
- 29. Dlaczego warto używać wielu kontekstów OpenGL
- 30. Dlaczego warto używać Long.valueOf (...) zamiast długiego literału?
Można znaleźć tutaj, aby uzyskać więcej informacji http://stackoverflow.com/a/4544053/366964 –