Tomcat 6 X GlassFish 2

24 respostas
J

Pessoal, estou com um problema aqui e até agora não consegui entender nada.

Estou há um tempo tentando fazer algumas coisas simples de java para web funcionarem, mas simplesmente nao vai, cada hora é uma novidade, leio, estudo, pesquiso e nada. Tudo que vejo está parecido com o que fiz, mas mesmo assim na hora de jogar os dados pro servlet, e do servlet salvar, por exemplo, nada acontece, nem erro aparece. Estava usando com oservidor o GlassFish 2, mudei pro 3 e nada aconteceu, resolvi usar o Tomcat, ai tive mais uma surpresa, uma das varias que venho tendo.
Seguinte:

Quando meu projeto esta configurado para usar GlassFish como servidor padrao, meus codigos ficam certo, sem nenhum erro, tudo ok, mesmo sem rodar nada, sem salvar, sem conseguir muita coisa, nao me é mostrado nenhum erro. POREM, quando mudo meu projeto para suar TOMCAT como servidor padrao, começam aparecer varios erros nas minhas entidades (classes de persistencia), simplesmente ao mudar para tomcat, as minhas anotações começam aparecer como erro. Alguem sabe por que e o que posso fazer?
Se precisar de algum codigo, me avisem.

Obrigado

24 Respostas

zoren

É porque o Glassfish tem muito mais bibliotecas que o tomcat

O tomcat é apenas um servlet container, já o glassfish é um servidor de aplicação, ele possui muito mais recursos que o tomcat

para su projeto funcionar, vc vai ter que copiar as bibliotecas do glassfish para o seu projeto ou para o tomcat

J

E como eu faço para copiar essas bibliotecas? Onde elas se encontram?

Qual é a melhor opçaõ: continuar com o GlassFish ou usar o Tomcat e copiar as bibliotecas necessárias para ele funcionar?

zoren

elas se encontram na pasta lib do glassfish

eu prefiro o glassfish,

qto a seu projeto não estar funcionando, vc já fez um debug?

as vezes é a falta de transação ou a falta de um commit

J

Vou ver aqui.

Tambem prefiro o GlassFish, mas antes vou testar com o Tomcata, só para confirmar que o problema não é o servidor hehehe

J

Cara, eu fui em Depurar - Depurar Projeto, escolhi java do lado do servidor com javascript, algo assim, está nisso ha mto tempo, é assim mesmo? Abriu uma nova pagina no Firefox, esta pedindo pra eu esperar e nada até agora. Esta certo? To achando que ta demorando muito.

xjunior

Bom amigo, primeiro vc tem que ver se suas classes estão setadas no classpath da aplicação, e ainda, Tomcat é um servlet container e não um servidor de aplicação tipo o classfish ou o jakarta geronimo, entende?

O meu conselho é visualizar se estão setadas no seu classpath, como está seu web.xml da aplicação, essas coisas, e ainda, se seu servlet está feito corretamente, não tem como ajudar sem ver o código ou algo que vc já fez, quais são as excessões lançadas???

vc num postou nada ainda, num tem como saber mano, agora para vc saber o que usar, vai depender do que vc quer fazer, se for uma aplicação simples em jsp, usa o tomcat ou outro similar, agora se vc usa EJB, JSF entre outros aí vc tem que ter um servidor J2EE, gosto muito do JBOSS e do Geronimo, agora tem o Classfish que é da própria SUN, olha aí e vê a viabilidade do seu Projeto.

Só lembrando JavaScript é executado no Cliente, é front-end ok…

J

Como que eu vejo se as classes estão setadas no meu classpath? Pelo que vi no web.xml os meus servlets estão mapeados corretamente no mesmo. Vou postar o codigo do meu servlet e do meu jsp.

login.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>titulo</title>
    <link rel="shortcut icon" href="imagens/fouff.ico">
    <link rel="stylesheet" href="css/catalogo.css" type="text/css" />
  </head>
  <body>
    <div id="topo">
      <jsp:include page="uteis/topo.jsp" flush="true"></jsp:include>
    </div>
    <div id="conteudo" class="login">
      <br />
      <h3>Acesso ao Sistema</h3>
      <form name="acesso" method="post" action="LoginServlet" onsubmit="return Validar()">
        <fieldset>
          <legend>&nbsp;Informa&ccedil;&otilde;es de Acesso Pessoal&nbsp;</legend>
          <table width="287" border="0" align="center" cellpadding="0" cellspacing="0">
            <tr>
              <td>&nbsp;</td>
            </tr>
            <tr>
              <td>
                Login<br />
                <input type="text" name="login" />
                <br /><br />
              </td>
            </tr>
            <tr>
              <td>
                Senha<br />
                <input type="password" name="senha" />
                <br /><br />
              </td>
            </tr>
          </table>
          <input type="submit" name="entrar" id="bto_entrar" value=" Entrar " />
	  <br /><br />
        </fieldset>
      </form>
      <br />
    </div>
    <jsp:include page="uteis/rodape.html" flush="true"></jsp:include>
  </body>
</html>

LoginServlet:

package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.UsuarioDAO;
import entidades.Usuario;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpSession;

public class LoginServlet extends HttpServlet {

    private Usuario usuario;
    private UsuarioDAO usuarioDAO;
   
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet LoginServlet</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet LoginServlet at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
            */
        } finally { 
            out.close();
        }
    } 

    // <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);

        String login = request.getParameter("login"); // Pega o login vindo do formulário
        String senha = request.getParameter("senha"); //Pega a senha vinda do formulário

        try
        {
            usuario = new Usuario();
            usuario.setLogin(login);
            usuario.setSenha(senha);

            usuarioDAO = new UsuarioDAO();

            if (usuarioDAO.ValidarLogin(usuario))
            {
                HttpSession sessao = request.getSession(true);
                sessao.setAttribute(login, usuario.getLogin());
                //sessao.setAttribute(nome, usuario.getNome());

                RequestDispatcher dispatcher = request.getRequestDispatcher("home.jsp");
                dispatcher.forward(request,response);

            }
            else
            {
                RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp");
                dispatcher.forward(request,response);
            }
        }
        catch (Exception ex)
        {
            Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
        }    
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);

        PrintWriter out = response.getWriter();
        // escreve o texto
        out.println("<html>");
        out.println("Caelum explica");
        out.println("</html>");

        String login = request.getParameter("login"); // Pega o login vindo do formulário
        String senha = request.getParameter("senha"); //Pega a senha vinda do formulário

        try
        {
            usuario = new Usuario();
            usuario.setLogin(login);
            usuario.setSenha(senha);
                                   
            usuarioDAO = new UsuarioDAO();

            if (usuarioDAO.ValidarLogin(usuario))
            {
                HttpSession sessao = request.getSession(true);
                sessao.setAttribute(login, usuario.getLogin());
                //sessao.setAttribute(nome, usuario.getNome());

                RequestDispatcher dispatcher = request.getRequestDispatcher("home.jsp");
                dispatcher.forward(request,response);

            }
            else
            {
                RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp");
                dispatcher.forward(request,response);
            }
        }
        catch (Exception ex)
        {
            Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

Usuario.java

package entidades;

import java.io.Serializable;
import javax.persistence.*;

//Anotação que informa que a classe mapeada é persistente
@Entity
//Nome da tabela no BD e schema utilizado
@Table(name = "usuario", schema = "catalogo")
public class Usuario implements Serializable {
    //Atributos
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "codigo")
    private Integer codigo;
    @Column(name = "login")
    private String login;
    @Column(name = "senha")
    private String senha;
    @Column(name = "nome")
    private String nome;
    @JoinColumn(name = "tipo_usuario_codigo", referencedColumnName = "codigo")
    @ManyToOne(optional = false)
    private TipoUsuario tipoUsuarioCodigo;

    //Construtor vazio
    public Usuario() {
    }

    //Construtor parametrizado
    public Usuario(Integer codigo, String login, String senha, String nome) {
        this.codigo = codigo;
        this.login = login;
        this.senha = senha;
        this.nome = nome;
    }

    //Getters e Setters
    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public TipoUsuario getTipoUsuarioCodigo() {
        return tipoUsuarioCodigo;
    }

    public void setTipoUsuarioCodigo(TipoUsuario tipoUsuarioCodigo) {
        this.tipoUsuarioCodigo = tipoUsuarioCodigo;
    }


    //Gerados pelo NetBeans
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codigo != null ? codigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.codigo == null && other.codigo != null) || (this.codigo != null && !this.codigo.equals(other.codigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entidades.Usuario[codigo=" + codigo + "]";
    }

}

UsuarioDAO

package dao;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import entidades.Usuario;
import java.util.List;
import javax.transaction.Transaction;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import util.ConexaoHibernate;

public class UsuarioDAO{
    //Atributo privado, criando uma fabrica de sessions
    private SessionFactory factory;
    //Atributo privado criando o objeto session, que irá perssitir os dados e o abrindo ir os dados
    
    //private Session session = factory.openSession();

    private Session session;

    //Criando um objeto criteria e adicionando a Classe Usuario
    //Criteria é usadao para que seja possível fazer consultas personalizadas no BD, sem usar SQLs
    private Criteria criteria = session.createCriteria(Usuario.class);

    public UsuarioDAO() throws Exception{
        factory = new Configuration().addClass(Usuario.class).buildSessionFactory();
    }

    public void Inserir(Usuario usuario) throws Exception {
 	/*session.save(usuario);
	session.flush();
	session.close();*/

        session = (Session) ConexaoHibernate.getInstance();//cria uma sessao
        Transaction transaction = null; //permite transacoes no BD

        try {
            transaction = (Transaction) session.beginTransaction();
            session.save(usuario);//grava no BD
            transaction.commit();//transacao efetuada
        }
        catch (HibernateException e) {
            System.out.println("Erro ao salvar o novo usu&aacute;rio!");
            e.printStackTrace();
            //tem o objetivo de desfazer a transcao em caso de erro
            transaction.rollback();
        }
        finally {
            session.close();
        }
    }

    public void Alterar(Usuario usuario) throws Exception {
	session.update(usuario);
	session.flush();
	session.close();
    }

    public void Excluir(Usuario usuario) throws Exception {
	session.delete(usuario);
	session.flush();
	session.close();
    }

    public boolean ValidarLogin(Usuario usuario) throws Exception{
        Criterion login = Restrictions.eq("login", usuario.getLogin());
        criteria.add(login);  
        Criterion senha = Restrictions.eq("senha", usuario.getSenha());
        criteria.add(senha);

        if ( criteria.uniqueResult() == null )
        {
            return(true);
        }
        else
        {
            return(false);
        }
    }

    public void ListaTodos() {
        List todosUsuarios = criteria.list();
    }

}

Se precisar de mais alguma coisa, me falem

zoren

vc cria uma session factory em cada dao??

J

Sim.

Como voce pode ver estou testando, fiz um metodo usando alguns metodos do arquivo ConexaoHibernate.java e outros estao diferentes. Aparentemente está tudo certo né? Mas nao roda, nem mostra mensagem de erro.

J

zoren, não estou conseguindo depurar meu projeto.
Fui no menui Depurar - Depurar projeto, fica rodando e nada, ficou uma hora nisso e nada até agora. Fiz errado? Existe outra maneira de fazer debug no projeto?

zoren

Qdo vc cria um session factory, vc tem q passar a url, a senha e tudo mais

qto ao debug, como vc está fazendo pra debugar?

J

Então, os meus DAOS estao errados, ou pelo menos incompletos? Esta faltando o que? Como passo a URL e a senha, etc.?

Para depurar eu estou indo em Depurar, no menu superior, ao lado de Executar. Mas ja tentei clicando com o botão direito em cima do projeto e escolhendo a opção Depurar, nessa tentativa, nao abriu nenhuma janela do Firefox e apareceu, em verde, o texto: Construido com sucesso. E abre meu projeto no browser.
Lembrando que eu uso NetBeans 6.7.

zoren

antes de depurar vc tem q colcoar um break point na linha q vc quer ver

vc só pode montar um session factory na aplicação e tem q passar todos os dados necessários para fazer a conexão

a session factory é singleton

J

Entendi

Estou refazendo algumas coisas aqui, depois posto os resultados.

Voce acha que pode ser problema do NetBeans? Estou quase fazendo no Eclipse.

Comecei um projeto do zero aqui, abri o NetBeans e criei um novo projeto web, normal. Depois criei na aba Serviços uma nova conexão com o banco de dados, uso mysql, coloquei a porta, usuario, tudo certo, tanto que o netbeans nao acusou erro. Depois eu vi o arquivo hibernate.cfg.xml e tambem esta certo, com usuario, driver, dialeto, etc. Fiz um teste simples: criei uma entidade nova (usuario), coloquei as anotações e fiz uma classe java, com um metodo main, setando na mao os dados da classe usuario, que cria a sessao a transacao e tudo e tambem nao funcionou, muito estranho, comecei do zero, nao deixei o netbeans criar nada e nao funcionou e é um teste simples. Nao sei mais o que fazer.
Vou postar os codigos.

hibernate.cfg.xml :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/catalogo</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>

    <mapping class="br.com.teste.modelo.Usuario"/>
  </session-factory>
</hibernate-configuration>
Usuario.java :
package br.com.teste.modelo;

import java.io.Serializable;
import javax.persistence.*;

@Entity
public class Usuario implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    private int codigo;
    private String login;
    private String senha;
    private String nome;
    private int tipoUsuarioCodigo;

    public Usuario() {
    }
//get e sets ....
TestaUsuario.java :
import br.com.teste.modelo.Usuario;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class TestaUsuario {
    public static void main(String[] args) {
        // configura o hibernate
        Configuration conf = new AnnotationConfiguration();
        conf.configure();
        SessionFactory factory = conf.buildSessionFactory();
        Session session = factory.openSession();

        // cria um usuario
        Usuario user = new Usuario();
        user.setLogin("admin");
        user.setSenha("admin");
        user.setNome("Jefferson");
        user.setTipoUsuarioCodigo(1);
        
        // abre transacao e insere
        Transaction t = session.beginTransaction();
        session.save(user);
        t.commit();
        session.close();
    }
}

Veja como esta simples e nao funciona, ja testei em tres maquinas diferentes e nada até agora, os outros projetos testei com mysql e derby e tambem nao foi. Muito estranho. Se for algum problema com mysql o netbeans iria reclamar né? Acho que o mysql esta instalado aqui certinho. Nesse pequeno projeto de teste eu ja coloquei as bibliotecas do glassfish, do hibernate, do mysql e jdk. Nao sei mais o que fazer

Desde ja agradeço a a atenção e paciencia de todos

marcelo.bellissimo

Quando você diz que “não funciona”, o que exatamente você está querendo dizer?
Algum erro? Disparou uma excessão? Não deu erro mas não está gravando? O que acontece ?

(desculpe se caí de para-quedas, mas eu lí o tópico inteiro e não entendi o problema real)

J

Então marcelo.bellissimo, você chegou a ver meus códigos, aparantemente tudo certo né?
O problema é que na hora que rodo a aplicação e tento salvar algum usuario ou ate mesmo tento fazer login, nao acontece nada, simplesmente nada, nao aaprece mensagem de erro, nada é salvo no bd, nada é mostrado na tela, enfim nada, o jsp aparece certinho, mas quando clico em logar ou entao em salvar e vai para o servlet simplesmente me aparece uma tela branca e mais nada.

Pelo que voce pode ver nos meus codigos era pra funcionar?

Abraços

marcelo.bellissimo

Á primeira vista , sim… vou tentar simular o seu projeto aqui, mas tenho uma dúvida… realmente não aparece nada nem no console? Veja bem, você tem um catch onde é gerado um log através da Classe Logger, então como está configurado o seu Logger? Pode ser que ele esteja imprimindo a excessão em um arquivo de log que você configurou, por isso não aparece nada no console… vale verificar também os logs do container no qual você está rodando a aplicação, ficam dentro da pasta do container… por exemplo, no Tomcat, em <pasta do tomcat>/logs/ …

zoren

Cara, faz o seguinte

baixa o log4j, coloca no classpath

pega um arquivo de configuração do log4j que vem na distribuição do hibernate e coloca na raiz dos pacotes

ai vc roda sua aplicação e coloca todo o conteudo gerado saida do netbeans aqui

deve ser uma coisa bem ridicula, pq eu ainda n vi

marcelo.bellissimo

Posso dar uma opinião, enquanto isso ? Use Eclipse… :roll:

J

Baixei o log4j zipado, descompacto e coloco tudo dentro da pasta lib do meu projeto? Ou coloco apenas o .jar? Onde posso achar esse arquivo de configuração do hibernate?

marcelo.bellissimo

Use só o lo4g.jar ...

O arquivo de configuração ( log4j.properties ) está na pasta de arquivos fonte (src) do seu projeto, se não existe ainda, crie um seguindo o modelo:

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=debug, stdout

log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug

### log just the SQL
log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=info

### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=info

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
log4j.logger.org.hibernate.cache=info

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
J

Nao existe esse arquivo nao, acabe de cria-lo, o coloco dentro da pasta conf ou java? Dentro da mihas pasta src existe essas duas outras?
Só isso que tenho que fazer e depois depurar o sistema?

J

Coloquei dentro da pasta src/java, agora está aparecendo no meu projeto.

E agora?

J
Pessoal, tentei fazer no eclipse, mas não me adaptei, peskisei algumas coisas na internet e segui um pouco o padrao do eclipse, mas apliquei isso no netbeans, por falta de tempo, não posso ficar tentando enteder o eclipse agora. Seguinte, coloquei o log4j e agora aparece esse erro pra mim:
HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Servlet execution threw an exception


root cause 

java.lang.NoClassDefFoundError: br/com/teste/dao/PessoaDAO
	br.com.teste.servlets.PessoaServlet.service(PessoaServlet.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause 

java.lang.ClassNotFoundException: br.com.teste.dao.PessoaDAO
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
	java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
	br.com.teste.servlets.PessoaServlet.service(PessoaServlet.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.

O que pode ser?

Já fiz tanto testes, comecei e e recomei tantas vezes, que esta misturado codigos de um com outro, ta uma confusão.

Criado 14 de janeiro de 2010
Ultima resposta 22 de jan. de 2010
Respostas 24
Participantes 4