Olá!
Estou seguindo um tutorial para aprender a utilizar o hibernate JPA.
Fiz um banco com apenas uma tabela para verificar se eu conseguiria realizar a conexão e fazer o mapeamento corretamente. Mesmo parecendo uma tarefa simples ela está me dando muito dor de cabeça hahahaha.
Fiz toda minha aplicação, as Facade, DAO, Bean e View.
Quando executo a View e tento inserir o registro no banco tenho o seguinte retorno
Set 01, 2012 12:33:56 PM org.apache.catalina.core.StandardWrapperValve invoke
Grave: Servlet.service() for servlet [Faces Servlet] in context with path [/teste] threw exception [java.lang.NoClassDefFoundError: Could not initialize class br.com.unip.teste.dao.ProdutoDAO] with root cause
java.lang.NoClassDefFoundError: Could not initialize class br.com.unip.teste.dao.ProdutoDAO
at br.com.unip.teste.facade.ProdutoFacade.<init>(ProdutoFacade.java:11)
at br.com.unip.teste.bean.ProdutoBean.getProdutoFacade(ProdutoBean.java:21)
at br.com.unip.teste.bean.ProdutoBean.createProduto(ProdutoBean.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:264)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
O problema é que toda minha estrutura está certa, já conferi a codificação e não estou encontrando o problema.
Será que alguém poderia me dar uma luz??
Abaixo a codificação que estou usando:
Produto
[code]package br.com.unip.teste.model;
import java.io.Serializable;
import javax.persistence.*;
import java.math.BigDecimal;
/**
- The persistent class for the Produto database table.
*/
@Entity
@Table(name=“Produto”)
public class Produto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique=true, nullable=false)
private int idProduto;
@Column(name="Descricao", nullable=false, length=100)
private String descricao;
@Column(name="Preco", nullable=false, precision=9, scale=5)
private BigDecimal preco;
public Produto() {
}
public int getIdProduto() {
return this.idProduto;
}
public void setIdProduto(int idProduto) {
this.idProduto = idProduto;
}
public String getDescricao() {
return this.descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public BigDecimal getPreco() {
return this.preco;
}
public void setPreco(BigDecimal preco) {
this.preco = preco;
}
}[/code]
ProdutoFacade
[code]package br.com.unip.teste.facade;
import java.io.Serializable;
import java.util.List;
import br.com.unip.teste.model.Produto;
import br.com.unip.teste.dao.ProdutoDAO;
public class ProdutoFacade implements Serializable {
private static final long serialVersionUID = 1L;
private ProdutoDAO produtoDAO = new ProdutoDAO();
public void createProduto(Produto produto) {
produtoDAO.beginTransaction();
produtoDAO.save(produto);
produtoDAO.commitAndCloseTransaction();
}
public void updateProduto(Produto produto) {
produtoDAO.beginTransaction();
Produto persistedProduto = produtoDAO.find(produto.getIdProduto());
persistedProduto.setDescricao(produto.getDescricao());
produtoDAO.update(persistedProduto);
produtoDAO.commitAndCloseTransaction();
}
public Produto findProduto(int produtoId) {
produtoDAO.beginTransaction();
Produto produto = produtoDAO.find(produtoId);
produtoDAO.closeTransaction();
return produto;
}
public List<Produto> listAll() {
produtoDAO.beginTransaction();
List<Produto> result = produtoDAO.findAll();
produtoDAO.closeTransaction();
return result;
}
public void deleteProduto(Produto produto) {
produtoDAO.beginTransaction();
Produto persistedFormaPgto = produtoDAO.findReferenceOnly(produto.getIdProduto());
produtoDAO.delete(persistedFormaPgto);
produtoDAO.commitAndCloseTransaction();
}
}
[/code]
ProdutoBean
[code]package br.com.unip.teste.bean;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import br.com.unip.teste.facade.ProdutoFacade;
import br.com.unip.teste.model.Produto;
@ViewScoped
@ManagedBean(name=“ProdutoBean”)
public class ProdutoBean extends AbstractBean implements Serializable {
private static final long serialVersionUID = 1L;
private Produto produto;
private List<Produto> produtos;
private ProdutoFacade produtoFacade;
public ProdutoFacade getProdutoFacade() {
if (produtoFacade == null) {
produtoFacade = new ProdutoFacade();
}
return produtoFacade;
}
public Produto getProduto() {
if (produto == null) {
produto = new Produto();
}
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public void createProduto() {
try {
getProdutoFacade().createProduto(produto);
closeDialog();
displayInfoMessageToUser("Registro criado com sucesso!");
loadProduto();
resetProduto();
} catch (Exception e) {
keepDialogOpen();
displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
e.printStackTrace();
}
}
public void updateProduto() {
try {
getProdutoFacade().updateProduto(produto);
closeDialog();
displayInfoMessageToUser("Registro alterado com sucesso!");
loadProduto();
resetProduto();
} catch (Exception e) {
keepDialogOpen();
displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
e.printStackTrace();
}
}
public void deleteProduto() {
try {
getProdutoFacade().deleteProduto(produto);
closeDialog();
displayInfoMessageToUser("Registro excluído com sucesso!");
loadProduto();
resetProduto();
} catch (Exception e) {
keepDialogOpen();
displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
e.printStackTrace();
}
}
public List<Produto> getAllProduto() {
if (produtos == null) {
loadProduto();
}
return produtos;
}
private void loadProduto() {
produtos = getProdutoFacade().listAll();
}
public void resetProduto() {
produto = new Produto();
}
}[/code]
DAOFactory
[code]package br.com.unip.teste.dao;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;
abstract class DAOFactory implements Serializable {
private static final long serialVersionUID = 1L;
private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("teste");
private EntityManager em;
private Class<T> entityClass;
public void beginTransaction() {
em = emf.createEntityManager();
em.getTransaction().begin();
}
public void commit() {
em.getTransaction().commit();
}
public void rollback() {
em.getTransaction().rollback();
}
public void closeTransaction() {
em.close();
}
public void commitAndCloseTransaction() {
commit();
closeTransaction();
}
public void flush() {
em.flush();
}
public void joinTransaction() {
em = emf.createEntityManager();
em.joinTransaction();
}
public DAOFactory(Class<T> entityClass) {
this.entityClass = entityClass;
}
public void save(T entity) {
em.persist(entity);
}
public void delete(T entity) {
T entityToBeRemoved = em.merge(entity);
em.remove(entityToBeRemoved);
}
public T update(T entity) {
return em.merge(entity);
}
public T find(int entityID) {
return em.find(entityClass, entityID);
}
public T findReferenceOnly(int entityID) {
return em.getReference(entityClass, entityID);
}
// Using the unchecked because JPA does not have a
// em.getCriteriaBuilder().createQuery()<T> method
@SuppressWarnings({ "unchecked", "rawtypes" })
public List<T> findAll() {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return em.createQuery(cq).getResultList();
}
// Using the unchecked because JPA does not have a
// query.getSingleResult()<T> method
@SuppressWarnings("unchecked")
protected T findOneResult(String namedQuery, Map<String, Object> parameters) {
T result = null;
try {
Query query = em.createNamedQuery(namedQuery);
// Method that will populate parameters if they are passed not null and empty
if (parameters != null && !parameters.isEmpty()) {
populateQueryParameters(query, parameters);
}
result = (T) query.getSingleResult();
} catch (NoResultException e) {
System.out.println("No result found for named query: " + namedQuery);
} catch (Exception e) {
System.out.println("Error while running query: " + e.getMessage());
e.printStackTrace();
}
return result;
}
private void populateQueryParameters(Query query, Map<String, Object> parameters) {
for (Entry<String, Object> entry : parameters.entrySet()) {
query.setParameter(entry.getKey(), entry.getValue());
}
}
}[/code]
ProdutoDAO
[code]package br.com.unip.teste.dao;
import br.com.unip.teste.model.Produto;
public class ProdutoDAO extends DAOFactory{
private static final long serialVersionUID = 5150258159318448018L;
public ProdutoDAO() {
super(Produto.class);
}
}
[/code]
Agradeço desde já pela ajuda!