Bom dia galera,
Estou começando a aprender a programar java web usando jsf + hibernate, através da Ide netbeans e tenho sofrido com um erro que ocorre toda vez que tento carregar o meu formulário em .xhtml, para poder exibir e tentar salvar dados no meu banco. Esse seria o erro.
`
HTTP Status 500 - Internal Server Error
type Exception report
messageInternal Server Error
descriptionThe server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException
root cause
java.lang.ExceptionInInitializerError
root cause
javax.persistence.PersistenceException: No Persistence provider for EntityManager named livrariadb
`
Pela mensagem, dá-se a entender que não tem sido possível comunicar com o PU livrariadb, do meu persistence.xml. Porem, o estranho é que executando essa classe a qual faz a persistência direta com o banco, consigo criar as tabelas, e inserir os dados no banco normalmente. Segue a classe:
`
public static void main(String[] args) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
Autor assis = geraAutor("Machado de Assis");
em.persist(assis);
Autor amado = geraAutor("Jorge Amado");
em.persist(amado);
Autor coelho = geraAutor("Paulo Coelho");
em.persist(coelho);
Livro casmurro = geraLivro("978-8-52-504464-8", "Dom Casmurro",
"10/01/1899", 24.90, assis);
Livro memorias = geraLivro("978-8-50-815415-9",
"Memorias Postumas de Bras Cubas", "01/01/1881", 19.90, assis);
Livro quincas = geraLivro("978-8-50-804084-1", "Quincas Borba",
"01/01/1891", 16.90, assis);
em.persist(casmurro);
em.persist(memorias);
em.persist(quincas);
Livro alquemista = geraLivro("978-8-57-542758-3", "O Alquimista",
"01/01/1988", 19.90, coelho);
Livro brida = geraLivro("978-8-50-567258-7", "Brida", "01/01/1990",
12.90, coelho);
Livro valkirias = geraLivro("978-8-52-812458-8", "As Valkirias",
"01/01/1992", 29.90, coelho);
Livro maao = geraLivro("978-8-51-892238-9", "O Diario de um Mago",
"01/01/1987", 9.90, coelho);
em.persist(alquemista);
em.persist(brida);
em.persist(valkirias);
em.persist(maao);
Livro capitaes = geraLivro("978-8-50-831169-1", "Capitaes da Areia",
"01/01/1937", 6.90, amado);
Livro flor = geraLivro("978-8-53-592569-9",
"Dona Flor e Seus Dois Maridos", "01/01/1966", 18.90, amado);
em.persist(capitaes);
em.persist(flor);
em.getTransaction().commit();
em.close();
}
private static Autor geraAutor(String nome) {
Autor autor = new Autor();
autor.setNome(nome);
return autor;
}
private static Livro geraLivro(String isbn, String titulo, String data,
double preco, Autor autor) {
Livro livro = new Livro();
livro.setIsbn(isbn);
livro.setTitulo(titulo);
livro.setDataLancamento(data);
livro.setPreco(preco);
livro.adicionaAutor(autor);
return livro;
}
@SuppressWarnings("unused")
private static Calendar parseData(String data) {
try {
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(data);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
} catch (ParseException e) {
throw new IllegalArgumentException(e);
}
}
`
Segue abaixo o conteúdo do meu persistence.xml
`
<persistence 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_2_0.xsd"
version="2.0">
<persistence-unit name="livrariadb" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>br.com.caelum.livraria.modelo.Livro</class>
<class>br.com.caelum.livraria.modelo.Autor</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3310/livrariadb"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="vivi2012"/>
<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>
Segue o meu arquivo .xhtml.
`
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<h1>Novo Livro</h1>
<h:form>
<fieldset>
<legend>Dados do Livro</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Titulo:" for="titulo" />
<h:inputText id="titulo" value="#{livroBean.livro.titulo}" />
<h:outputLabel value="ISBN:" for="isbn" />
<h:inputText id="isbn" value="#{livroBean.livro.isbn}" />
<h:outputLabel value="Preço:" for="preco" />
<h:inputText id="preco" value="#{livroBean.livro.preco}" />
<h:outputLabel value="Data de Lançamento:" for="dataLancamento" />
<h:inputText id="dataLancamento" value="#{livroBean.livro.dataLancamento}" />
<h:commandButton value="Gravar" action="#{livroBean.gravar}"/>
</h:panelGrid>
</fieldset>
<fieldset>
<legend>Dados do Autor</legend>
<h:outputLabel value="Selecione Autor:" for="autor"/>
<h:selectOneMenu value="#{livroBean.autorId}" id="autor">
<f:selectItems value="#{livroBean.autores}" var="autor" itemLabel="#{autor.nome}" itemValue="#{autor.id}"/>
</h:selectOneMenu>
<h:dataTable value="#{livroBean.autoresDoLivro}" var="autor">
<h:column>
<h:outputText value="#{autor.nome}"/>
</h:column>
</h:dataTable>
<h:commandButton value="Gravar Autor" action="#{livroBean.gravarAutor}"/>
</fieldset>
</h:form>
</h:body>
</html>
`
Essa seria a estrutura das minhas pastas.

Sendo assim, estou meio perdido sobre como resolver esse problema, visto que aparentemente está tudo ok e era pra carregar o meu formulário normalmente. Desde já agradeço por qualquer ajuda dos colegas.