Código de placa de caldera Java: gestión de conexión

Normalmente tenemos el siguiente código cuando se trata de agrupación de conexiones:

connection c = pool.borrow();
try {
    business-logic-using-connection(c);
}
catch(connectionException e) {
    connectionBad = true;
} 
finally{
    if (connectionBad) {
        pool.evict(c);
    } else {
       pool.return(c);
    }
 }

La pregunta es cómo hacer que este código de placa de caldera sea más simple de modo que se pueda hacer algo como:

getConnectionAndDoWork(pool, business-logic-code)

donde uno puede completar su lógica de negocios y no tener que repetir la misma conexión para administrar el código en todo el lugar. Una forma es crear una interfaz para el código de lógica de negocios, como la doWorkWithConnectionque requiere una conexión y hacer algo de trabajo. Sin embargo, eso restringe el código de lógica de negocios que debe devolver;

¿Hay una mejor manera de hacerlo en Java?

Respuesta 1

Use el patrón de devolución de llamada como Spring usa para la gestión programática de transacciones .

interface PooledConnectionCallback<T> {
  T doWithConnection(Connection c);
}

Pool pool = new Pool(poolParams);
Integer returnedValue = pool.execute(
  new PooledConnectionCallback<Integer>() {
    public Integer doWithConnection(Connection c) {
      int someReturnValue = businessLogicUsingConnection(c);
      return someReturnValue;
    }});

En el Pool#executemétodo, puede tener el código repetitivo que necesita para manejar las excepciones y la limpieza.

Respuesta: 2

Actualmente estoy trabajando en un juego de supervivencia en 2D y quiero generar mi propio problema de terreno personalizado, ¡no sé cómo! Quería hacerlo similar a Minicraft (no Minecraft) donde es plano al azar ...

Estoy tratando de elegir, utilizando Jsoup, el párrafo dentro del siguiente fragmento de HTML: Blockquote <td class = "team team-a"> MyTeam </td> El problema es que, para algunos ...

Estoy tratando de implementar un controlador AWS Lambda en Java. Utilizo esta dependencia en mi pom.xml: <dependency> <groupId> com.amazonaws </groupId> <artifactId> aws-java-sdk -...

Mi organización utiliza una técnica de serialización personalizada, donde almacenamos objetos iterativamente usando una secuencia de salida. Me encuentro con el siguiente problema: las clases padre e hijo implementan Serializable. Padre ...