Prezados, comecei meus estudos com Hibernate e resolvi fazer uma aplicação para testar o que estava aprendendo.
Eu fiz um cadastro de usuário e queria persistir ele em um banco de dados.
Estou utilizando o Eclipse, os passos são o seguinte.
1- Na minha classe de teste está funcionando normalmente, dou Run as Java Application funciona normalmente.
2- Quando eu inicio o Tomcat pelo próprio eclipse ele funciona numa boa, consigo acessar o formulário de cadastro, mas quando eu dou o submit acontece o seguinte erro.
3- erro ao dar o submit
GRAVE: Servlet.service() for servlet [default] in context with path [/biblioteca] threw exception
javax.persistence.PersistenceException: No Persistence provider for EntityManager named biblioteca
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:84)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at br.com.biblioteca.util.UsuarioController.(UsuarioController.java:17)
at br.com.biblioteca.acao.AdicionarPessoa.executa(AdicionarPessoa.java:36)
at br.com.biblioteca.filtros.controladorFilter.doFilter(controladorFilter.java:44)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at br.com.biblioteca.filtros.AutorizacaoFilter.doFilter(AutorizacaoFilter.java:31)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1839)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Eu tentei resolver de várias formas e não consegui, talvez seja algum problema no meu EntityManager.
segue persistence.xml
<!-- unidade de persistencia com o nome financas -->
<persistence-unit name="biblioteca" transaction-type="RESOURCE_LOCAL">
<!-- Implementação do JPA, no nosso caso Hibernate -->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!-- Aqui são listadas todas as entidades -->
<class>br.com.biblioteca.modelo.Usuario</class>
<properties>
<!-- Propriedades JDBC -->
<property name="javax.persistence.jdbc.driver"
value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost/biblioteca" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="123456" />
<!-- Configurações específicas do Hibernate -->
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
Minha classe que instancia o EntityManager
package br.com.biblioteca.util;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import br.com.biblioteca.modelo.Usuario;
public class UsuarioController {
EntityManagerFactory emf;
EntityManager em;
public UsuarioController() {
emf = Persistence.createEntityManagerFactory("biblioteca");
em = emf.createEntityManager();
}
public void cadastraUsuario(Usuario _usuario) {
em.getTransaction().begin();
em.persist(_usuario);
em.getTransaction().commit();
em.close();
}
}
Minha classe Usuario
package br.com.biblioteca.modelo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
private Integer idade;
private String cpf;
private String senha;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
}
E a minha classe que recebe os parametros
import java.io.IOException;
import javax.persistence.EntityManager;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.biblioteca.modelo.Usuario;
import br.com.biblioteca.util.UsuarioController;
public class AdicionarPessoa implements Acao {
@Override
public String executa(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String nomeUsuario = request.getParameter("nomeUsuario");
Integer idadeUsuario = Integer.parseInt(request.getParameter("idadeUsuario"));
String cpfUsuario = request.getParameter("cpfUsuario");
String senhaUsuario = request.getParameter("senhaUsuario");
String emailUsuario = request.getParameter("emailUsuario");
Usuario usuario = new Usuario();
usuario.setNome(nomeUsuario);
usuario.setIdade(idadeUsuario);
usuario.setCpf(cpfUsuario);
usuario.setSenha(senhaUsuario);
usuario.setEmail(emailUsuario);
UsuarioController UC = new UsuarioController();
UC.cadastraUsuario(usuario);
return null;
}
}
Esta como return null pois ainda estava testando.