Jakie jest najlepsze podejście do pobrania EntityManagerFactory w aplikacji internetowej (jsp/servlets). jest to dobry sposób When should EntityManagerFactory instance be created/opened?, lub że lepiej dostać od JNDI, lub coś innego ...Najlepsza praktyka uzyskiwania EntityManagerFactory
Odpowiedz
Są wagi ciężkiej i oni mają być w zakresie aplikacji. Musisz więc otworzyć je podczas uruchamiania aplikacji i zamknąć je przy wyłączaniu aplikacji.
Sposób wykonania zależy od docelowego kontenera. Czy obsługuje EJB 3.x (Glassfish, JBoss AS, itp.)? Jeśli tak, to nie trzeba się martwić o otwarcie/zamknięcie ich (ani o transakcjach) w ogóle, jeśli po prostu wykonać zadanie WZP w EJB z @PersistenceContext
zwykły sposób:
@Stateless
public class FooService {
@PersistenceContext
private EntityManager em;
public Foo find(Long id) {
return em.find(Foo.class, id);
}
// ...
}
Jeżeli kontener docelowy nie robi Obsługa EJB (np. Tomcat, Jetty, itp.) i dodatku EJB, takiego jak OpenEJB, również nie jest opcją z jakiegoś powodu, więc w ten sposób ręcznie tworzysz własne (i transakcje) EntityManager
, a następnie najlepiej. to ServletContextListener
. Oto podstawowym przykładem kickoff:
@WebListener
public class EMF implements ServletContextListener {
private static EntityManagerFactory emf;
@Override
public void contextInitialized(ServletContextEvent event) {
emf = Persistence.createEntityManagerFactory("unitname");
}
@Override
public void contextDestroyed(ServletContextEvent event) {
emf.close();
}
public static EntityManager createEntityManager() {
if (emf == null) {
throw new IllegalStateException("Context is not initialized yet.");
}
return emf.createEntityManager();
}
}
(uwaga: przed Servlet 3.0, klasa ta musi być zarejestrowana przez <listener>
w web.xml
zamiast @WebListener
)
który może być używany jako:
EntityManager em = EMF.createEntityManager();
// ...
- 1. Najlepsza praktyka uzyskiwania rozmiaru danych (sizeof) w Javie
- 2. Zarządzanie wersjami - najlepsza praktyka
- 3. Najlepsza praktyka nazywania podklas
- 4. najlepsza praktyka architektury phonegap
- 5. Zastąpić Ext.data.Connection - najlepsza praktyka
- 6. Najlepsza praktyka nawigacji po kartach?
- 7. Najlepsza praktyka parametryzowania aplikacji GWT?
- 8. C# Połączenia danych Najlepsza praktyka?
- 9. Caliburn.Micro zagnieżdżona najlepsza praktyka ViewModels
- 10. Najlepsza praktyka dla funkcji "podobnych"
- 11. Najlepsza praktyka ulepszania modułów Pythona?
- 12. Najlepsza praktyka projektowania systemu uprawnień
- 13. Najlepsza praktyka projektowania formularzy PHP
- 14. Najlepsza praktyka OSGi luźnego sprzężenia
- 15. Najlepsza praktyka zależności od #defines?
- 16. Najlepsza praktyka dla ścieżek PHP
- 17. Najlepsza praktyka LongRunning Tworzenie zadań
- 18. Jaka jest najlepsza praktyka uzyskiwania instancji EC2 automatycznie dołączających do HAProxy?
- 19. Jaka jest najlepsza praktyka uzyskiwania dostępu do wartości $ _GET w Laravel?
- 20. Najlepsza praktyka w synchronizowanych metodach w jsf i java
- 21. Najlepsza praktyka stosowania stałych w adnotacjach scala
- 22. Najlepsza praktyka ostrzegania użytkownika, że straci dane
- 23. Najlepsza praktyka umieszczania logiki GPIO w UWP
- 24. Najlepsza praktyka konwersji RDL na RDLC
- 25. Backbone.js - najlepsza praktyka w implementacji "natychmiastowego" wyszukiwania
- 26. Najlepsza praktyka synchronizacji modeli i ViewModels
- 27. Najlepsza praktyka zarządzania wariantami projektu w Git?
- 28. Najlepsza praktyka do dokumentowania zależności bibliotek javascript
- 29. Najlepsza praktyka przesyłania plików w CakePHP
- 30. ASP.NET: najlepsza praktyka przekierowywania na https
Doskonały przykład jak zawsze, ale chciał tylko dodać, że przy użyciu @PersistenceContext bez atrybutu "unitName" oznacza to (i w sposób niedeklarujący) użycie jedynej/domyślnej jednostki trwałości zdefiniowanej w "persistence.xml". Jeśli istnieje wiele źródeł danych/jednostek trwałości, może to prowadzić do niejasności co do tego, który z nich jest. –
Nie jestem pewien, co jeszcze brakuje, podążam za twoją odpowiedzią, ale pojawia się błąd runtime? > Spowodowane przez: org.springframework.beans.factory.NoSuchBeanDefinitionException: Nie zdefiniowano unikatowej fasoli typu [javax.persistence.EntityManagerFactory]: oczekiwany pojedynczy komponent bean, ale znaleziono 0: – huahsin68
@ huahsin68: Pierwotne pytanie nie dotyczy w ogóle Springa i nie robię też wiosny. Wystarczy nacisnąć "Zadaj pytanie". – BalusC