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

Pool conexiones sin utilizar ctx.lookup

Estas en el tema de Pool conexiones sin utilizar ctx.lookup en el foro de Java en Foros del Web. Hola, no se si esto es posible o no pero lo pregunto por si acaso. La idea es establecer una conexion a una BD mediane ...
  #1 (permalink)  
Antiguo 12/09/2005, 19:54
msi
 
Fecha de Ingreso: marzo-2005
Mensajes: 70
Antigüedad: 19 años, 2 meses
Puntos: 0
Pool conexiones sin utilizar ctx.lookup

Hola, no se si esto es posible o no pero lo pregunto por si acaso. La idea es establecer una conexion a una BD mediane un pool de conexiones. Por lo que he visto está la manera tradicicional de conectar a una BD:

Class.forName("org.gjt.mm.mysql.Driver").newInstan ce();
con = DriverManager.getConnection("jdbc:mysql://localhost/DATABASE?user=X&password=Y");

Y luego está el pool de conexiones con DataSource (que se supone mejor):

Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("jdbc/confluence");
Connection con = ds.getConnection("myUserName", "myPassword");


poniendo en web.xml:

<resource-ref>
<description>Connection Pool</description>
<res-ref-name>jdbc/confluence</res-ref-name>
<res-type>javax.sql.Datasource</res-type>
<res-auth>Container</res-auth>
</resource-ref>


y poniendo en server.xml de Tomcat:

<Resource name="jdbc/confluence" auth="Container" type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/confluence">
...
<parameter>
<name>username</name>
<value>yourusername</value>
</parameter>
<parameter>
<name>password</name>
<value>yourpassword</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/DATABASE</value>
</parameter>
</ResourceParams>


Según he visto, al escribir esta línea: DataSource ds = (DataSource) ctx.lookup("jdbc/confluence"); es obligatorio añadir unas líneas al fichero server.xml de Tomcat pero ¿Se puede crear el pool de conexiones sin utilizar el ResourceParams en server.xml? Imaginad que tenemos una aplicación web en un hosting de pago y no podemos tocar el fichero server.xml de tomcat.

No he encontrado solución (igual no la tiene) aunque he leido que se podría utilizar un fichero.properties y a partir de él sacar los parámetros:
driver=org.gjt.mm.mysql.Driver
url=jdbc\:mysql\://localhost/DATABASE
user=X
password=Y


Supongo que todo el mundo podrá modificar el server.xml pero he estado investigando unas horas para ver si es posible otra opción y no la he encontrado.

Si sabeis otras formas de crear pools de conexiones, aquí estaré para aprender.
  #2 (permalink)  
Antiguo 12/09/2005, 21:09
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
Claro que se puede, Struts por ejemplo nos da una forma sencilla de hacerlo sin tocar el server.xml, tan solo el strut-config.xml

La forma es muy similar a la anterior

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #3 (permalink)  
Antiguo 13/09/2005, 11:57
msi
 
Fecha de Ingreso: marzo-2005
Mensajes: 70
Antigüedad: 19 años, 2 meses
Puntos: 0
Gracias por el interés y por la respuesta. Estoy usando Struts y su pool de conexiones pero me he encontrado algunos casos donde no puedo usarlo (o igual no se hacerlo). Estos casos me vienen por intentar separar y estructurar mejor las capas. Me explico:

He leido que es mejor no hacer las llamadas a la BD directamente en la clase Action y dejar estas acciones a otra clase. Así, tengo una clase donde hago las llamadas a la BD:

public class MacrocicloDAO {

private DataSource dataSource = null;

public MacrocicloDAO(DataSource dataSource){
this.dataSource = dataSource;
}

public ArrayList RecuperarTemporadas(String dni) throws SQLException, Exception{
....
campo = rs.getString("CONINDATA");
HashMap cconindata = util.RetornaMapaConIndAta(campo);
...
}

Así en la clase Action puedo usar sus métodos con el pool:
...
MacrocicloDAO DAO = new MacrocicloDAO(getDataSource(request,"DataBase"));
listatemp = DAO.RecuperarTemporadas(dni);
...


Esto funciona perfectamente pero si un método del DAO es muy largo o bien un trozo de código se tiene que repetir muchas veces, he decidido separarlo en un método en otra clase común y así tenerlo una vez pero poder utilizarlo muchas veces (supongo que así estructuro mejor la aplicación). Por ejemplo, tengo una clase Util:

public HashMap RetornaMapaConIndAta(String campo) throws SQLException, Exception{
....
}


Es decir, en método del DAO puedo actuar sobre la BD ya que tengo abierto el pool de conexiones que se abrió en el Action pero si dentro del método DAO quiero utilizar otro método (que está fuera de la clase DAO) tengo que abrir una nueva conexión o crear un nuevo pool.

Se que todo me viene de esta instrucción: getDataSource(request,"DataBase") ya que en el Action puedo usar ese request gracias al HttpServletRequest request que viene como parámetro del Action. Pero claro, en la clase DAO ya no tengo ese parámetro (o por lo menos no me funciona) y tengo que buscarme una nueva forma de crear el pool.

Resumiendo, no es que tenga problemas ya que crearé el pool en server.xml de tomcat . Es sólo que estoy en estado de aprendizaje, he perdido una horas con esto y quería saber alguna opinión más.

Un saludo y que ¡viva Struts!.
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 07:30.