2011-11-28 10 views
12

Questo è il mio context.xml di file:Come ottenere risorse dal file context.xml in webc tomcat?

... 
<Resource auth="Container" 
      driverClass="net.sourceforge.jtds.jdbc.Driver" 
      type="com.jolbox.bonecp.BoneCPDataSource" 
      idleMaxAge="240" 
      idleConnectionTestPeriod="60" 
      partitionCount="3" 
      acquireIncrement="1" 
      maxConnectionsPerPartition="10" 
      minConnectionsPerPartition="3" 
      statementsCacheSize="50" 
      releaseHelperThreads="4" 

      name="jdbc/MyDatasource" 
      username="my_username" 
      password="my_password" 
      factory="org.apache.naming.factory.BeanFactory" 
      jdbcUrl="jdbc:jtds:sqlserver://localhost:12345/my_database" 
/> 
... 

ho già provato ad utilizzare ServletContext.getResource(java.lang.String) con il nome della risorsa ("jdbc/MyDataSource"), ma Tomcat si lamenta che il nome non inizia con un '/'. Ho anche provato con "/ jdbc/MyDatasource", ma questa volta restituisce null.

Io principalmente bisogno del jdbcUrl per eseguire verificare una connessione con il server di database (vedere se il server è in linea e operativo).

risposta

15

parola chiave è: JNDI. Le risorse nello context.xml non sono "Risorse di sistema" ma Risorse JNDI. Prova questo:

InitialContext ic = new InitialContext(); 
// that's everything from the context.xml and from the global configuration 
Context xmlContext = (Context) ic.lookup("java:comp/env"); 
DataSource myDatasource = (DataSource) xmlContext.lookup("jdbc/MyDatasource"); 

// now get a connection to see if everything is fine. 
Connection con = ds.getConnection(); 
// reaching this point means everything is fine. 
con.close(); 
+2

Grazie per la risposta. Non so come procedere accettando la risposta dato che entrambi mi hai aiutato molto ... Penso che accetterò la tua risposta per incoraggiarti (dato che sei un utente più recente) a continuare a contribuire a questa comunità .. –

+0

@IgorPopov Beh, ho la stessa domanda ma voglio solo leggere altri parametri da context.xml: come maxTotal, maxIdle ecc. Come posso leggerli mentre li posso stampare in console? Sto usando lo stesso approccio. C'è un modo per leggere questi parametri da context.xml? –

+0

@HarshvardhanSolanki Non che io sappia. Ma dovresti porre le domande di follow-up come domande. Assicurati di collegare alle domande esistenti se non rispondono alla tua domanda, quindi le risposte vedono che hai provato a risolverlo da solo. –

10

Si dovrebbe essere in grado di accedere all'origine dati con il seguente codice:

Context initialContext = new InitialContext(); 
Context envContext = (Context)initialContext.lookup("java:/comp/env"); 
DataSource ds = (DataSource)envContext.lookup("jdbc/MyDatasource"); 
+0

La ringrazio molto per il vostro aiuto :) Sembrava che stavo cercando nel posto sbagliato la prima volta. Ho trovato un esempio di codice nei documenti tomcat: http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html –

+3

In tomcat dovresti cambiare "java:/comp/env" per "java: comp/env" – lmiguelmh

Problemi correlati