Context-Prevayler2.02.004

Pessoal,tô testando aqui o prevayler e tô notando algo estranho…tenho uma classe principal de negócios(Teste):

package net.testes;
import java.util.*;
import java.util.Date;
import java.util.HashMap;
import org.prevayler.*;
import org.prevayler.Clock;
import org.prevayler.implementation.clock.*;

public class Teste implements java.io.Serializable{
	//variaveis 
	private final Usuario[] usuarios;
    private final HashMap logados = new HashMap();
    
    public Teste(){//throws Exception{
    	usuarios=new Usuario[10];
    	 usuarios[0]=new Usuario("200002108901","Ruela,José","matriculado","INFO100","oi");
        
        addUsuario(usuarios[0]);

     }//fim do construtor
         
     
    public Usuario getUsuario(String matricula){
         return (Usuario)logados.get(matricula);
    } 
    
    public void addUsuario(Usuario aluno){
         logados.put(aluno.matricula,aluno);
    }
        
   }//fim da Classe Principal

e um Listener para tacar a aplicação no contexto:

package net.testes;
import java.io.IOException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.prevayler.Prevayler; 
import org.prevayler.PrevaylerFactory; 

public class TesteListener implements ServletContextListener{
	Prevayler prevayler = null; 
	PrevaylerFactory factory=null; 
	Snaps snapshot = null; 

public void contextInitialized(ServletContextEvent sce){
   
   try{
   
   // Cria o prevayler 
   prevayler = PrevaylerFactory.createPrevayler(new Teste(),"BaseDeTeste"); 
   //torna o Prevayler conponente do Contexto da Aplicação
   sce.getServletContext().setAttribute("prevayler", prevayler);
   //atribui um objeto prevayler ao Temporizador de Snapshots   
   snapshot=new Snaps(prevayler);
   //dispara a thread de execução
   snapshot.start();
   
  // prevayler.execute(new Usuario("200002108101","Planck,Max","matriculado","INFO100","ueba")); 
   }
   catch(ClassNotFoundException e){
   	e.printStackTrace();
   }
   catch(IOException e) {
    e.printStackTrace();
   }
   System.out.println("SIAP2004-Contexto Iniciado!");
	
}

 public void contextDestroyed(ServletContextEvent sce){
	
	try {  System.out.println("Snapshot finalizado!");
            snapshot.interrupt();
            
        }
    catch(Exception e) {
            e.printStackTrace();            
        }
        System.out.println("SIAP2004 Protótipo de Testes-Contexto Destruído");

	
   }//destrói o Contexto da Aplicação 

}//fim da Classe SistemaAcademicoListener 

Snaps eh uma classe q controla os snapshots a cada 2min e Usuario eh uma classe de negócio q implementa Serializable para ser persistido pelo prevayler.Analisando os logs do Tomcat,os snaps são tirados,mas a base jamais eh criada.Eu tô esquecendo alguma coisa?(extender uma classe,alguma interface?)

mesmo comentando esse trecho:

[code]usuarios=new Usuario[10];
usuarios[0]=new Usuario("200002108901","Ruela,José","matriculado","INFO100","oi");

    addUsuario(usuarios[0]); 

[/code]
e fazendo Usuario implementar Transaction:

package net.testes;
import java.io.Serializable;
import org.prevayler.*;

public class Usuario implements Serializable,Transaction{

    public final String matricula;
    public final String senha;
    public final String nome;
    public final String situacao;
    public final String curso;
    
  public Usuario(String matricula,String nome,String situacao,String curso,String senha) {
        this.matricula= matricula;
        this.nome=nome;
        this.situacao=situacao;
        this.curso=curso;
        this.senha= senha;    
        
  }
    
   public void executeOn(Object prevalentSystem, java.util.Date ignored){
   	  ((Teste)prevalentSystem).addUsuario(new Usuario(matricula,nome,situacao,curso,senha));
    		
    	}
         
    
}

e descomentando:

 prevayler.execute(new Usuario("200002108101","Planck,Max","matriculado","INFO100","ueba")); 

Os Snaps são disparados mas a Base não é efetivamente criada…
Se alguma boa(ou má :twisted: )alma se interessar em testar,o web.xml eh:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
	<listener>
    	<listener-class>net.testes.TesteListener</listener-class>
  	</listener>
</web-app>

e o descritor do Contextlistener(deve ser colocado em Tomcat/conf/Catalina/localhost -agradeço a paulo silveira pela dica):

<?xml version='1.0' encoding='utf-8'?> <Context docBase="C:/Testa" path="/Testa" reloadable="true"> </Context>
Mas nada da base funcionar… :roll: :?: :? :!: :evil:

[code]
package net.testes;
import java.io.IOException;
import org.prevayler.Prevayler;

public class Snaps extends Thread {

Prevayler prevayler;

public Snaps(Prevayler prevayler) {
    this.prevayler = prevayler;
}
   
public void run()  {
    super.run();

try {
while (true) {
Thread.sleep(1000 * 5);
prevayler.takeSnapshot();
System.out.println("Snapshot disparado as " + new java.util.Date());
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} [/code]
tinha esquecido de postar os Snaps…

mea culpa mode=“on”

Eu disse q a base não tava sendo gerada,pessoal,descobri q não eh verdade!Usando Win2k e o tomcat como serviço,a base prevalente eh criada em winnt/system32/-Base-
Como meu winnt tava oculto,se o Jacob da lista internacional do prevayler não avisa,eu não ia saber(nem encontrar) nunca…
fica o aviso de atenção qdo usarem o prevayler no Tomcat!
mea culpa mode=“off”

Agora,se meu objeto tah sendo persistido,pq raios eu não consigo me logar no Sistema? :?: :?: :?:

Opa!Tava esquecendo…meu Usuário na verdade tah assim:

[code]
package net.testes;
import java.io.Serializable;
import org.prevayler.*;

public class Usuario implements Serializable{ //,Transaction{

public final String matricula;
public final String senha;
public final String nome;
public final String situacao;
public final String curso;

public Usuario(String matricula,String nome,String situacao,String curso,String senha) {
this.matricula= matricula;
this.nome=nome;
this.situacao=situacao;
this.curso=curso;
this.senha= senha;

}

public boolean equals(Object obj){
if (obj == this) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
Usuario aluno=(Usuario)obj;
return (aluno.senha.equals(senha));
}

public int hashCode(){
int resultado=10;
resultado = 37 * resultado + senha.hashCode();
return resultado;

}

/* public void executeOn(Object prevalentSystem, java.util.Date ignored){
((Teste)prevalentSystem).addUsuario(new Usuario(matricula,nome,situacao,curso,senha));

	}*/  

}[/code]

E o Login.jsp:

[code]<%@ page language="java" import="net.testes.,org.prevayler." errorPage="/erro.jsp" %>
<% Prevayler prevayler=(Prevayler)this.getServletContext().getAttribute("prevayler");
Usuario usuario=((Teste)prevayler.prevalentSystem()).getUsuario(request.getParameter("matricula"));

String senha=request.getParameter("senha");

if&#40;usuario==null||!usuario.senha.equals&#40;senha&#41;&#41;&#123; 

%>
<html><head><title>SIAP2004</title>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
</head>

<body><p>Login/Senha inválida! Favor,<a href="javascript:history.back()">Clicar Aqui</a>
para tentar novamente.</p>
</body>
</html>
<% }
else{
if(usuario.matricula.length()==12){
session.setAttribute("usuario",usuario);
response.sendRedirect("Aluno.jsp");
}
else
if(usuario.matricula.length()==5){
session.setAttribute("usuario",usuario);
response.sendRedirect("Professor.jsp");
}
}
%> [/code]

Mãos a palmatória:
depois de escrever na lista do Prevayler,mandar email a torto e a direito,pentelhar o Daniel lah no ICQ,venho por meio desta comunicar que a Po-Ha do erro era um maldido name=“password” quando deveria ser name=“senha” para eu pegá-lo com o respectivo request.getParameter(“senha”); na minha Entrada.jsp…shit! :roll:
Como diria um antigo professor,tropeçei na pedrinha…