Задать вопрос
Этот вопрос закрыт для ответов, так как повторяет вопрос Как правильно сделать транзакцию с JDBC, чтобы не нарушить паттерн DAO?
@Biaci_Anj

Как правильно работать с транзакциями в Service layer, используя JDBC ( без Hibernate и Spring )?

У меня есть метод, который обращается к двум DAO
void setStatusDeclinedAndRefund() {
// sets Order status to DECLINED
// refund money to user's balance
}


Я его расположил на уровне сервиса, а как же мне его теперь выполнить в транзакции?

Неужели единственный выход это передавать Connection как аргумент ко всем методам DAO, чтобы доставать connection из пула в сервисе и давать DAO?

P.S.

Это класс, из которого я беру Connection ( много кода, главное, что хотел показать, что использую ComboPooledDataSource ).

public class DBManager {
  private static DBManager instance;
  private ComboPooledDataSource cpds;

  /**
   * Singleton.
   */
  public static synchronized DBManager getInstance() {
    if (instance == null) {
      instance = new DBManager();
    }
    return instance;
  }

  private DBManager() {
    try {
      init();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * Create pool.
   *
   * @throws Exception the exception
   */
  private void init() throws Exception {
    createPool();
  }

  /**
   * Establishes a connection to the database.
   *
   * @return the connection to the database
   */
  public Connection getConnection() {
    Connection conn = null;
    try {
      conn = this.cpds.getConnection();
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return conn;
  }

  /**
   * Closes the connection.
   *
   * @param conn closes the database connection
   */
  public void closeConnection(Connection conn) {
    try {
      conn.close();
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }

  /**
   * Gets utils properties.
   *
   * @return the databases properties
   * @throws IOException by failed or interrupted I/O operations.
   */
  private Properties getProperties() throws IOException {
    Properties props = new Properties();
    props.load(DBManager.class.getResourceAsStream("/db.properties"));
    return props;
  }

  /**
   * Create a pool.
   *
   * @throws Exception the exception
   */
  private void createPool() throws Exception {
    Class.forName("org.postgresql.Driver");
    Properties props = getProperties();
    cpds = new ComboPooledDataSource();
    cpds.setDriverClass(props.getProperty("driver"));
    cpds.setJdbcUrl(props.getProperty("url"));
    cpds.setUser(props.getProperty("user"));
    cpds.setPassword(props.getProperty("password"));
    cpds.setMaxStatements(180);
  }

}
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Сложный
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы
19 дек. 2024, в 02:11
15000 руб./за проект
19 дек. 2024, в 02:09
11000 руб./за проект
19 дек. 2024, в 00:46
30000 руб./за проект