Foros del Web » Programación para mayores de 30 ;) » Java »

Problema en configuración de DataSource en Tomcat

Estas en el tema de Problema en configuración de DataSource en Tomcat en el foro de Java en Foros del Web. Buenas de nuevo, No consigo realizar la conexión a una BD Oracle 10, instalada en el mismo ordenador después de crear un DataSource desde el ...
  #1 (permalink)  
Antiguo 14/07/2006, 02:38
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Problema en configuración de DataSource en Tomcat

Buenas de nuevo,

No consigo realizar la conexión a una BD Oracle 10, instalada en el mismo ordenador después de crear un DataSource desde el Server Administration:

Código:
JNDI Name:	          jdbc/mioracle
Data Source URL:       jdbc:oracle:thin:@127.0.0.1:1521:exped
JDBC Driver Class:    oracle.jdbc.OracleDriver
User Name:                xxx
Password:                  xxx
Max. Active Connections:       4
Max. Idle Connections:           2
Max. Wait for Connection:	5000
Después he añadido lo siguiente al "web.xml" (al que está en "conf/web.xml"):

Código:
<resource-ref>
 <description>Ejemlo Oracle DB</description>
 <res-ref-name>jdbc/mioracle</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
</resource-ref>
Variables de entorno:

Código:
LD_LIBRARY_PATH=/home/javier/oracle/lib
ORACLE_BASE=/home/javier/oracle
ORACLE_HOME=/home/javier/oracle
ORACLE_LIBRARY_PATH=/home/javier/oracle/lib
ORACLE_PATH=/home/javier/oracle/bin:/opt/bin
ORACLE_SID=exped
"In order to use OCI driver, you should have an Oracle client installed. You should have installed Oracle8i(8.1.7) client from cd, and download the suitable JDBC/OCI driver(Oracle8i 8.1.7.1 JDBC/OCI Driver)"

--> tengo el fichero "ojdbc14.jar" en "common/lib"

"After renaming classes12.zip file to classes12.jar for Tomcat, copy it into $CATALINA_HOME/common/lib. You may also have to remove the javax.sql.* classes from this file depending upon the version of Tomcat and JDK you are using"

--> tengo "classes12.jar" en "common/lib", y parece que no es necesario quitar las clases del fichero, puesto que es para las versiones 4.0 y tengo la 4.1 según he leido en otro lado.

"Ensure that you have the ocijdbc8.dll or .so in your $PATH or LD_LIBRARY_PATH (possibly in $ORAHOME\bin) and also confirm that the native library can be loaded by a simple test program using System.loadLibrary("ocijdbc8");"

--> no encuentro ningún fichero .jar en el directorio de Oracle, que comience por "oci".

Código:
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/mioracle");
Connection conn = ds.getConnection();
... Y el error me viene a dar en la última línea. Haciendo un System.out de "ds" me arroja: "org.apache.commons.dbcp.BasicDataSource@1295f e8". Un "printStackTrace()" arroja:

Código:
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null', cause:
java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getDriver(DriverManager.java:243)
        at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:743)
        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:518)
        at com.mhpsc.bdOracle.bdOracleDataSource.conectar(bdOracleDataSource.java:45)
        at org.apache.jsp.bd2_jsp._jspService(bd2_jsp.java:44)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:92)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:162)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:240)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:187)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
        at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
        at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
        at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
        at java.lang.Thread.run(Thread.java:595)
Por último, tengo también un ejemplo con "DriverManager" que funciona perfectamente:

Código:
    public boolean conectar( String cadenaConexion, String usuario, String password )
    {

        boolean ok = true;
    
        try {
        
           // Cargar el controlador JDBC
           Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

           // Crear la conexión
           this.conexion = DriverManager.getConnection("jdbc:oracle:thin:" + usuario + "/" + password + "@" + cadenaConexion ); 
           
        } 
        catch (Exception e) {
            ok = false;
        }  

        return ok;
    
    }
... llevo un par de días con esto y uffff

Última edición por MikiBroki; 14/07/2006 a las 03:45
  #2 (permalink)  
Antiguo 14/07/2006, 09:17
Avatar de hugo777  
Fecha de Ingreso: enero-2002
Ubicación: Lima, Perú
Mensajes: 757
Antigüedad: 22 años, 3 meses
Puntos: 1
Hola, me parece que te estas confundiendo con la configuracion, en los pasos que has seguido, estan entre mezclados las configuracion del driver Oracle Thin y el driver Oracle OCI.

Bueno, no tienes que configurar los dos, te serviría uno de ellos para conectarte a Oracle. La diferencia está en que THIN es driver de tipo 4 (puro java) que no necesita del cliente Oracle instalado en la máquina. Mientras que el driver OCI, es un driver de tipo 2 (driver nativo oracle) que requiere del cliente Oracle instalado en la máquina.

El más facil de instalar por ello es el driver Thin, te recomiendo que primero pruebes con ese, sin complicarte con el driver OCI.

Para instalar el dirver Thin, pues sigue los siguientes pasos:

1) Copia el classes2.jar en el directorio $TOMCAT/common/lib y asegurate que tenga permisos de lectura.
2) Configura el DataSource dentro del contexto de tu aplicación web, o en el contexto general (GlobalNamingResources).
3) Enlaza el DataSource a tu aplicación web, a través de tu web.xml (depende del paso 2, si está en el contexto de tu apliación web)
4) Programa la aplicación que recuperará el Datasource del JNDI y lo utilizará.

Recuerda que en Thin, la cadena de conexión (URL) debe empezar con: "jdbc:oracle:thin:"
__________________
Saludos,

H@C..
  #3 (permalink)  
Antiguo 17/07/2006, 03:04
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Hola y gracias... me temo que va a ser que tengo alguna falta de base de algo pues no meto a camino el tema...

1) Copia el classes2.jar en el directorio $TOMCAT/common/lib y asegurate que tenga permisos de lectura. ---> OK . Puntualizar que Oracle 10i trae un "classes12.zip" y un "classes12.jar", he copiado el jar y también he probado con el otro.

2) Configura el DataSource dentro del contexto de tu aplicación web, o en el contexto general (GlobalNamingResources)

server.xml :

Código:
<Resource name="jdbc/mioracle" scope="Shareable" type="javax.sql.DataSource"/>
  <GlobalNamingResources>
    <Environment name="simpleValue" override="true" type="java.lang.Integer" value="30"/>
    <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" scope="Shareable" type="org.apache.catalina.UserDatabase"/>
    <Resource name="jdbc/mioracle" scope="Shareable" type="javax.sql.DataSource"/>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
    <ResourceParams name="jdbc/mioracle">
      <parameter>
        <name>maxWait</name>
        <value>5000</value>
      </parameter>
      <parameter>
        <name>maxActive</name>
        <value>4</value>
      </parameter>
      <parameter>
        <name>password</name>
        <value>mhp</value>
      </parameter>
      <parameter>
        <name>url</name>
        <value>jdbc:oracle:thin:[email protected]:1521:exped</value>
      </parameter>
      <parameter>
        <name>driverClassName</name>
        <value>oracle.jdbc.OracleDriver</value>
      </parameter>
      <parameter>
        <name>maxIdle</name>
        <value>2</value>
      </parameter>
      <parameter>
        <name>username</name>
        <value>SYSTEM</value>
      </parameter>
    </ResourceParams>
  </GlobalNamingResources>
... Dentro del parámetro 'url' he puesto 'exped' que es el nombre la bd y también el del listener... en la documentación pone "(Note: with the thin driver this sid is not the same as the tnsname)"...

Por otro lado tengo la duda de si será algo relacionado con "UserDatabase", ya que accediendo al "Server Administration" aparece (no sé si hay algo que editar ahí):

Código:
Name:     UserDatabase
Location: conf/tomcat-users.xml
Factory:  org.apache.catalina.users.MemoryUserDatabaseFactory
3) Enlaza el DataSource a tu aplicación web, a través de tu web.xml (depende del paso 2, si está en el contexto de tu apliación web)

web.xml :

Código:
<resource-ref>
 <description>Ejemlo Oracle DB</description>
 <res-ref-name>jdbc/mioracle</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
</resource-ref>
4) Programa la aplicación que recuperará el Datasource del JNDI y lo utilizará:

Código:
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/mioracle");
// Connection conn = ds.getConnection();
Y sigue saliendo en la línea del DataSource:

Código:
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null', cause:
java.sql.SQLException: No suitable driver
Gracias de nuevo y disculpen
  #4 (permalink)  
Antiguo 21/07/2006, 05:49
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Bueno, después de haber probado otros métodos, lo he resuelto gracias al siguiente enlace:

http://www.microdeveloper.com/html/J...cl_Tomcat.html

Gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:45.