JDBC x Hibernate em ambiente multhread (não web)

Pessoal,
estou com uma buxa aqui. Tenho um sistema multithread de transferência de arquivos, utilizando um protocolo próprio. A questão é a seguinte, a camada de persistência foi toda feita em Hibernate (mal feita por sinal e posso falar pois participei da implementação hahahaha). Basicamente tinhamos uma classe Database, e vários métodos estáticos responsáveis por fazer as operações no banco de dados. Eu sei que é horrível mas está feito. O que acontece é que agora virou um CAOS. Tivemos vários problemas de concorrência (que foi brilhantemente solucionado colocando um synchronized no método) e agora começou a aparecer uns erros do tipo:

org.hibernate.exception.LockAcquisitionException: could not execute statement

Minha dúvida é a seguinte. Devo continuar no hibernate? Caso positivo alguém teria uma arquitetura para sugerir, levando em conta esse ambiente multithread??
Se eu for para o JDBC, devo seguir algum pattern específico para evitar esses problemas?

Valew

Meu caro,

Como qualquer tipo de API existem prós e contras, e sempre haverá a discussão do que é melhor ou pior.

Em 99% dos meus trabalhos usei o JDBC principalmente pelo controle que eu tenho nos meus SQL, procedures e também nas minhas threads. Você tem mais na “mão” o sistema.

Minha humilde opinão, use JDB.

[]´s

Nilson

É só dar o commit antes de iniciar a proxima transaçao, isso tb acontece com JDBC puro ou trabalhar o Hibernate pra evitar o lock na tabela ;/

Deve continuar no Hibernate. Deve utilizar um Pool de conexões, retirar os métodos static e fazer a coisa do jeito certo.

Static e threads não combinam. Se você vai usar tudo “static synchronized”, então, as threads irão se enfileirar e você nem precisa de várias threads em primeiro lugar.

1 curtida

Mudar para JDBC vai dar o mesmo problema…
Isso está ocorrendo pq como agora está tudo sincronizado (já era as threads) uma outra execução inicia, porém já tem uma rodando. O melhor é tirar os static, e claro tb os synchronized agora.