JDBC Datasource en Tomcat

Necesite configurar JDBC Datasource en Tomcat 8.5, con el driver jtds, para una KB GeneXus 16 U3 y el generador Java, con SQLServer.

Siguiendo las instrucciones para configurar el JDBC Datasource para Tomcat 6,  me daba el error:

javax.servlet.ServletException: java.lang.AbstractMethodError: net.sourceforge.jtds.jdbc.ConnectionJDBC3.isValid(I)Z
 at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:874)
 at org.apache.tomcat.dbcp.dbcp2.PoolableConnection.validate(PoolableConnection.java:270)
 at org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:389)
 at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2398)
 at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2381)
 at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2110)
 at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1563)
 at com.genexus.db.driver.GXConnection.connectJDBCDataSource(Unknown Source)
......


Despues de un rato de tratar de entender el error, encontre el articulo 
https://stackoverflow.com/questions/41231750/abstractmethoderror-with-jtds-jdbc-driver-on-tomcat-8


que indicaba que habia que poner la linea 


validationQuery="select 1"
al context.xml.

Entonces, la solucion  ademas de seguir las instrucciones del articulo del wiki, fue poner en el conf/context.xml

<Resource name="jdbc/nombredatasource"
                        auth="Container"
                        type="javax.sql.DataSource"
                        driverClassName="net.sourceforge.jtds.jdbc.Driver"
                        url="jdbc:jtds:sqlserver://maquina:1433/BaseDatos" 
                        username="user"
                        password="********"
                        maxActive="8"
                        maxIdle="4" 
                        validationQuery="select 1" />


Con eso, quedo funcionando. 

Comentarios

  1. Enrique, excelente esto, gracias por compartir.
    Estoy en la misma, y me surge una duda: apagaste el connection pool de GeneXus para activar esto? Según entendí en la doc de Tomcat, definir el datasource activa el connection pool propio de Tomcat... Si es así, no veo que convivan ambos CP en producción, por eso mi duda.
    Gracias!

    ResponderBorrar
    Respuestas
    1. Sebastian:
      Mira el articulo: https://wiki.genexus.com/commwiki/servlet/wiki?4115,JDBC+Datasource+on+JBoss

      Tal vez te ayude.

      Enrique

      Borrar
    2. Muchas gracias Enrique, justo me estaba pasado y con esta linea funciona correctamente.

      Borrar
  2. Buenas tardes.
    me podrian ayudar si existe alguna propiedad dentro del archivo client.cfg la cual quisiera agregarle el nombre de la aplicacion que se conecta.

    ResponderBorrar
    Respuestas
    1. En todos los drivers jdbc que utilice tienen forma de establecer eso en el string de conexión a la base de datos. Alcanza con agregar ahí la información que quieras en el cliente.cfg

      Borrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.