2012-02-17 18 views
10

Acabo de empezar a usar BoneCP y extraje el código de muestra JDBC del sitio de los autores.Uso correcto de BoneCP

tengo una función llamada getConnection() que devuelve una conexión aquí es un fragmento:

// setup the connection pool 
BoneCPConfig config = new BoneCPConfig(); 
// Config goes here. 
connectionPool = new BoneCP(config); // setup the connection pool 

return connectionPool.getConnection(); // fetch a connection 

Ahora, mis preguntas: 1) ¿ llamo connection.close() cuando he terminado con el conexión que se devuelve desde la función anterior para que se devuelva al grupo O ¿cierra esto la conexión por completo? ¿Cómo devuelvo la conexión al grupo?

2) ¿Cómo limpiar el grupo al salir de la aplicación? ¿Llamo a connectionPool.shutdown() cuando estoy terminando? Y también, ¿leí en alguna parte que necesito cerrar todas las conexiones agrupadas individualmente? ¿Es esto cierto?

Gracias.

Respuesta

17

1. Siempre llame al connection.close() para devolver la conexión a la piscina (no se cerrará físicamente) cuando haya terminado con ella.

2. llamada connectionPool.shutDown() cuando está completamente terminado con la piscina y no la planificación de volver a conectar de nuevo.

1
Connection connection = dbPool.getConnection(); 

El objeto Connection obtenido del grupo, es una clase contenedora. Mantendrá la conexión subyacente correctamente incluso en la excepción .

Incluso en las excepciones relacionadas con la conexión, por ejemplo, TERMINATE_ALL_CONNECTIONS, el grupo BoneCP cerrará correctamente todas las conexiones subyacentes.

En resumen, el grupo BoneCP hace que el caché sea transparente. Del lado del cliente sólo necesita seguir el flujo de soporte,

  1. solicitud de la conexión (tomar la conexión desde la piscina, piscina decidirá si reutilización/crear uno)
  2. solicitud PreparedStatement/CallableStatement (reutilización el objeto de la piscina si está activado)
  3. ejecutar las sentencias
  4. estrecha declaración, (liberar el objeto de declaración a la piscina si está activado)
  5. estrecha relación, (suelte el objeto de conexión a la piscina)

Cuando parada aplicación, apagar la piscina para liberar todas las conexiones almacenadas en caché.

boneCP.shutdown() 
+0

Me pregunto si mi servidor se bloquea y tengo que reiniciar, ¿cómo borro las conexiones que no se lanzaron desde que nunca se llamó al apagado? – PixMach

+0

BoneCP los entregará correctamente. Para dejar en claro, BoneCP es más como un agente para administrar las conexiones por usted. "prestas" la conexión desde allí, solo necesitas recordar "regresar". El BoneCP cuidará de todas las demás cosas tediosas relacionadas con la gestión del ciclo de vida de la conexión. –

+0

Esto es genial de saber, pero todavía se siente extraño cerrar el objeto Connection, que se parece a un objeto Connection real en un vistazo al código BoneCP. ¿De alguna manera puedo ver esto? conexión pública getConnection() arroja SQLException {// compiled code} – mikato