2011-11-28 13 views
12

Esta es mi context.xml archivo:¿Cómo obtener recursos del archivo context.xml en la aplicación web 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" 
/> 
... 

Ya he probado usando ServletContext.getResource(java.lang.String) con el nombre del recurso ("jdbc/MyDataSource"), pero Tomcat se queja de que el nombre no comienza con una '/'. También probé con "/ jdbc/MyDatasource", pero esta vez devuelve null.

necesito todo el JDBCURL para realizar comprobar una conexión con el servidor de base de datos (ver si el servidor está en línea y en funcionamiento).

Respuesta

15

la palabra clave es: JNDI. Los recursos en el context.xml no son 'Recursos del sistema' sino recursos JNDI. Prueba esto:

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

Gracias por su respuesta. No sé cómo proceder para aceptar la respuesta, ya que ambos me ayudaron mucho ... Creo que aceptaré su respuesta para alentarlo (ya que es un usuario más nuevo) a seguir contribuyendo a esta comunidad. . –

+0

@IgorPopov Bueno, tengo la misma pregunta, pero solo quiero leer otros parámetros de context.xml: como maxTotal, maxIdle, etc. ¿Cómo puedo leerlos ya que puedo imprimirlos en la consola? Estoy usando el mismo enfoque. ¿Hay alguna forma de leer estos parámetros desde context.xml? –

+0

@HarshvardhanSolanki No es que yo sepa. Pero debe hacer preguntas de seguimiento como propias preguntas. Asegúrese de vincular las preguntas existentes si no responden su pregunta, de modo que las respuestas vean que ha tratado de resolverlo usted mismo. –

10

Usted debe ser capaz de acceder a la fuente de datos con el siguiente código:

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

muchas gracias por su ayuda :) Parecía que yo estaba buscando en el lugar equivocado la primera vez. Encontré un ejemplo de código en los documentos de tomcat: http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html –

+3

En tomcat debe cambiar "java:/comp/env" por "java: comp/env" – lmiguelmh

Cuestiones relacionadas