У меня есть метод, который обращается к двум 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);
}
}