Ai pessoal, será que alguém poderia me dar uma ajudinha.
É o seguinte
eu estou desenvolvendo uma aplicação que vai receber alguns dados de um usuário, porém para que esse usuário se permaneça logado eu preciso de conferir de tempos em tempos se ele fez chamada a um método.
Estou pensando em fazer o seguinte colocar uma variável que guarde a hora em que foi feito a chamada ao método. De tempos em tempos um método meu verifica se a última chamada àquele método foi feita em um tempo maior do que um padrão que eu especifico, se foi feito em tempo maior eu inválido o login do usuário e ele precisa se relogar.
Gostaria de frisar que essa aplicação é standalone e não web por isso não uso sessions.
E gostaria de ver também se existe uma forma mais fácil de fazer isso. Se essa for uma forma interessante, por favor me passem dicas de como trabalho com “horas” pois estou meio perdido nisso.
Bem, se sua aplicacao nao eh web, sem session, fica tudo mais facil, pois a aplicacao java nao eh compartilhada por varios usuarios. Entao basta guardar as informacoes em atributos de classe mesmo, em algum singleton, ou ate em um attributo static da sua classe mesmo.
Para ver o intervalo eu aconselho que voce utilize o metodo System.currentTimeMillis() . Entao a cada chamada bem sucedida voce poderia gravar esse valor em uma variavel e depois realizar uma subtracao simples para ver a diferenca:
public class teste {
static long chamada = System.currentTimeMillis() ;
public void metodo() {
long new = System.currentTimeMillis() ;
if ( (new - chamada ) > 60000) { // 60 segundos
return;
}
// realiza tarefa
chamada=System.currentTimeMillis() ;
}
}
Sem duvida nenhuma, se o java suportasse melhor aspectos (espero que venha a ser, sem ferramentas externas como aspectj) o seu problema seria um excelente canditato a um aspecto, ainda mais se o mesmo padrao de comportamente fosse seguido por varios metodos em seu sistema.