2012-07-04 39 views
9

我試圖在我的web應用程序中使用jetty-env.xml文件定義兩個數據源。 它的工作原理確定只用一個數據源,但是我得到這個例外,當添加第二個數據源:在jetty中定義兩個數據源(jetty-env.xml)

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

這裏是我的配置:

碼頭-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(存在另一hibernate.cfb.xml以配置第二數據源)

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

任何線索?

回答

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"> 

那首「精氨酸」的範圍,沒有它,你的論點其餘均爲出來的位置,並可能導致您的問題。

+1

謝謝,但我得到了非常相同的錯誤:( – polypiel

+1

我有一個類似的問題,這對我有效。但現在我有另一個問題m ... – Raedwald

+0

hehehe ...曾經看過jndi.Resource的構造嗎?資源(對象範圍,字符串jndiName,對象objToBind)資源(字符串jndiName,對象objToBind)...所以你可以同樣使用三個參數的值,空的第一參數範圍與兩個其他參數或只是兩個參數 – Striker

1

嘗試在Jetty中啓用日誌記錄。 小心記錄器名稱是「jndi」。 Jetty開發人員不使用類名作爲JNDI的記錄器名稱。

我花了2天的時間找到web.xml和jetty-env.xml中定義的名稱之間的區別。

1

id參數值應與碼頭-env.xml和web.xml

碼頭-env.xml

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 
    <New id="DS1" class="org.eclipse.jetty.plus.jndi.Resource">...</New> 
    <New id="DS2" class="org.eclipse.jetty.plus.jndi.Resource">...</New> 
</Configure> 

的web.xml

<resource-ref id="DS1">...</resource-ref> 
<resource-ref id="DS2">...</resource-ref> 
+0

這似乎是一個很好的答案..但是我多年沒有參與這個問題:PI無法測試它 – polypiel

相關問題