pool de conexiones static o no static?
Buenas tengo una duda , he creado un datasource en el JBoss, y en mi clase tengo esto, pero tengo una duda al momento de abrirla tengo que instanciar la clase conexion , cual es la diferencia si es declarada como static y en lugar de instanciarla donde se vaya a usar , esto afectaria en el performance?, les agradezco su consejo y orientacion
package com.App2.conn;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class ConexionJNDI {
private static DataSource datasource = null;
public ConexionJNDI() throws Exception{
try {
Context ctx = new InitialContext();
datasource = (DataSource) ctx.lookup( "java:/MyDBDS" );
if ( datasource == null )
{
String message = "Could not find our DataSource in MyDBDS. We're about to have problems.";
System.err.println("*** " + message);
throw new Exception(message);
}
} catch (NamingException e) {
e.printStackTrace();
}
}
/**
* Dole out the connections here.
*/
public static synchronized Connection getConnection()
throws SQLException
{
return datasource.getConnection();
}
/**
* Must close the database connection to return it to the pool.
*/
public static synchronized void cerrarConexion(Connection connection)
{
try
{
connection.close();
}
catch (Exception e)
{
System.err.println("MyDBDS: Threw an exception closing a database connection");
e.printStackTrace();
}
}
}
- Inicie sesión o regístrese para enviar comentarios
datasource
el datasource solo es necesario que lo recuperes una ves , puede ser estatico y tus métodos también ,pero lo has hecho de la manera equivocada , una mejor opcion es inicializar el datasource en un bloque estatico y te olvidas del tema de tener que instanciarlo o no , en cuanto a tus métodos de abrir y cerrar no tienen por que ser sincronizados el método:
es thread safe .
Como lo recuperas una ves?
Como lo recuperas una ves? julgo , gracias por tu amable respuesta, yo lo tengo en una clase asi:
Y para usarlo en alguna clase lo pongo asi:
Espero lo este empleando bien, les agradezco sus comentarios
Gracias
cambia esto public static
cambia esto
por esto:
el lookup ponlo en el inicializador estatico -> static { //todo lo que inicializas una ves }
Me quedo asi julgo:
Me quedo asi julgo:
Espero asi este mejor, en espera de sugerencias
Gracias
ultimo
ya pero saca
no se por que lo tienes y peor aun es static, ten cuidado con compartir las conexiones.
creo que no lo necesitas , aver revisalo y comentas para que a alguien mas le sirva.
y lo ultimo ya seria que investigues que uso tiene
Que tal julgo lo deje asi
Que tal julgo lo deje asi
Espero asi no comparta conexiones, en espera de comentarios
Gracias nuevamente