Здравствуйте. Имеется несколько типов:
1) ConnectionPool- тип, отвечающий за получение объектов-соединения Connection с базой данных. Его объект инициализируется и хранится в ServletContext.
public class ConnectionPool {
@Inject
private DataSource dataSource;
private Stack<Connection> pool;
public ConnectionPool() {
this.pool = new Stack<Connection>();
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.closeAllConnections();
}
private synchronized void openNewConnections() {
if (dataSource != null) {
for (int i = 0; i < 10; i++) {
pool.add(dataSource.getConnection());
}
}
}
private synchronized void closeAllConnections() {
for (int i = 0; i < pool.size(); i++) {
Connection connection = pool.pop();
try{
connection.close();
}
catch (Exception ex) {
System.out.println(ex);
}
}
}
public synchronized Connection takeConnection() {
if (this.pool.size() < 2) {
this.openNewConnections();
}
return this.pool.pop();
}
public synchronized void putConnection(Connection connection) {
this.pool.add(connection);
}
}
2)DAO - тип, работающий непосредственно с базой данных. Здесь происходит внедрение зависимости - внедряется объект типа
Connection
.
public class EmailDAO {
@Inject
private Connection Connection
}
Вопрос: Как мне разрешить эту зависимость? Т.е . по сути объекты типа
Connection
, получаемые из метода
ConnectionPool
, должны внедряться в объекты тип
DAO
, и как мне заставить контейнер Weld решать зависимость с помощью объектов, возвращаемых из методов?