UserDao + Timer Task

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í :smiley:

Fala phfaustino tudo bem contigo? :slight_smile:

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 :smiley:
mas também acho que um Listener ficaria bom também… discuti ai com ele ;D
Abraço :slight_smile:

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