Estou a implementar uma app estilo ERP, onde os cadastros são unificados e
os movimentos são por empresa, então ao abrir o sistema o cara informa um usuário
e uma empresa e trabalha normalmente… ate aí blz…
Notei que por vários lugares, eu preciso deste “usuario logado” e “empresa logada”
para operações internas e verificações etc…
:arrow: Como implementar isso de maneira elegante?
Eu pensei em criar uma classe Singleton que possuisse alguns objetos (usuário, empresa) e
métodos uteis…
Pensei ainda, em chamar metodos como BeginTransacation, Commit, Rollback, por esta classe,
(visto que uso hibernate e não quero ficar “espalhando” getSession por todo lugar…)
Ou também o objeto logger…
Alguem me sugere como tratar bem essa situação?
Grande abraço!!!
Singleton não é feito para o que vc quer. O que vc quer é um objeto global, um objeto partilhado e acessivel de qualquer ponto da aplicação. O que vc quer é um Shared Object ( Objeto Partilhado)
Existem várias formas de fazer isso dependendo da arquitetura da sua aplicação.
Se a aplicação é wbe vc pode criar um objeto e mantê-lo no session. Dentro desse objeto vc coloca o usuário corrente , emmpresa etc. Quando vc invocar métodos de serviço vc tem que passar esse objeto. Esse tipo de objeto segue o padrão Context Object ( Objeto de Contexto). Vc pode ainda usar a tecnica de colocar o objeto na thread usando a class InheritThreadLocal isso permite que seja chamado em qualquer ponto , mesmo dentro das classe de dominio , contudo o objeto ainda tem que ser colocado na thread em algum ponto por um servlet ou filtro.
Esqueci de dizer que essa aplicaçao não é web, é desktop+swing…
Então, como poderia ser feito em desktop?
com esse conceito Shared Object, sem singleton…?
Abraço![/quote]
Nesse caso vc pode utilizar um objeto Registry e colocar o seu objeto de contexto lá, para fazer as vezes do session.
Um registry é uma classe não instanciável e não herdável com métodos estáticos. Um set/getContext bastaria no seu caso.
Ainda pode utilizar a técnica da thread se quiser. Pelo menos isso deixaria o seu dominio compativel com qualquer ambiente.