Java Persistence API

Olá pessoal,

faz teeempo que venho tentando fazer funcionar esta API!!!

Eu consigo fazer funcionar da maneira mais fácil! Instanciando diretamente o EntityManagerFactory mas não consigo nem a pau fazer funcionar com annotations peguei varios exemplos mas não vai!!!

Já estou quase desistindo! Alguem tem um exemplo 100% por favor para eu ver rodando e onde estou errando?!

[]s

Você está rodando em algum container?

Já tentei com TOMCAT

E também com o Netbeans que vem com o GlassFish, mas o EntityManager fica "NULL!"
E também tentei com o JBOSS e tb o entitymanager vem NULL

Devo estar errando algo besta por isso preciso de um exemplo funcionando

[]s

Como está o seu persistence.xml?

No JBoss, você criou o arquivo de configuração do seu data source?

No Glassfish você configurou suas conexões na administração?

Opa cara!

Vamo lá! Quero que funcione no JBOSS pra eu aprender passo-a-passo o Netbeans faz tudo sozinho…

Eu coloquei o seguinte arquivo no JBOSS --> "C:\Arquivos de programas\jboss-4.2.2.GA\server\default\deploy\systemmanager.xml"

peguei de um tutorial na net

<? xml version="1.0" encoding="UTF-8" ?> <datasources> <local-tx-datasource> <jndi-name>jdbc/SystemManager</ jndi-name> <connection-url> jdbc:mysql://localhost:3306/SystemManager </ connection-url> <driver-class>com.mysql.jdbc.Driver</ driver-class> <user-name> sa </ user-name> <password> root </ password> <min-pool-size> 5 </ min-pool-size> <max-pool-size> 30 </ max-pool-size> <idle-timeout-minutes> 1 </ idle-timeout-minutes> <prepared-statement-cache-size> 32 </ prepared-statement-cache-size> </ local-tx-datasource> </ datasources>

E tenho minha classe que estou tentando conecatr com os annotations

[code]package sistema;

import javax.annotation.;
import javax.ejb.
;
import javax.naming.;
import java.sql.
;
import javax.persistence.*;

@Stateless
public class Conexao {

@PersistenceUnit(unitName="PU")
EntityManagerFactory emf;

public void testar(int custID) {
    EntityManager em = emf.createEntityManager();

// OBject teste = em.createNamedQuery(" ");
}

}[/code]

E tenho meu persistence.xml

<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="PU" transaction-type="JTA"> <jta-data-source>jdbc/SystemManager</jta-data-source> <properties/> </persistence-unit> </persistence>

A aplicação aparece normalmente no Browser…quando tento conectar que acontece o seguinte erro

[quote]Caused by: java.lang.NullPointerException
at sistema.Conexao.testar(Conexao.java:16)
at org.apache.jsp.teste_jsp._jspService(teste_jsp.java:69)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
… 34 more
22:57:38,937 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
at sistema.Conexao.testar(Conexao.java:16)
at org.apache.jsp.teste_jsp._jspService(teste_jsp.java:69)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Unknown Source)[/quote]

[]s

Aqui tem um exemplo de uma aplicação com JPA no JBoss.

Olá rcarneiro! Obrigado pelas respostas!!

Cara, eu baixei o exemplo de EJB que vc passou, e vi que o exempo esta dividido em 4 pastas, 3 projetos e um EAR…

Bom…estou entrando meio que sem saber o que fazer, não consigo nem colocar seu projeto para rodar, pq ele esta dividido em 4 partes, eu li sobre esse EAR mas naum entendi para que ele serve? Pode me explicar a extrutura dos seus arquivos?!

[]s

Oi Thiago,

existe um arquivo README.txt no arquivo compactado que você baixou. Por favor leia as instruções contidas nele.

Mencionei sobre o projeto para você tomar como base para o seu projeto (configurações, arquivos necessários, etc). Um arquivo EAR (Enterprise ARchive) é um arquivo próprio para os applications servers, onde contém informações (.jars, .wars, arquivos de configurações, etc) para o deploy de uma aplicação.

Cara, eu li seu README.txt, me desculpe a ignorancia…mas nunca mexi com EJB, pode paracer claro para vc mas eu não consigo entender!!

Olhe estes passos:

3 - ao modificar o projeto store-ejb, lembre-se de gerar o .JAR do projeto e copiar para o diretório
WEB-INF/lib do projeto store-web

Quer dizer que este projeto “store-ejb” só serve de apoio para “store-web”?!

a partir do 4 passo eu me perco completamente!

[]s

Thiago

Cade a interface remota do seu EJB Conexao?

Se voce esta dando new direto no Conexao, o container nao vai te injetar o EM!

Coloquei a interface e mesmo assim não funcionou…será que é porque estou tentando instanciar dentro do JSP?

De qualquer forma eu consegui de outra maneira obter o resultado que eu queria, evitar o LazyException…não com o “Open Session in View”, estou dando um <nome_colecao>.size() na hora da listagem, não é o que eu queria mas vi que no Java o buraco é bem mais embaixo, uma coisa puxa a outra e não estou consigo implementar a melhor solução ainda! É cruel estar pesquisando uma coisa aparentemente simples e se deparar com “N” conceitos novos!

Mas não vou desistir não!

A todos, Obrigado pela ajuda!

[]s

Thiago,

não instancie o objeto dentro da JSP, obtenha isso do seu Servlet e envie na requisição.

ah :? …

mas ae vai dar na mesma… eu vou ter que ter carregado antes de exibir a coleção!

Eu pensei que chamava dentro do JSP e de alguma forma a sessão era aberta exclusivamente para carregar a coleção e depois era fechada!

Bom…de qualquer forma foi um jeito forçado de estudar um pouquinho!

Brigadúúúú!
[]s

Você pode colocar o código dentro da JSP, mas fica horrível e é uma má prática.

Não…

no JSP eu queria fazer somente isso

out.print(objeto.getLista().get(0).getAtributo());

E isso seria tratado “por traz”

[]s

Envie esse objeto no seu Servlet.

Então…desculpe se minha pergunta ser idiota

Qual é a vantagem de enviar via servlet?

Olhe a solução que pensei

Tenho o metodo find(int id)

nele vou passar outro parametro find(int id, boolean carregaLista)

if(carregaLista) {
objeto.getLista().size();
}

E pronto tenho um objeto carregado no JSP ou no JSF

como seria esse atravéz de Servlet?

[]s

Se você tiver usando JSF é só criar esse método no seu Managed Bean.

Mencionei Servlet porque é uma boa prática de programação evitar códigos Java
em JSPs.

Ah tahhh, vc pensou que eu estivesse fazendo TUDO dentro do JSP né…

BLZZZ…tah dentro de uma classe JAVA!

O meu problema era o iniciação EAGER pois iria causar GRAAAAAANDE lentidão por isso da iniciação LAZY e esse grande empacamento que tive.

:wink: []s