Die Definition von zwei Daten-Quellen im Steg (jetty-env.xml)
Ich versuche zu definieren, die von zwei Daten-Quellen in meiner web-Anwendung, mit der jetty-env.xml
- Datei.
Es funktioniert ok, mit nur einer Datenquelle, jedoch bekomme ich diese Ausnahme, wenn die zweite Datenquelle Hinzugefügt:
java.lang.IllegalStateException: Nothing to bind for name javax.sql.DataSource/default
Hier ist meine Konfiguration:
jetty-env.xml
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<New id="ds" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg>jdbc/mybd1</Arg>
<Arg>
<New class="com.mchange.v2.c3p0.ComboPooledDataSource">
<Set name="driverClass">com.microsoft.sqlserver.jdbc.SQLServerDriver</Set>
<Set name="jdbcUrl">jdbc:jtds:sqlserver://url:1433/mybd1</Set>
<Set name="user">xx</Set>
<Set name="password">yy</Set>
</New>
</Arg>
</New>
<New id="ds2" class="org.eclipse.jetty.plus.jndi.Resource" >
<Arg>jdbc/mybd2</Arg>
<Arg>
<New class="com.mchange.v2.c3p0.ComboPooledDataSource">
<Set name="driverClass">com.microsoft.sqlserver.jdbc.SQLServerDriver</Set>
<Set name="jdbcUrl">jdbc:jtds:sqlserver://url:1433/mybd2</Set>
<Set name="user">xx</Set>
<Set name="password">yy</Set>
</New>
</Arg>
</New>
</Configure>
web.xml
<resource-ref>
<res-ref-name>jdbc/mybd1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<res-ref-name>jdbc/mybd2</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
hibernate.cfg.xml (es ist ein weiterer hibernate.cfb.xml konfigurieren Sie die zweite Datenquelle)
<session-factory>
<property name="connection.datasource">jdbc/mybd1</property>
<!-- ... -->
Keine Ahnung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte noch keine Gelegenheit, es zu testen, aber es sieht für mich so aus Ihr problem ist, dass Sie fehlt, eine
<Arg />
für den Umfang.Deine DS sollte:
etc.
Ersten "Arg" ist der Umfang, und ohne Sie, wird der rest Ihrer Argumente sind aus der position, und sind wahrscheinlich die Ursache Ihres Problem.
Versuchen, aktivieren Sie die Protokollierung in Steg.
Seien Sie vorsichtig logger name ist "jndi".
Jetty-Entwickler nicht verwenden class-name als logger-Namen für JNDI.
Verbrachte ich 2 Tage zu finden, Unterschied zwischen definierten Namen in web.xml und jetty-env.xml.
Den id-parameter Werte sollten übereinstimmen in jetty-env.xml und web.xml
jetty-env.xml
web.xml
Werfen Sie einen Blick in :
https://www.eclipse.org/jetty/documentation/9.4.x/using-jetty-jndi.html
Entscheiden, Wo Ressourcen Deklarieren
Sie können definieren, benennen von Ressourcen in drei Orten:
jetty.xml
Benennung von Ressourcen definiert jetty.xml Datei beschränkt auf entweder die JVM-Ebene oder der Ebene des Servers.
Die Klassen für die Ressource muss sichtbar an der Jetty-container-Ebene. Wenn die Klassen für die Ressource existieren nur innerhalb Ihrer webapp, deklarieren Sie es in einen WEB-INF/jetty-env.xml Datei.
WEB-INF/jetty-env.xml
Benennung von Ressourcen in einem WEB-INF/jetty-env.xml Datei stammen aus dem Bereich der web-Anwendung, in der sich die Datei befindet. Zwar können Sie die JVM-oder Server-Bereiche wenn Sie wählen, wir empfehlen nicht, dies zu tun. Die Ressourcen, die hier definiert wird, kann die Verwendung von Klassen aus der eigenen webapp. Dies ist ein Jetty-spezifische Mechanismus.
Kontext-xml-Datei
Einträge im Kontext-xml-Datei sollte eingeschränkt werden auf der Ebene der webapp für die Sie gelten, obwohl Sie können eine weniger strikte scoping-level-oder Server-JVM, wenn Sie wählen. Als Ressourcen deklariert jetty.xml Datei-Klassen im Zusammenhang mit der Ressource muss sichtbar sein, auf den container classpath.
Und legen Sie eine Datei wie diese :