Dae galera… eu estou tendo o seguinte problema…
Tenho um DAO que extende uma classe utilitária… que possui métodos como getAutoIncrement para gerar a id entre outras coisas…, criei uma classe para transação e sempre que quero que o DAO pego a conexão da transação eu faço dao.setTransaction(transacao); o problema é o seguinte… o meu DAO ele é declarado assim:
[code]
public class DocumentoDAO extends ALBaseDAO {
private static DocumentoDAO instance = new DocumentoDAO();
public synchronized static DocumentoDAO getInstance() {
if( instance == null ) instance = new DocumentoDAO();
return instance;
}
...[/code]
Tá… e a classe ALBaseDAO tem o seguinte trecho de código…
[code]public long getAutoIncrement(String table, String rowNameMax, HashMap<String, String> mpDMLWhere) throws Exception {
long returnId = 0;
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
ALConnection alConection = new ALConnection();
// Verifica se foi aberto uma transação
if (isTransaction()) {
conn = transaction.getConn().getConnection();
} else {
alConection.load();
conn = alConection.getConnection();
}
…[/code]
O método isTransaction chamado aqui verifica se o cara definiu o DAO como transacional ou não… o problema é que outros DAOS que estão sendo executados ao mesmo tempo… estão alterando a mesma referencia… ou seja, mais de um usuário estão acessando a mesma instancia do DAO e um chamando um método que não é transacional e outro chamando um método que é… dae o que acontece? Um alterando a referencia do outro…
Esse sistema será acessado por mais ou menos 300 pessoas… e queria uma ajuda de vcs como eu poderia resolver isso… com métodos synchronized? Ou instancio cada DAO a cada operação? Se eu instanciar o DAO a cada operação isso não poderá derrubar o servidor? Pois vão ser em média 300 acessos simultaneso…
Ah… Hibernate não pode ser usado nesse projeto por restrição mesmo… então tive que fazer em JDBC… só que agora me deparei com esse problema…Algume teria alguma ideia de como fazer isso?