Problema no contextInitialized()

Olá pessoal, fiz um loop que capture de minuto em minuto um valor do contexto da aplicação, para isso, no método contextInitialized() de minha classe listener, instanciei o objeto que contém o loop, quando ele entra no loop ele pára de iniciar a aplicação, e ela tranca aí, fazendo com que a aplicação fique inacessível , acredito que seja porque o loop seja infinito.

Bom gostaria que me ajudassem a resolver esse problema, visto que preciso que esse objeto fique na memória e fazer com que capture esse valor de minuto em minuto.

Valeu!

Salve,

Tu estás utilizando o operador cast para este objeto?? Bem post o código aí, de teu listener e de deu objeto.

:pensativo:

ok, aí vai a classe listener e a classe que é chamada por ela…

package uteis;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import java.util.*;

public class ContaUsuariosSessao 
	implements ServletContextListener, HttpSessionListener
{
  
	ServletContext servletContext;
	public static int cont = 0;

	public void contextInitialized(ServletContextEvent sce){
		servletContext = sce.getServletContext();	
		servletContext.setAttribute(("contadorUsuario"),Integer.toString(cont));

		ExecuteUserPersistent eup = new ExecuteUserPersistent();
	}
  
	public void contextDestroyed(ServletContextEvent sce){
	}
...
}

E esta é classe que contém o loop

import java.util.Date;
import java.sql.*;

public class ExecuteUserPersistent {
       
        //Declarações

	public ExecuteUserPersistent() {
		con = new ConexaoMTAS();
		stm = con.getStatement();

		testTime();
	}

	private void testTime() {
 		System.out.println("Método testTime");
		long inicial = new Date().getTime();
		long atual = 0;

		while (true) {
			atual = new Date().getTime();
			if((atual-inicial) > 60000) {
				executeSqlOperation();
				inicial = atual;
				System.out.println("estourou");
			}
		}
	}

está aí por favor me ajudem…

Valeu T+

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos[/color][/size] :joia:

cara esse teu loop vai comer toda a memória do container =p…

while(true)
   // fique testando tal coisa

:lol: :slight_smile:

Certo, mas como então poderia fazer o loop? ou outra maneira de fazer um temporizador? pois tenho que fazer a captura de um valor a cada minuto!!

Pois então além de trancar a inicialização da aplicação ela também come muita memória??? o que faria???

Jogue o código do loop em outra thread…

como vc esta executando na mesma thread que chama o contextInitialized(), sua aplicação fica travada até que esta thread retorne do método contextInitialized(), o que nunca acontece pois seu loop é infinito. É só criar outra thread para capturar o valor.

Mas o que você quer fazer é algo incomum. Por que você quer capturar as informações minuto a minuto ? Com certeza tem um meio mais facil de fazer o que você quer.

Threads :slight_smile:

[quote=“Samuel_Pessorrusso”]Jogue o código do loop em outra thread…
Mas o que você quer fazer é algo incomum. Por que você quer capturar as informações minuto a minuto ? Com certeza tem um meio mais facil de fazer o que você quer.[/quote]

Dae Samuel!

Certo vou tentar Threads!!!

Bem o que quero fazer é o seguinte, talvez não seja a melhor abordagem, mas tenho uma variável de contexto que tem o número de usuários com sessão ativa - por isso a classe listener com ContextListener e SessionListener - então com o loop eu faço o teste, se o número de usuários é diferente do atual eu atualizo na base, se não deixo quieto, isso a cada minuto!

Isso tudo porque preciso desse número pra outra aplicação!!

Alguma segestão?

Valeu!

Certo pessoal valeu!!!

Creio que a questão estva no meus “java fundamentals” :oops: com threads vou resolver o problema do loop!!

Valeu Mesmo!!! []'s