Tomcat mit JPA und JTA

yrow

Grünschnabel
Ich habe einen Tomcat mit EclipseLink am laufen. Die Konfiguration ist angelehnt an diese hier.

Die Sache mit den ConnectionPool usw. läuft alles supie. Was mir noch unklar ist.

1)
Ich hole mir eine EntityManagerFactory und mit dieser erstelle ich meine EntityManager. Da das Besorgen der Factory "teuer" ist (habe ich jedenfalls gelesen), habe ich diese Instanz der Factory in ein Singleton gegeben. Jetzt habe ich aber auch gelesen, das man diese Instanz nur solange am Leben lassen soll wie der Zugriff auf den PersistenceContext dauert und dann mit EntityManagerFactory.close() die Factory entsorgen muss. Das widerspricht aber meiner Idee mit den Singleton...Irgendwie verwirrt mich das Ganze, kann mir mal einer mit ein paar kurzen Worten erklären, wie das grundsaätzlich Arbeiten in einer Java-SE-Umgebung aussehen sollte? Ich finde immer nur Sachen die sich an JavaEE anlehnen...aber defacto Tomcat ist JavaSE mit einigen Teilen von JavaEE (Servlet-API, JSTL, Java EL 1.0,...)

2)
ich benutzt JTA für die DB-Connection. Aber ich habe derzeit kein JTA (z.B. Bitronix, BTM, JOTM oder ähnliches) installiert. Bedeutet das der Aufruf von

manager.getTransaction().beginn();

keine Transaction auslöst? Muss ich dann auf jeden Fall noch einen JTA Manager (UserTransaction) installieren oder reicht es den Typ auf RESOURCE_LOCAL stellen und eine non-JTA-DataSource zu nehmen? Kurz gesagt ich brauche unbedingt eine sichere Transactionsteuerung beim Zugriff auf die DB und mit welcher Einstellung erreiche ich das?

Zum Schluss noch ein paar Fragen zu JTA:
Wann ist der Einsatz von JTA sinnvoll?
Was sind die Vorteile bzw. die Nachteile von JTA?
Wie ich zum Beispiel Bitronix oder JOTM in Tomcat zum laufen bekomme ist kein Problem, aber wie kann ich dann EclipseLink an Bitronix oder JOTM "anhängen"?
 
Meine erste Frage konnte ich mir selbst beantworten, habe zufällig einige Sachen zu dieser Frage im Internet gefunden.
Für die diejenigen die sich ebenfalls diese Frage stellen, hier ist die Antwort:

Eine EntityManagerFactory sollte nur einmal pro PersitenceUnit in einer JavaSE Umgebung geben. Denn das besorgen ist "teuer" und sie ist auch Thread-sicher.
Hier die Ressourcen:
http://www.hs-augsburg.de/~meixner/saj/skript/persistenzframeworks/hibernateUndJPA.html
http://stackoverflow.com/questions/3350483/when-should-we-close-the-entitymanagerfactory

auf meine anderen Fragen habe ich noch keine Antwort gefunden und ist keiner hier der mir diese beantworten kann oder eine Anregung geben?
 
Zurück