No Persistence provider for EntityManager named X - JPA

0

Witam.
Ostatnio bawię się trochę w programowanie w JavaEE i aktualnie utknąłem na temacie JPA. Otóż konfigurowałem sobie wszystkie pliki, dodałem persistence.xml do META-INF i nie wiem dlaczego nadal otrzymuję błąd: No Persistence provider for EntityManager named PierwszaAplikacja. Szukałem już wiele rozwiązań w internecie, ale póki co nic z tego. Może ktoś tutaj mi poradzi? Czy muszę zaimportować do projektu jakieś specyficzne biblioteki?

Mój plik persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
	<persistence-unit name="PierwszaAplikacja" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>devcastzone.javaee.Uzytkownik</class>
		<properties>
			<property name="hibernate.connection.username" value="root"/>
			<property name="hibernate.connection.password" value=""/>
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost/szkolenie_javaee?characterEncoding=utf8"/>
			<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
		</properties>
	</persistence-unit>
</persistence>

Dalej moja klasa Uzytkownik.java:

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="uzytkownik")
public class Uzytkownik implements Serializable {
	
	private static final long serialVersionUID = -3299291830280417103L;
	@Id
	private int id;
	private String imie;
	private String nazwisko;
	
	//gettery i settery
}

Na koniec utworzenie EntityManagerFactory w servlecie:

 
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException
	{
		res.setContentType("text/plain;charset=utf-8");
		res.getWriter().println("Cos tam cos tam");
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("PierwszaAplikacja");
		EntityManager em = emf.createEntityManager();
		Uzytkownik u = em.find(Uzytkownik.class, 1);
		res.getWriter().println(u.getImie() + " " + u.getNazwisko() + "\n");
		em.close();
		emf.close();
        }

Nie wiem czy bład tkwi w samym kodzie czy brakuje mi jakichś bibliotek. Może ktoś pomoże kto miał już z tym styczność?

0

A cały stacktrace? Szklana kula mówi że brakuje ci hibernate-entitymanager w pomie / jara w classpath.

0

Zapomniałem dorzucić:

 
SEVERE: Servlet.service() for servlet [Witaj swiecie] in context with path [/PierwszaAplikacja] threw exception
javax.persistence.PersistenceException: No Persistence provider for EntityManager named PierwszaAplikacja
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
	at devcastzone.javaee.servlety.WitajSwiecieServlet.doGet(WitajSwiecieServlet.java:32)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
	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)

W bibliotekach mam dorzucone hibernate-entitymanager.jar. Czy moze to być problem że mam niepoprawną wersję i powinienem ściągnąć nowszą lub starszą?

0

Jakie masz biblioteki dodane? No Persistence provider for EntityManager named PierwszaAplikacja mowi o braku providera - poza hibernate jakies JPA np. hibernate oraz sterownik do bazy musisz mieć wgrany. Tutaj masz przykładowe biblioteki dla mavena

            <dependency>
	            <groupId>org.hibernate</groupId>
	            <artifactId>hibernate-entitymanager</artifactId>
	            <version>3.6.9.Final</version>
	        </dependency>
	        <dependency>
	            <groupId>org.hibernate.javax.persistence</groupId>
	            <artifactId>hibernate-jpa-2.0-api</artifactId>
	            <version>1.0.0.Final</version>
	        </dependency>
0

Dodane biblioteki to:
hibernate-entitymanager.jar
hibernate-core.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar

Przed chwilą dodałem dodatkowo hibernate-jpa-2.0-api.jar i dostałem trochę inny błąd:

 
SEVERE: Servlet.service() for servlet [Witaj swiecie] in context with path [/PierwszaAplikacja] threw exception
javax.persistence.PersistenceException: java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence
	at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader$CachingPersistenceProviderResolver.loadResolverClasses(PersistenceProviderResolverHolder.java:153)
	at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader$CachingPersistenceProviderResolver.<init>(PersistenceProviderResolverHolder.java:115)
	at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader.getPersistenceProviders(PersistenceProviderResolverHolder.java:73)
	at javax.persistence.Persistence.getProviders(Persistence.java:60)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:46)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
	at devcastzone.javaee.servlety.WitajSwiecieServlet.doGet(WitajSwiecieServlet.java:32)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
	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)
Caused by: java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
	at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader$CachingPersistenceProviderResolver.loadResolverClasses(PersistenceProviderResolverHolder.java:135)
	... 27 more
0

A pewny jesteś że dodajesz je w tych samych wersjach? Tzn tak żeby do siebie pasowały?

0

Obawiam się, że mogłem trochę w tych wersjach namieszać, bo sporo rzeczy próbowałem i mogłem przypadkowo wgrać nie tą wersję. Rozumiem, że jeśli mam hibernate-entitymanager.jar w wersji 4.X.X to wystarczy że pozostałe biblioteki też będą w wersji 4.X.X? Czy dokładnie musi być to ta sama wersja (np. mam hiberanate-entitymanager.jar w wersji 4.2.2 to reszta też musi być 4.2.2)?

Próbowałem dogrywać brakujące biblioteki (ale nie jestem na 100% pewien czy są w tej samej wersji) i teraz otrzymałem coś takiego:

 
SEVERE: Servlet.service() for servlet [Witaj swiecie] in context with path [/PierwszaAplikacja] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.ejb.Ejb3Configuration
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:124)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
	at devcastzone.javaee.servlety.WitajSwiecieServlet.doGet(WitajSwiecieServlet.java:32)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
	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)
0

Musisz mieć te same wersje bo nie masz pewności że API się gdzieś po drodze nie zmieniło. Poza tym chyba za bardzo kombinujesz. Nie wystarczy czasem samo

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernateVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernateVersion}</version>
        </dependency>

?

0

Zarówno hibernate-core jak i hibernate-entitymanager mam w tej samej wersji (4.2.2 final). Niestety program nadal się wysypuje, teraz dostaję taki błąd:

 
SEVERE: Servlet.service() for servlet [Witaj swiecie] in context with path [/PierwszaAplikacja] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.ejb.Ejb3Configuration
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
	at devcastzone.javaee.servlety.WitajSwiecieServlet.doGet(WitajSwiecieServlet.java:32)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
	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)
0

A pakuje ci te zależności do wara jak tą aplikację budujesz? A jesteś pewien że nie masz żadnych innych zależności hibernate w innych wersjach? Albo innej biblioteki która ciągnie hibernate w innej wersji?

0

wrzuc prosze kod konfiguracji servletu, jpa oraz drzewko biblioteki

0

Wrzucam kolejne pliki, mam nadzieję że to o to chodziło:

web.xml

 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>PierwszaAplikacja</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Witaj swiecie</servlet-name>
    <servlet-class>devcastzone.javaee.servlety.WitajSwiecieServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Witaj swiecie</servlet-name>
    <url-pattern>/witaj</url-pattern>
    <url-pattern>/pierwszy</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>Lista uzytkownikow</servlet-name>
    <servlet-class>devcastzone.javaee.servlety.ListaUzytkownikSerwlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Lista uzytkownikow</servlet-name>
    <url-pattern>/drugi</url-pattern>
    <url-pattern>/lista</url-pattern>
  </servlet-mapping>
  <listener>
    <listener-class>devcastzone.javaee.sluchacze.SluchaczKontekstu</listener-class>
  </listener>
  
  
  <login-config>
  	<auth-method>BASIC</auth-method>
  </login-config>
  <security-role>
  	<role-name>admin</role-name>
  </security-role>
  <security-role>
  	<role-name>uzytkownik</role-name>
  </security-role>
  <security-constraint>
  	<web-resource-collection>
  		<web-resource-name>RegulaBezpieczenstwa</web-resource-name>
  		<url-pattern>*.jsp</url-pattern>
  		<http-method>GET</http-method>
  	</web-resource-collection>
  	<auth-constraint>
  		<role-name>admin</role-name>
  	</auth-constraint>
  	<user-data-constraint>
  		<transport-guarantee>NONE</transport-guarantee>
  	</user-data-constraint>
  </security-constraint>
</web-app>

Plik persistence.xml

 
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
	<persistence-unit name="PierwszaAplikacja" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>devcastzone.javaee.Uzytkownik</class>
		<properties>
			<property name="hibernate.connection.username" value="root"/>
			<property name="hibernate.connection.password" value=""/>
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost/szkolenie_javaee?characterEncoding=utf8"/>
			<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
		</properties>
	</persistence-unit>
</persistence>

I obraz z drzewkiem plików w projekcie.

0

Wszystko wydaje się ok, na tyle na ile się znam @Shalom dobrze mówi, zobacz lib na serwerze, bo może być tak, że przez mieszanie w bibliotekach masz różne biblioteki na serwerze i się aplikacja gubi

0

Gdyby ktoś miał problem i szukał rozwiązania. U mnie przyczyną takiego błędu było złe utworzenie artifactu w IDEI. Folder wrzucany do np Glassfisha musi miec plik persistence.xml w: out/NAZWA/WEB-INF/classes/META-INF/persistence.xml

1 użytkowników online, w tym zalogowanych: 0, gości: 1