2012-07-04 13 views
9

Web uygulamasında jetty-env.xml dosyasını kullanarak iki veri kaynağı tanımlamaya çalışıyorum.İki veri kaynağını iskelede tanımlama (jetty-env.xml)

dalgakıran-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> 
:

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

benim yapılandırma aşağıdaki gibidir: Ancak ben ikinci veri kaynağı eklendiğinde bu istisna olsun, sadece bir veri kaynağıyla Tamam çalışan

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

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

Herhangi ipucu (ikinci veri kaynağını yapılandırmak için başka hibernate.cfb.xml yoktur)?

cevap

4

Bunu test etme şansım olmadı, ama bana göre sorun, bir <Arg /> kapsamı eksikliğinizdir.

Sizin DS olmalıdır: İlk "Arg" kapsamı ve onsuz, senin tartışmaların dinlenme pozisyonuna dışındadır ve muhtemelen neden olan bu

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

vb

konu.

+1

ShiftPDA aynı olmalıdır ama aynı hatayı alıyorum :( – polypiel

+1

Benzer bir problem yaşadım ve bu benim için çalıştı ama şimdi başka bir sorunum var. m ... – Raedwald

+0

hehehe ... Hiç jndi.Resource için yapıya baktı? Kaynak (Nesne kapsamı, Dize jndiName, Object objToBind) Kaynak (String jndiName, Object objToBind) ... böylece eşit olarak üç parametreyi değerlerle kullanabilirsiniz, iki param kapsamını boşaltır ya da sadece iki param olan iki param – Striker

1

Jetty'de günlüğe kaydetmeyi etkinleştirmeyi deneyin. Dikkatli olun logger adı "jndi" dir. İskele geliştiricileri, sınıf adını JNDI için bir kayıt defteri adı olarak kullanmazlar.

Web.xml ve jetty-env.xml dosyasında tanımlanan adlar arasındaki farkı bulmak için 2 günümü harcadım.

1

id parametre değerleri dalgakıran-env.xml ve web.xml

dalgakıran-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

İyi bir yanıt gibi görünüyor .. ama yıllardır bu problemle ilgilenmiyorum: PI bunu test edemez – polypiel

İlgili konular