Não consigo carregar os dados de um MB ou DAO para a tela em JSF
Boa tarde caros amigos da Devmedia, gostaria de explicar o problema. É o seguinte ,andei vendo e assistindo as aulas da devmedia, sobre jsf e jpa, e fui exercitando. Porém me encontro num problema e tanto.
Eu tenho minha entidade:
@Entity
@Table(name = "[DADOS DO SERVIDOR]")
public class Pessoa implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "Ds_Login")
private String login;
@Column(name = "MATRÍCULA")
private String matricula;
@Column(name = "NOME")
private String nome;
@Column(name = "[UNIDADE DE EXERCÍCIO]")
private String setor;
/**
* Construtor padrão
*/
public Pessoa() {
}
/**
* @param login
*/
public Pessoa(String login) {
this.login = login;
}
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @param nome
* the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* @param matricula
* the matricula to set
*/
public void setMatricula(String matricula) {
this.matricula = matricula;
}
/**
* @return the matricula
*/
public String getMatricula() {
return matricula;
}
/**
* @param login
* the login to set
*/
public void setLogin(String login) {
this.login = login;
}
/**
* @return the login
*/
public String getLogin() {
return login;
}
/**
* @param setor
* the setor to set
*/
public void setSetor(String setor) {
this.setor = setor;
}
/**
* @return the setor
*/
public String getSetor() {
return setor;
}
}
tenho meu dao
public class PessoaDAO {
public PessoaDAO() {
}
public Pessoa obterPessoa(String login) {
return JPAUtil.getInstance().getEntity(Pessoa.class,login);
}
}
e aqui tenho MB que é onde eu devo estar errando provavelmente. Isso é só a nível de teste. Pois o meu desejo é obter os dados do usuário a partir do usuário que estar logado.
public class PessoaMB implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private final PessoaDAO dao = new PessoaDAO();
private Pessoa pessoa;
//String login = System.getProperty("user.name");
public PessoaMB() {
pessoa = dao.obterPessoa("anamel");
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
public Pessoa getPessoa() {
pessoa = dao.obterPessoa("anamel");
return pessoa;
}
}
e aqui minha pagina de saida de dados:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<head></head>
<body>
<f:view>
<h:form>
<h:dataTable var="pessoa" value="#{pessoaMB.pessoa}">
<h:column>
<f:facet name="header">
<h:outputText value="nome" />
</f:facet>
<h:outputText value="#{pessoa.nome}" />
</h:column>
</h:dataTable>
</h:form>
</f:view>
</body>
</html>
Porém não retorna nada na página. E nem da erro.
Eu tenho minha entidade:
@Entity
@Table(name = "[DADOS DO SERVIDOR]")
public class Pessoa implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "Ds_Login")
private String login;
@Column(name = "MATRÍCULA")
private String matricula;
@Column(name = "NOME")
private String nome;
@Column(name = "[UNIDADE DE EXERCÍCIO]")
private String setor;
/**
* Construtor padrão
*/
public Pessoa() {
}
/**
* @param login
*/
public Pessoa(String login) {
this.login = login;
}
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @param nome
* the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* @param matricula
* the matricula to set
*/
public void setMatricula(String matricula) {
this.matricula = matricula;
}
/**
* @return the matricula
*/
public String getMatricula() {
return matricula;
}
/**
* @param login
* the login to set
*/
public void setLogin(String login) {
this.login = login;
}
/**
* @return the login
*/
public String getLogin() {
return login;
}
/**
* @param setor
* the setor to set
*/
public void setSetor(String setor) {
this.setor = setor;
}
/**
* @return the setor
*/
public String getSetor() {
return setor;
}
}
tenho meu dao
public class PessoaDAO {
public PessoaDAO() {
}
public Pessoa obterPessoa(String login) {
return JPAUtil.getInstance().getEntity(Pessoa.class,login);
}
}
e aqui tenho MB que é onde eu devo estar errando provavelmente. Isso é só a nível de teste. Pois o meu desejo é obter os dados do usuário a partir do usuário que estar logado.
public class PessoaMB implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private final PessoaDAO dao = new PessoaDAO();
private Pessoa pessoa;
//String login = System.getProperty("user.name");
public PessoaMB() {
pessoa = dao.obterPessoa("anamel");
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
public Pessoa getPessoa() {
pessoa = dao.obterPessoa("anamel");
return pessoa;
}
}
e aqui minha pagina de saida de dados:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<head></head>
<body>
<f:view>
<h:form>
<h:dataTable var="pessoa" value="#{pessoaMB.pessoa}">
<h:column>
<f:facet name="header">
<h:outputText value="nome" />
</f:facet>
<h:outputText value="#{pessoa.nome}" />
</h:column>
</h:dataTable>
</h:form>
</f:view>
</body>
</html>
Porém não retorna nada na página. E nem da erro.
Euclides Filizola
Curtidas 0
Respostas
Henrique Weissmann
02/09/2009
Olá Euclides,
bem: vamos lá. Primeiro pela pergunta mais tola ok?
Tem certeza de que existe uma pessoa cadastrada no seu sistema com o login "anamel"?
Dica: crie um teste unitário no seu sistema que faça a busca por este usuário antes de passá-lo para a sua página jsf. Assim esta parte do problema é descartada ok?
Agora, vamos para a segunda parte do problema: edite a sua página para que imprima alguma coisa independente de haver dados no managed bean ou não, algo como no exemplo abaixo:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<head></head>
<body>
<f:view><h:outputText value="Qualquer coisa"/>
<h:form>
<h:dataTable var="pessoa" value="#{pessoaMB.pessoa}">
<h:column>
<f:facet name="header">
<h:outputText value="nome" />
</f:facet>
<h:outputText value="#{pessoa.nome}" />
</h:column>
</h:dataTable>
</h:form>
</f:view>
</body>
</html>
Se este "qualquer coisa" não aparecer, neste caso é sinal de que a sua aplicação não está bem configurada, o que resultaria na não exibição do conteúdo da página.
bem: vamos lá. Primeiro pela pergunta mais tola ok?
Tem certeza de que existe uma pessoa cadastrada no seu sistema com o login "anamel"?
Dica: crie um teste unitário no seu sistema que faça a busca por este usuário antes de passá-lo para a sua página jsf. Assim esta parte do problema é descartada ok?
Agora, vamos para a segunda parte do problema: edite a sua página para que imprima alguma coisa independente de haver dados no managed bean ou não, algo como no exemplo abaixo:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<head></head>
<body>
<f:view><h:outputText value="Qualquer coisa"/>
<h:form>
<h:dataTable var="pessoa" value="#{pessoaMB.pessoa}">
<h:column>
<f:facet name="header">
<h:outputText value="nome" />
</f:facet>
<h:outputText value="#{pessoa.nome}" />
</h:column>
</h:dataTable>
</h:form>
</f:view>
</body>
</html>
Se este "qualquer coisa" não aparecer, neste caso é sinal de que a sua aplicação não está bem configurada, o que resultaria na não exibição do conteúdo da página.
GOSTEI 0
Euclides Filizola
02/09/2009
Opa Henrique, agradeço ae a atenção. Amigo, existe sim a pessoa com login 'anamel'. Era apenas um teste. Deixa eu te explicar uma coisa. Fiz essa classe de teste:
public class Teste {
public Teste() {
}
/**
* @param args
*/
public static void main(String[] args) {
//String login = System.getProperty("user.name");
EntityManagerFactory emf = Persistence.createEntityManagerFactory("BDSERV");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Pessoa pessoa = em.find(Pessoa.class, "anamel");
em.getTransaction().commit();
System.out.println("Nome: "+pessoa.getNome());
System.out.println("Matricula: "+pessoa.getMatricula());
System.out.println("SETOR: "+pessoa.getSetor());
em.close();
emf.close();
}
}
E ela funciona perfeitamente, ou seja, com o meu usuario logado ela funciona e tudo, me traz os dados ( significa que minha configuração em relação a persistencia, acredito eu , que esteja funcionando).
Outra coisa, o banco o qual estou tentando acessar é sql Server, então não sei se tem um tratamento diferente. Enfim,
agora apareceu o seguinte erro:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login=?
Hibernate: select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login=?
02/09/2009 14:26:51 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.sql.Result
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at javax.faces.component.UIData.getDataModel(UIData.java:1140)
at javax.faces.component.UIData.setRowIndex(UIData.java:451)
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:77)
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:813)
at javax.faces.component.UIData.encodeBegin(UIData.java:967)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:928)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:578)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
at java.lang.Thread.run(Unknown Source)
Detalhe, essa sql aqui:
Hibernate: select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login=?
se eu executar no banco, ela funciona beleza, desde que eu utilize aspas simples depois do = .
como exemplo:
select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login= 'anamel'.
public class Teste {
public Teste() {
}
/**
* @param args
*/
public static void main(String[] args) {
//String login = System.getProperty("user.name");
EntityManagerFactory emf = Persistence.createEntityManagerFactory("BDSERV");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Pessoa pessoa = em.find(Pessoa.class, "anamel");
em.getTransaction().commit();
System.out.println("Nome: "+pessoa.getNome());
System.out.println("Matricula: "+pessoa.getMatricula());
System.out.println("SETOR: "+pessoa.getSetor());
em.close();
emf.close();
}
}
E ela funciona perfeitamente, ou seja, com o meu usuario logado ela funciona e tudo, me traz os dados ( significa que minha configuração em relação a persistencia, acredito eu , que esteja funcionando).
Outra coisa, o banco o qual estou tentando acessar é sql Server, então não sei se tem um tratamento diferente. Enfim,
agora apareceu o seguinte erro:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login=?
Hibernate: select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login=?
02/09/2009 14:26:51 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.sql.Result
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at javax.faces.component.UIData.getDataModel(UIData.java:1140)
at javax.faces.component.UIData.setRowIndex(UIData.java:451)
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:77)
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:813)
at javax.faces.component.UIData.encodeBegin(UIData.java:967)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:928)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:578)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
at java.lang.Thread.run(Unknown Source)
Detalhe, essa sql aqui:
Hibernate: select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login=?
se eu executar no banco, ela funciona beleza, desde que eu utilize aspas simples depois do = .
como exemplo:
select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login= 'anamel'.
GOSTEI 0
Henrique Weissmann
02/09/2009
Estão faltando arquivos jar no classpath do seu sistema. No caso, na sua camada de apresentação.
Veja aqui o erro: java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.sql.Result
No caso, o seu sistema ema lgum lugar utiliza as tags presentes no JSTL. Se não me engano, o nome do arquivo é jstl.jar ou standard.jar. Verifique se estes se encontram dentro do seu classpath ou entre as bibliotecas utilizadas pelo seu projeto (caso esteja usando uma IDE). Isto explica o porquê de nada estar sendo renderizado para você.
Para saber o nome do arquivo jar com maior precisão, recomendo o uso de ferramentas como o site JarFinder (www.jarfinder.com), aonde você digita o nome da classe e ele te retorna uma série de nomes de arquivos jar aonde o mesmo se encontra.
Veja aqui o erro: java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.sql.Result
No caso, o seu sistema ema lgum lugar utiliza as tags presentes no JSTL. Se não me engano, o nome do arquivo é jstl.jar ou standard.jar. Verifique se estes se encontram dentro do seu classpath ou entre as bibliotecas utilizadas pelo seu projeto (caso esteja usando uma IDE). Isto explica o porquê de nada estar sendo renderizado para você.
Para saber o nome do arquivo jar com maior precisão, recomendo o uso de ferramentas como o site JarFinder (www.jarfinder.com), aonde você digita o nome da classe e ele te retorna uma série de nomes de arquivos jar aonde o mesmo se encontra.
GOSTEI 0
Euclides Filizola
02/09/2009
Olha as libs que estou carregando.
GOSTEI 0
Henrique Weissmann
02/09/2009
Euclides,
a jstl está listada pelo que pude ver. Faça o seguinte: verifique se ela está sendo incluida no seu arquivo .war também. Caso não seja o caso, faça com que a mesma seja incluida.
Isto deverá solucionar o problema. Como seguro morreu de velho, sugiro novamente que você verifique no www.jarfinder.com se a classe pode estar em outro local também (nada impede que o seu jar contenha apenas as interfaces da biblioteca).
a jstl está listada pelo que pude ver. Faça o seguinte: verifique se ela está sendo incluida no seu arquivo .war também. Caso não seja o caso, faça com que a mesma seja incluida.
Isto deverá solucionar o problema. Como seguro morreu de velho, sugiro novamente que você verifique no www.jarfinder.com se a classe pode estar em outro local também (nada impede que o seu jar contenha apenas as interfaces da biblioteca).
GOSTEI 0
Euclides Filizola
02/09/2009
Problema resolvido. Eu peguei a biblioteca jstl-2.4.jar do site: http://www.java2s.com/Code/Jar/CatalogJar.htm. e coloquei para rodar dentro do meu servidor web, dentro de lib do tomcat. E funcionou. Obrigado pela atenção. Abraços.
GOSTEI 0
Euclides Filizola
02/09/2009
Só uma dúvida, porque que dentro da minha pasta web/lib, eu tinha essa mesma biblioteca e não funcionava ? O que mais eu precisava fazer ? Pode me explicar ? Agradeço desde já. Abraços.
GOSTEI 0
Henrique Weissmann
02/09/2009
Euclides,
não tenho certeza, porém uma causa comum consiste no fato do jar distribuido com a aplicação conter apenas as interfaces de referência, e não as classes já implementadas.
Sendo assim, quando vai ser criada uma nova instância da classe, a JVM encontra apenas a definição da interface, e não a implementação da mesma. Como consequência, obtem-se o erro de ClassNotFound.
Esta é uma das razões, outra pode ser também a presença da mesma classe em mais de um arquivo jar dentro do seu classpath. A JVM nestes casos não vai saber qual dos arquivos de classe deverá ser instanciado e, pior ainda neste caso, pode instanciar uma versão errada da mesma.
não tenho certeza, porém uma causa comum consiste no fato do jar distribuido com a aplicação conter apenas as interfaces de referência, e não as classes já implementadas.
Sendo assim, quando vai ser criada uma nova instância da classe, a JVM encontra apenas a definição da interface, e não a implementação da mesma. Como consequência, obtem-se o erro de ClassNotFound.
Esta é uma das razões, outra pode ser também a presença da mesma classe em mais de um arquivo jar dentro do seu classpath. A JVM nestes casos não vai saber qual dos arquivos de classe deverá ser instanciado e, pior ainda neste caso, pode instanciar uma versão errada da mesma.
GOSTEI 0