mardi 8 février 2022

Trying to identify a design pattern or strategy used to isolate, utilize, and manage database connections

I ran into some code and I wanted to research other people's approaches to it, but I'm not sure what the design pattern is called. I tried searching for "database executer" and mostly got results about Java's Executor framework which is unrelated.

The pattern I'm trying to identify uses a single class to manage connections and execute queries through the use of functions that allow you to isolate any issues related to connection management.

Example:

// Service class

public Service {
  private final Executor executor;

  public void query(String query) {
    ResultSet rs = (ResultSet) executor.execute((connection) -> {
      Statement st = connection.createStatement();
      return st.executeQuery(query);
    });
  }
}

// Executer class

public Executer {
  private final DataSource dataSource;

  public Object execute(Function function) {
    Connection connection = dataSource.getConnection();
    try {
      return function(connection);
    } catch(Exception e) {
      log...
    } finally {
      // close or return connection to pool
    }
  }
}

As you can see from above, if you ever have a connection leak you don't need to search through a bunch of DAOs or services, it's all contained in a single executor class. Any idea what this strategy or design pattern is called? Anyone see this before or know of open source projects that utilize this strategy/pattern?

Aucun commentaire:

Enregistrer un commentaire