Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/02/2013, 14:23
Avatar de fegm_4
fegm_4
 
Fecha de Ingreso: febrero-2013
Mensajes: 114
Antigüedad: 11 años, 1 mes
Puntos: 8
Pregunta Problema con el pool de conexiones en una aplicacion de escritorio

Actualmente estoy creando una aplicación java de escritorio usando una base de datos que tengo alojada en un servidor que he contratado. Leyendo las recomendaciones, decidí usar un pool de conexiones para el acceso a la información debido a que la aplicación la usaran varios equipos a la vez.

Ahora bien, la configuracion del pool la he colocado en un archivo .properties y es de la siguiente manera

Código:
driverClassName=com.mysql.jdbc.Driver
username=user
password=mypass
url=jdbc:mysql://www.domain.tk:3306/mydb
validationQuery=select 1
initialsize=4
maxSize=20
createWaitTime=100
Y tengo un metodo en el frame principal que se llama initDataSource que establece el valor de DataSource de acuerdo al archivo properties. Lo muestro a continuación:
Código:
private void initDataSource(){
        Properties propiedades = new Properties();
        try {
            propiedades.load(new FileInputStream("src/Auxiliary/poolsettings.properties"));
            dataSource = BasicDataSourceFactory.createDataSource(propiedades);
            connPool.setDataSource(dataSource);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null,
                        "No se ha podido establecer la configuración del pool \n"+ex,
                        "Aplicacion.- ", JOptionPane.ERROR_MESSAGE);
        }
    }


Al momento de crear la primera conexión, lo hace muuuy lento, alrededor de 1 min, el cual en tiempo de programación es muchísimo a mi parecer. Hice las pruebas y el problema se da en la clase de consulta, específicamente en la linea en la cual se obtiene la conexión (conn = dataSource.getConnection();)

Código:
public int getIDuser(String username, String password) {
        Connection conn = null;
        int idUser = 0;
        try {
            conn = dataSource.getConnection();
            String SQLquery = "SELECT idUser FROM tblusers WHERE strUsername LIKE BINARY '" + username + "' AND strPassword=MD5('" + password + "')";
            ResultSet rs;
            PreparedStatement pstmt = conn.prepareStatement(SQLquery);
            rs = pstmt.executeQuery();
            if (rs.next()) {
                idUser = rs.getInt("idUser");
            }
            rs.close();
            pstmt.close();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Ha ocurrido un error en la obtención de idUser: \n" + ex,
                    "Aplicacion.-", JOptionPane.ERROR_MESSAGE);
        } finally {
            setFreeConection(conn);
        }
        return idUser;
    }
El metodo setFreeConection cierra la conexion de la siguiente manera:

Código:
private void setFreeConection(Connection conn) {
        try {
            if (null != conn) {
                // En realidad no cierra, solo libera la conexion.
                conn.close();
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Ha ocurrido un error en el cierre de la conexión: \n" + ex,
                    "Aplicacion.-", JOptionPane.ERROR_MESSAGE);
        }
    }
¿Qué podría estar haciendo mal? ¿Tendría que hacer algo extra al iniciar el programa? Agradezco mucho quien pueda ayudarme