Sou analista cobol e estou migrando um sistema inteiro para java. Como sou novato nessa linguagem, peço uma dica a vocês:
No cobol, se declaro uma variável como tipo “EXTERNAL” num programa, posso declará-la da mesma forma e nome em um outro programa e nos dois estarão apontadas para o mesmo endereço de memória. Ou seja, atribuo um valor a ela num programa e leio/altero em outro.
Costumo usar isso da seguinte forma:
Quando o usuário se “loga” no sistema, busco informações dele num BD e registro nessas variáveis EXTERNALs tudo que ele pode ou não acessar no aplicativo. Veja: no programa principal, depois de logar, algo como “podeAlterarTaxa = true”. E no JInternalFrame que permite a alteração da referida taxa, preciso saber o conteúdo de podeAlterarTaxa para decidir a permissão.
Único jeito que encontrei até então, foi passar parâmetros. Gostaria de ter que fazer isso. Alguém pode me dar alguma sugestão?
Se estiver utilizando Servlets/JSP voce pode armazenar isso na sessao do usuario (HttpSession) ou no contexto da aplicacao se for algo global e comum a todos os usuarios da aplicacao (ServletContext).
Para uma aplicacao J2SE “normal”, digamos assim, voce poderia ter uma classe que armazenasse tudo isso de maneira estatica, dessa forma nao precisaria passar referencias (parametros) para recuperar as informacoes. Acho que, em geral, isso nao eh legal em termos de design, mas eh uma opcao.
Aff - consegui editar e sobrescrever minha mensagem anterior. :mrgreen:
Uma outra sugestao poderia ser armazenar as permissoes do usuario num objeto User por exemplo e armazenar esse objeto no Frame. Dessa forma voce tem as informacoes no momento em que precisar:
if (getUser().getPermissao()) {
// pode
} else {
// nao pode
}
O problema de “System.setProperty” e “System.getProperty” é que as alterações são restritas à JVM que executou essa rotina. (É parecido com gravar dados em arquivos, onde o arquivo acaba ficando local a uma máquina).
Se por exemplo você tiver um sistema em cluster, com vários processadores (e várias JVMs) rodando o mesmo sistema, isso não vai funcionar direito. Se você atribuir os dados ao objeto session ou application, o software de clusterização irá distribuir a sessão corretamente, tornando o dado verdadeiramente “global”.