2012-07-04 9 views
9

Sto provando a definire due origini dati nella mia applicazione Web, utilizzando il file jetty-env.xml. Funziona bene con una sola fonte di dati, ma ho questa eccezione quando si aggiunge la seconda fonte di dati:Definizione di due origini dati nel molo (jetty-env.xml)

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

Ecco la mia configurazione:

molo-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 (c'è un altro hibernate.cfb.xml per configurare la seconda fonte di dati)

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

Qualsiasi indizio?

risposta

4

Non ho avuto la possibilità di testarlo, ma mi sembra che il tuo problema è che ti manca uno <Arg /> per l'ambito.

vostro DS dovrebbero essere:

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

ecc

Quel primo "Arg" è il campo di applicazione, e senza di essa, il resto dei tuoi argomenti sono fuori posizione, e sono probabilmente la causa del problema.

+1

Grazie , ma ottengo lo stesso errore :( – polypiel

+1

Ho avuto un problema simile, e questo ha funzionato per me. Ma ora ho un altro problema m ... – Raedwald

+0

hehehe ... Hai mai visto il costrutto per jndi.Resource? Risorsa (Object scope, String jndiName, Object objToBind) Resource (String jndiName, Object objToBind) ... quindi puoi ugualmente usare tre parametri con valori, svuotare il primo scope param con altri due parametri o solo due parametri – Striker

1

Provare ad abilitare la registrazione nel Jetty. Attenzione! Il nome del registratore è "jndi". Gli sviluppatori di jetty non utilizzano il nome di classe come nome di registrazione per JNDI.

Ho trascorso 2 giorni per trovare la differenza tra il nome definito in web.xml e jetty-env.xml.

1

l'ID valori dei parametri devono corrispondere a molo-env.xml e web.xml

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

Sembra una buona risposta .. ma non sono coinvolto in quel problema da anni: il PI non può testarlo – polypiel