9

ファイルを使用して、Web アプリケーションで 2 つのデータ ソースを定義しようとしていjetty-env.xmlます。1 つのデータ ソースだけで問題なく動作しますが、2 番目のデータ ソースが追加されると、次の例外が発生します。

java.lang.IllegalStateException: Nothing to bind for name javax.sql.DataSource/default

これが私の構成です:

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 (2 番目のデータ ソースを構成する別の hibernate.cfb.xml があります)

<session-factory>
  <property name="connection.datasource">jdbc/mybd1</property>
  <!-- ... -->

どんな手掛かり?

4

4 に答える 4

4

私はそれをテストする機会がありませんでしたが、あなたの問題は<Arg />、スコープの が欠落していることにあるようです。

DS は次のようになります。

    <New id="ds" class="org.eclipse.jetty.plus.jndi.Resource">
    <Arg></Arg>
    <Arg>jdbc/mybd1</Arg>
    <Arg>
        <New class="com.mchange.v2.c3p0.ComboPooledDataSource">

その最初の「Arg」はスコープであり、それがなければ、残りの引数は位置がずれており、おそらく問題を引き起こしています。

于 2012-07-05T07:14:37.880 に答える
1

Jetty でのロギングを有効にしてみてください。注意ロガー名は「jndi」です。Jetty 開発者は、クラス名を JNDI のロガー名として使用しません。

web.xml で定義されている名前と jetty-env.xml で定義されている名前の違いを見つけるのに 2 日を費やしました。

于 2013-10-10T14:23:54.563 に答える