Olá,
Preciso fazer um classe, que rode a cada minuto para verificar uns dados no banco de dados.
Estou usando Timer e Timer Task para fazer isso.
Mas acontece um erro. vou mostrar o cenario abaixo.
BloqueioAcessoUsuario.java
[code]import java.util.Timer;
import java.util.TimerTask;
import br.com.vetoreditora.psiconline.dao.UserDao;
import br.com.vetoreditora.psiconline.models.Usuario;
@SuppressWarnings(“unused”)
public class BloqueioAcessoUsuario {
public static long TEMPO = (1000 * 60);
public static void main(String[] args) {
Timer timer = null;
if (timer == null) {
timer = new Timer();
TimerTask tarefa = new TimerTask() {
@SuppressWarnings("null")
public void run() {
try {
UserDao userDao = null;
Long id = 4L;
userDao.updateByRole(id);
System.out.println("USUARIO BLOQUEADO POR TEMPO EXPIRADO!");
} catch (Exception e) {
e.printStackTrace();
}
}
};
timer.scheduleAtFixedRate(tarefa, TEMPO, TEMPO);
}
}
}[/code]
UserDaoHibernate.java
[code]public class UserDaoHibernate extends GenericDaoHibernate<Usuario, Long>
implements UserDao {
final Logger logger = LoggerFactory.getLogger(GenericDaoHibernate.class);
protected Class<Usuario> persistentClass;
@SuppressWarnings("unchecked")
public UserDaoHibernate() {
logger.debug("Iniciando DAO Genérico \"GenericDaoHibernate()\"...");
persistentClass = (Class<Usuario>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
public UserDaoHibernate(final Class<Usuario> persistentClass) {
logger.debug("Iniciando DAO Genérico \"GenericDaoHibernate"
+ "(Class<T>)\"...");
this.persistentClass = persistentClass;
}
public void updateByRole(Long id) throws DataAccessException {
try {
getHibernateTemplate().update("String de update que estou usando", id);
} catch (Exception e) {
System.out.println(e);
}
logger
.debug("Entidade [{}] removida através da chave primária [{}]");
}
}[/code]
O erro é este:
java.lang.NullPointerException
at br.com.vetoreditora.psiconline.web.BloqueioAcessoUsuario$1.run(BloqueioAcessoUsuario.java:29)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Tentei algumas outras formas, mas nao obtive sucesso.
Obrigado desde já
Olá…
Bem, pelomenos aqui em Goiânia, quando a gente declara uma referencia como null, tenta acessar essa referencia dá NullPointerException, rs!
...
UserDao userDao = null;
Long id = 4L;
userDao.updateByRole(id);
...
}
Basta você passar uma referencia valida para o UserDao que esse problema some. =]
[]'s
JL
Bom, pelo menos aqui em uberlândia a gente lê direito a dúvida das pessoas, e se não conseguimos solucionar o problema delas tentamos ajudar de alguma forma, mas NUNCA criticando o erro.
Pelo que vi, a sua classe UserDaoHibernate implementa a interface UserDao, e é nessa interface que vc faz a assinatura do método updateByRole,
porém vc faz a implementação desse método na classe UserDaoHibernate, sendo assim na classe BloqueioAcessoUsuario dentro do método run() ao invés de vc fazer UserDAO userDao = null, faça, UserDaoHibernate userDaoHibernate = new UserDaoHibernate(); pois é na UserDaoHibernate que vc implementa e codifica o método updateByRole. Qualquer outra dúvida poste aí
Fala phfaustino tudo bem contigo?
Não sei o porque de vc precisar verificar a cada minuto o Usuario, mas porque vc não usa Listener ?
Cada vez que vc clica em algum link ele dispara, ai vc pode redirecionar e fazer as suas verificações e não vai precisar ficar fazendo verificações a cada minuto.
Espero ter ajudado
Abraços
jomello_br essa implementação é do dugbuddy
mas também acho que um Listener ficaria bom também… discuti ai com ele ;D
Abraço
Ai em goiania ou em uberlandia vcs nascem com calça ??
Pois entao amigos, todos nos estamos aprendendo , por isso aqui é um forum … mas msm assim valeu pela dica… =] 8)
phfaustino e jomello_br eu estou na verdade tentando usar como se fosse uma procedure… para expirar o login te centenas de cadastro …
Ex… todos os que foram cadastrados a 2 dias atras… vao perder o acesso… mais ou menos isso…So que os cadastros vao acontecer durante todo os dias e todos os meses…
deu pra entender mais ou menos? rs
abracos…
Como disse antes eu acho que o Listener recolve seus problemas, caso vc tenha um controle de usuario usando session, basta verificar os dados dos cadastros e se não atender os criterios mande uma mensagem de erro e redirecione para a pagina principal e/ou login.
Alem disso vc pode fazer essas mesmas verificações logo no momento em que o usuario faz sua autenticação e não dar acesso caso não atenda os criterios.
Abraços
Jomello
sim dugbuddy, deu pra entender… mas e agora? funcionou?
[]'s
Quero aqui pedir desculpas se na brincadeira que fiz ofendi alguém, em especial o dugbuddy.
Grande abraço.
JL