Ich glaube, Sie können JTA-Transaktionen nicht verwenden, wenn Sie sich außerhalb eines Java EE-Containers befinden (oder zumindest gibt es keine einfache Möglichkeit, dies zu tun).
Verwenden Sie Ressourcen-Local
Es gibt nichts, was JTA in Ihrem Beispiel erfordert: Sie schauen nur eine Datenquelle in einer Java SE-Umgebung auf. Ich denke, Ihre XA-Datenquelle als Ressourcen-Local. würde dein Problem lösen. Setze das in deine persistence.xml
:
<persistence-unit name="ContactBookPersistenceUnit" transaction-type="RESOURCE-LOCAL">
[...]
<non-jta-data-source>java:/ExampleDS</jta-data-source>
Ich habe diesen Code nicht direkt getestet, aber ich habe einen ähnlichen Ansatz in Webanwendungen verwendet, der für den Apache Tomcat Server geschrieben wurde.
Siehe auch: Arten von Entitymanagers.
Verwenden Sie einen eingebetteten Container
Eine weitere Option, die Sie untersuchen können, beinhaltet das Starten eines eingebetteten Java-EE-Containers in den Jugendstests. Hier sind ein paar Zeiger mit Beispielen für Glasfische 3: