Criação de Pool de conexões no DAO

Olá, tudo bom?

Estou com uma questão um tanto polêmica para mim, pelo menos.
Desenvolvi uma camada DAO, criei o Factory, os DAOs, os Value Objects.
Bom, Estou utilizando hibernate e utilizando o pool de conexões deste.
Quando eu uso o DAO junto com o TomCat, eu uso o HibernatePlugin.java
para setar no contexto o SessionFactory.

Então, nos Actions eu faço o seguinte:


	DAOFactory hibernateFactory = DAOFactory.getDAOFactory();

	SessionFactory sessionFactory = (SessionFactory )this.getServlet().
		getServletContext().getAttribute(HibernatePlugin.SESSION_FACTORY_KEY);

	// passando o sessionFactory que JÁ contém o pool de conexões, que foi criado quando da
	// inicialização do TomCat no HibernatePlugin
	ManagerDAO managerDAO = hibernateFactory.getManagerDAO(sessionFactory); 

	try
	{
		ArrayList list = managerDAO.listUsers(...);
	}
	catch (...)
	{
		...
	}

Até aqui tudo jóia, pois o pool de conexões já está inicializado e está sendo
compartilhado pelos usuários.

Agora estou com dúvida em relação a usar o pool de conexões, por exemplo,
em diversas Threads.

Então, estão fazendo as Threads com seus construtores e estes Construtores fazem o seguinte:

/**
 * Constructor of Thread
 *
 */
public ThreadName()
{
	hibernateFactory = DAOFactory.getDAOFactory();
	managerDAO = hibernateFactory.getManagerDAO();// aqui eu crio o pool de conexões, pegando do cfg.xml
}

No código acima, no getManagerDAO() é onde eu pego o XML para iniciar o pool de conexões
do hibernate, que é diferente de como estou utilizando junto com TomCat, onde eu passo
o SessionFactory (já com o pool de conexões) como parâmetro no getManagerDAO.

Outro problema seria, tendo várias threads, onde cada uma tem seu pool de conexões.

No Core J2EE Patterns tem o seguinte exemplo para criação da conexão (createConnection),
onde se pode criar a conexão, o pool de conexões (que está sendo feito nas threads)
ou usar um pool de conexões (que está sendo feito com TomCat)

[code]
// Cloudscape concrete DAO Factory implementation
import java.sql.*;

public class CloudscapeDAOFactory extends DAOFactory
{
public static final String DRIVER=
“COM.cloudscape.core.RmiJdbcDriver”;
public static final String DBURL=
“jdbc:cloudscape:rmi://localhost:1099/CoreJ2EEDB”;

// method to create Cloudscape connections
public static Connection createConnection()
{
// Use DRIVER and DBURL to create a connection
// Recommend connection pool implementation/usage
}

public CustomerDAO getCustomerDAO()
{
// CloudscapeCustomerDAO implements CustomerDAO
return new CloudscapeCustomerDAO();
}

public AccountDAO getAccountDAO()
{
// CloudscapeAccountDAO implements AccountDAO
return new CloudscapeAccountDAO();
}

public OrderDAO getOrderDAO()
{
// CloudscapeOrderDAO implements OrderDAO
return new CloudscapeOrderDAO();
}

}
[/]

Gostaria de saber como eu criaria um Pool de conexões ou as maneiras corretas de se criar
um pool de conexões, tanto para WEB, ou para uso de outros tipos de aplicações, como
no caso das Threads.

Muito obrigado,

Abraço

Olá,

Encontrei uma solução, não sei se a ideal, mas que resolve a questão
do compartilhamento do pool de conexões por diversas Threads.

Eu criei uma classe com um um método (mais ou menos parecido com o usado no HibernatePlugin, no TomCat) que retorna o SessionFactory.
Este irá startar as threads que passam a usar o mesmo SessionFactory acima.

Valew

Abraço