2016-10-05 8 views
0

Das Gleiche funktioniert gut in Freiheit, aber ich habe diese Arbeit WebSphere mit 8.0 ...Wie kann ich eine Datenquelle vom untergeordneten EJB-Projekt finden?

ich mit einer EAR> IST> EJB Projektstruktur eine Anwendung zu machen. Die Idee ist, einen Stapelprozess zu starten, der einen RESTful-Trigger verwendet, obwohl die WAR die die Logik in dem EJB verwendet, um die Taasks auszuführen. Ich habe einen Persistenzhelfer im EJB-Projekt, das mit dem EntityManager eingespritzt wird, und alles ist glücklich.

JPA ist einfach zu langsam für die Daten und Band I injizieren müssen, so wir JDBC Batch zu verwenden, um den Import der Daten in diesem Prozess entschieden haben, so brauche ich eine Datasource. Es ist in der Serverkonsole (die persistence.xml verwendet es für JPA) definiert, ich habe es in der web.xml und ibm-web-bnd.xml definiert, aber ich kann immer noch nicht finden, es zu finden. Außerdem, wenn Ich habe eine Klasse in der WAR spucken die JNDI-Struktur, kann ich es unter java: comp/env/jdbc/MyDB sehen, aber von einer Klasse in der EJB, es ist eine andere Baum.

web.xml:

<resource-ref> 
    <res-ref-name>jdbc/MyDB</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    <res-sharing-scope>Shareable</res-sharing-scope> 
    <mapped-name>jdbc/MyDB</mapped-name> 
</resource-ref> 

ibm-web-bnd.xml:

<resource-ref name="jdbc/MyDB" binding-name="jdbc/MyDB" /> 

MyPersistence.java:

@Resource(name="jdbc/MyDB") 
private DataSource datasource; 

Muss ich etwas Zusätzliches brauchen die Datenquelle zu übergeben bis auf die EJB-Ebene? Das scheint seltsam, da der EntityManager es erfolgreich verwendet.

Wie immer wird jede Hilfe geschätzt! Bearbeiten

Post-Antwort:

Dies ist der Eintrag ich brauchte, um den ibm-ejb-jar-bnd.xml hinzuzufügen, pro Gas Antwort:

<session name="MyPersistence" simple-binding-name="com.travelers.bi.errordb.persistence.MyPersistence"> 
    <resource-ref name="jdbc/MyDB" binding-name="jdbc/MyDB" /> 
</session> 
+0

Welche Datenquelle möchten Sie verwenden? Nicht sicher, warum Sie Bindungen für 'jdbc/MyDB' gezeigt haben, aber dann Ressourceninjektion für' jdbc/ErrorDB' zeigen –

+0

@aguibert - weil Tippfehler – Mike

+1

Ich bin mir nicht sicher, ob ich Ihr Problem richtig verstehe (vorausgesetzt, Sie haben ein NameNotFound JNDI Error). Fügen Sie die Annotation "@Ressource" für Datenquelle in Ihre EJB-Klasse ein (auf die gleiche Weise, wie Sie sie der MyPersistence-Klasse hinzugefügt haben) und erstellen Sie dann die Datei ibm-ejb-jar-bnd.xml mit einer ähnlichen Ressourcenreferenzbindung wie Ihr ibm-web -bnd.xml-Datei. – Gas

Antwort

1

Fügen Sie die @Resource Annotation für Datenquelle in Ihrer EJB-Klasse (auf die gleiche Weise, wie Sie es der Klasse MyPersistence hinzugefügt haben), und erstellen Sie dann ibm-ejb-jar-bnd.xml Datei mit ähnlicher Ressourcenreferenz Bindung als Ihre ibm-web-bnd.xml Datei. Die Datei ibm-web-bnd.xml bezieht sich auf Ressourcen, die in Ihrem Webmodul verwendet werden, wie z. B. Servlets usw. In Java EE 7 können Sie EJBs in das Webmodul einbetten, sie verwenden jedoch weiterhin ihre eigenen Anmerkungen.

/Deployment Deskriptoren für Referenzen, deshalb haben Sie eine separate Bindungsdatei für EJBs.

Verwandte Themen