Buduję aplikację, która ma autonomiczną warstwę "core", która jest również używana do tworzenia aplikacji webapp (jest to wielomodułowy projekt Maven, z modułem "core" i modułem "webapp", który ma zależność od modułu "core"). Używa bazy danych MySQL. Próbuję wdrożyć DataSource
, który byłby dobry w obu kontekstach (tylko jedno połączenie wystarcza w kontekście autonomicznym).Które źródło danych dla aplikacji jest używane zarówno w kontekście autonomicznym, jak i aplikacji webowej (Java 7, Tomcat 7)?
Po przeczytaniu wielu dokumentacji na temat źródeł danych, muszę powiedzieć, że jestem trochę zagubiony. Doszedłem do wniosku, że może powinienem użyć Tomcat JDBC Connection Pool. Moje pytania to:
1) w autonomicznym kontekście, w jaki sposób powinienem podać konfigurację do korzystania z DataSource, wiedząc, że ta konfiguracja będzie dostarczona przez Tomcat w kontekście webapp (autonomiczna konfiguracja nie powinna zatem nadpisywać konfiguracji Tomcat)?
powinienem zrobić coś takiego in this other question w metodzie zwanej tylko w jednostkowym kontekście? Ale jak mogę zobaczyć w kontekście webapp, że Tomcat już dostarczył DataSource?
Czy powinienem raczej użyć definicji fasoli? Ale w jaki sposób ta fasola nie byłaby wykorzystywana w kontekście webapp?
2) A co z innymi połączonymi implementacjami DataSource?
Czy nie powinienem używać tylko MySQL DataSource?
Przeczytałem, że w Java EE 7 źródła danych są łatwiejsze w użyciu (https://blogs.oracle.com/arungupta/entry/default_datasource_in_java_ee). Czy jest jakiś przełom w Java 7? Nowy dostawca DataSource, którego absolutnie powinienem użyć w Java 7?
Wniosek: Tak, jestem zagubiony i nie wiem, jakie są "standardy Gold" dla wykorzystania DataSource. Dziękuję za pomoc.
Dzięki za odpowiedź, kilka pytań: moja warstwa "core" jest biblioteką, która może być używana w innych aplikacjach. Jeśli nie chcę, aby te aplikacje wykonywały zadania opisane w twoim drugim łączu, InitialContext powinien być ustawiony ** wewnątrz ** warstwy rdzenia, prawda? Więc może powinienem po prostu wykonać wyszukiwanie w warstwie rdzenia, wychwycić wyjątek wyrzucony, jeśli nie w kontekście przeglądarki internetowej, a następnie ustawić własne połączenie w takim przypadku? Czy to byłoby ważne? – FBB
Jeśli "rdzeń" zawiera taką funkcję, która może być wykonywana przez inne aplikacje. Można wygenerować trzeci komponent (z niestandardowym 'InitialContextFactory'), który może być wywołany z autonomicznej aplikacji. Myślę, że ta funkcja wymagań może być unikalna dla samodzielnej aplikacji, więc możesz ją osadzić w takiej aplikacji. W innej ręce możesz zaimplementować fabrykę połączeń. –
Tak, wystarczy prosta fabryka połączeń korzystająca z DriverManager, gdy DataSource nie może być załadowany za pomocą JNDI. Sterownik można skonfigurować za pomocą pliku właściwości. Czy to byłoby ważne? Os to straszny wzór projektu? : p – FBB