Tenho uns processos que faço no banco via functions onde crio tabelas temporárias, e preciso ter acesso as mesmas até o fim da sessão do usuário, mas, o spring me provê uma conexão diferente a cada transação e com isso perco o acesso as tabelas temporárias.
Alguém sabe me dizer como faço para que o spring use uma conexão distinta para a sessão do usuário?
A situação é a seguinte, estou desenvolvendo um sistema em java+spring+vraptor sobre um banco de dados(postgres) que está em uso por aplicação PHP e uma aplicação desktop feita em Delphi, e o banco possui functions e procedures que realizam tarefas quando a atualização em algumas tabelas e não gostaria de implementar isso na aplicação.
Também o banco possui triggers de log para cada tabela, onde é gravado no registro de log o id do usuário que fez a operação, esse id é setado pela aplicação no momento da conexão em uma tabela temporária, o problema é que parece que o spring fica alternando a conexão do usuário, e quando isso ocorre as triggers não enxergam a tabela temporária, monitorando os logs percebi que alguns registros tem o id do usuário outros não isso em interações com poucos segundos de intervalo.
o spring vai criar uma session por operação, o que não é necessariamente uma conexão por operação…
se vc configurar um pool de conexões, vc vai ter um numero limitado (tipo 10) que servirá a vários usuários.
se vc quiser muito que seja uma conexão por usuário, você pode configurar o connectionProvider do Hibernate para usar a mesma conexão por usuário, mas lembre-se de dar um timeout para a conexão, senão vc vai segurar recursos do banco à toa.
O ideal é não depender disso. Se for o suficiente ter uma conexão por requisição do usuário, configure o OpenSessionInViewFilter do Spring, que deve resolver o problema.
Voce ta criando e destruindo a tabela na camada Java?
Porque nao cria procedures de banco, pra cria e outra que destroi essas tabelas temporárias?
Ai vc define o momento que quer que elas sejam criadas, e o momento que quer que seja destruídas.
Com isso, independente da sessao ele vai conseguir acessar a tabela