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: :slight_smile:](https://www.guj.com.br/images/emoji/twitter/slight_smile.png?v=6)
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.
[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