Minha App, classe Singleton? (como vc faz?)

Buenas pessoal…

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.

Sua aplicação é web? Se for, basta guardar o objeto na sessão.

[editado]
Sérgio, desculpe-me, postamos ao mesmo tempo 8)
[/editado]

ops,

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=dooda]ops,

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.

hmm,

Foi além do meu conhecimento… :oops:
UIOSHoIUSHoIUSHiuoSH

vou dar uma pesquisada…

Obrigado!!
Grande abraço!