Pessoal, estou com um problema em um aplicativo. Vou descrever ele aí embaixo. Me desculpem ser tão formal, mas foi a forma que encontrei de explicar a coisa ao mesmo tempo que detalhes inicialmente desnecessários são abstraídos.
Se alguém pudesse me ajudar, eu ficaria muito grato, pois não tenho a menor idéia de onde procurar o erro.
Considere o seguinte cenário:
- Um servidor tomcat “T”;
- Um aplicativo de login único para várias aplicações (SSO) chamado “L”, colocado em “T”;
- Vários aplicativos em “T” que se utilizam da autenticação provida por “L”;
Um usuário que utilize uma aplicação qualquer em “T” acessa o aplciativo “L”, faz o logon, e então aparece uma lista de ícones dos aplicativos aos quais ele tem direito de acessar. Em seguida, ele clica no ícone do aplicativo desejado, e é direcionado para o tal aplicativo, que já recebe a informação de qual usuário é ele.
Continuando o cenário:
- Entre os aplicativos em “T”, existe um aplicativo interessante chamado “S”. Ele é interessante porque seus usuários são divididos em grupos “G1” a “Gn”, de tal forma que cada grupo “Gi” possui um banco de dados exclusivo “Bi” em um computador “Mi”;
- Além disso, “S” possui um banco que não está associado a nenhum grupo, chamado “BS”, instalado no computador “MS”, com o objetivo de guardar as informações de qual usuário pertence a qual grupo e os dados do banco de dados de cada grupo (ip, senha, etc).
Quando um usuário “u” acessa “S”, este sistema verifica a qual grupo o usuário pertence, monta uma conexão com o banco “Bu” e armazena esta conexão na sessão do usuário “u”. NUNCA MAIS DURANTE A SESSÃO o banco “BS” é consultado, apenas recupera-se a conexão na sessão e busca-se os dados através desta conexão.
O problema:
Em um dado momento, um usuário “u1” de um grupo “G1” acessou uma página do sistema. Esta página apresentava vários dados guardados na sessão, e um dado (e apenas um dado) veio do usuário “u2” do grupo “G2”. Mas todos os outros dados na página vieram corretamente de “G1”. No código da aplicativo, na parte em que os dados são buscados do banco e colocados na sessão, a conexão é buscada apenas uma vez, e utilizada para a obtenção de todos os dados. Como que apenas um viria do banco de dados errado?
Alguém tem alguma sugestão do que poderia estar causando o problema?