Hibernate - Persistence API - EntityManagerFactory rzuca wyjątkiem

0

Staram przerobić sobie pewną małą aplikację korzystająca z Hibernate na JPA... Mój persistence.xml wygląda tak

<?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="hibernate_JPA" transaction-type="RESOURCE_LOCAL">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
   
      <class>klasa1</class>
      <class>klasa2</class>

      <properties>
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />
        <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://192.168.0.7:5432/baza"/>
        <property name="javax.persistence.jdbc.user" value="java-process"/>
        <property name="javax.persistence.jdbc.password" value="haslo"/>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
 	<property name="hibernate.c3p0.min_size" value="5" />
  	<property name="hibernate.c3p0.max_size" value="20" />
  	<property name="hibernate.c3p0.timeout" value="300" />
  	<property name="hibernate.c3p0.max_statements" value="50" />
  	<property name="hibernate.c3p0.idle_test_period" value="3000" />
      </properties>
      
   </persistence-unit>
</persistence>

Fragment kodu klasy, która ma coś robić z bazą danych wygląda tak:

	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	public Response rxMessageHandler(String data) {
		
//		Configuration configuration = new Configuration();
//        configuration.configure("/hconfig/hibernate.cfg.xml"); // configures settings from hibernate.cfg.xml
//		SessionFactory sessionFactory = configuration.buildSessionFactory();
		
	    EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "hibernate_JPA" );
	      
	    EntityManager entitymanager = emfactory.createEntityManager( );

(....)

Program wykrzacza się w taki sposób jak poniżej

SEVERE: Servlet.service() for servlet [RX Data Webservice] in context with path [/rxWS] threw exception [javax.persistence.PersistenceException: No Persistence provider for EntityManager named hibernate_JPA] with root cause
javax.persistence.PersistenceException: No Persistence provider for EntityManager named hibernate_JPA

Mam wrażenie, że JPA nie wie gdzie jest zlokalizowany plik persistence.xml .. Projekt pisze w Eclipse (Dynamic Web Project) i mam go w: WebContent/WEB-INF/persistence.xml .. Może mam źle skonfigurowane środowisko?

0

Nie, masz plik w złym miejscu. Powinien być w META-INF.

0

Pardon... On już jest w WebContent/META-INF... Palnąłem literówkę w pierwszym poście

0

A czemu próbujesz to tworzyć ręcznie zamiast wstrzykiwać sobie w tej klasie

@PersistenceContext(unitName = "hibernate_JPA")
private EntityManager em;

?

0

Wróciłem do tego problemu po kilku dniach. Wrzuciłem sobie to wstrzyknięcie w klasę w której siedzi: public Response rxMessageHandler(String data); . Teraz wygląda to w sposób taki jak poniżej ale dostaję NullPointerException gdy próbuje cokolwiek robić z tym entitymanagerem. Podświadomie wyczuwam, że problem leży w samym Eclipsie (wcześniej miałem podobnie z innymi rzeczami), który ma niepoprawnie skonfigurowane ścieżki do wszystkiego w tym projekcie. Próbowałem przenosić persistence.xml po różnych miejscach w drzewku projektu ale nie dało to żadnej poprawy...

@Path("/rxMessageHandler")
public class RxMessageHandler {

	@PersistenceContext(unitName = "hibernate_JPA")
	private EntityManager entitymanager;
	
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	public Response rxMessageHandler(String data) {
		
//		Configuration configuration = new Configuration();
//        configuration.configure("/hconfig/hibernate.cfg.xml"); // configures settings from hibernate.cfg.xml
//		SessionFactory sessionFactory = configuration.buildSessionFactory();
		
// TO ZOSTAŁO ZAKOMENTOWANE
//	    EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "hibernate_JPA" );
//	      
//	    EntityManager entitymanager = emfactory.createEntityManager( );
		
	    // Jackson
		ObjectMapper objectMapper = new ObjectMapper();
		JsonNode rootNode = null;
0

Jakbyś dał jakiś link do repo to można by coś poradzić a tak to mozemy co najwyżej zgadywać.

0

No niestety całego projektu nie będę mógł raczej wrzucić (firma). Przy okazji zrobiłem rzecz podstawową z podstawowych i gdzieś na początku metody wrzuciłem sobie listowanie plików w "." i okazało się, że jako Working Directory jest ustawiony mój katalog domowy. Zmieniłem więc Debug Configuration na coś takiego:

Przechwycenie obrazu ekranu_2016-10-18_15-20-22.png

i w momencie gdy robię

		File d = new File(".");
		File[] pliki = d.listFiles();

to mam już tylko META-INF i WEB-INF czyli niby tak jak powinno. Co nie zmienia faktu, że dalej nie działa i rzuca tym samym wyjątkiem co na początku :/ Cały kod tej klasy wygląda tak (projekt NIE jest Mavenovy)


@SuppressWarnings("unused")
@Path("/rxMessageHandler")
public class RxMessageHandler {

//	@PersistenceContext(unitName = "hibernate_JPA")
//	private EntityManager entitymanager;
	
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	public Response rxMessageHandler(String data) {

		
		File d = new File(".");
		File[] pliki = d.listFiles();
		
	    EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "hibernate_JPA" );
//	      
	    EntityManager entitymanager = emfactory.createEntityManager( );
		
	    // Jackson
		ObjectMapper objectMapper = new ObjectMapper();
		JsonNode rootNode = null;
		JsonNode nodeRx = null;
		JsonNode noteGwrx;

		try {
			// parsowanie drzewa JSON z zapytania http-post
			rootNode = objectMapper.readTree(data);
		} catch (JsonProcessingException e) {
			// TODO Auto-generated catch block
			System.out.println("-- JsonProcessingException");
			System.out.println("- Zawartosc JSON: " + data.toString());
			System.out.println("- Koniec zawartosci");
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		MessageRx msgRx = new MessageRx();
		
		try {
			msgRx = objectMapper.readValue(data, MessageRx.class);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		Rx rx = msgRx.getRx();
		RawPayloads rp = new RawPayloads();
		
		rp.setMoteeui(Long.parseLong(rx.getMoteeui(), 16));
		rp.setPayload(rx.getUserdata().getPayload());
		rp.setPayloadDecoded(Base64.getDecoder().decode(rp.getPayload()));
		rp.setPort((byte)rx.getUserdata().getPort());
		
	    entitymanager.getTransaction( ).begin( );
	    entitymanager.persist( rp );
	    entitymanager.getTransaction( ).commit( );

	    entitymanager.close( );

		
		LoraMessage lm = GupsyParser.parse(rp.getPayloadDecoded(), rp.getPort());
		
		return null;
	}
}

Drzewko projektu wygląda tak:
Przechwycenie obrazu ekranu_2016-10-18_15-26-17.png

A struktura katalogów tak:

.:
razem 32
drwxrwxr-x 6 mlubecki mlubecki 4096 paź 18 15:25 .
drwxrwxr-x 32 mlubecki mlubecki 4096 paź 18 15:14 ..
drwxrwxr-x 3 mlubecki mlubecki 4096 paź 18 15:25 build
-rw-rw-r-- 1 mlubecki mlubecki 822 paź 13 18:08 .classpath
-rw-rw-r-- 1 mlubecki mlubecki 1006 paź 7 15:05 .project
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 7 15:05 .settings
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 18 14:55 src
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 18 14:55 WebContent

./build:
razem 12
drwxrwxr-x 3 mlubecki mlubecki 4096 paź 18 15:25 .
drwxrwxr-x 6 mlubecki mlubecki 4096 paź 18 15:25 ..
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 18 15:25 classes

./build/classes:
razem 8
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 18 15:25 .
drwxrwxr-x 3 mlubecki mlubecki 4096 paź 18 15:25 ..

./.settings:
razem 32
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 7 15:05 .
drwxrwxr-x 6 mlubecki mlubecki 4096 paź 18 15:25 ..
-rw-rw-r-- 1 mlubecki mlubecki 555 paź 7 15:05 .jsdtscope
-rw-rw-r-- 1 mlubecki mlubecki 357 paź 7 15:05 org.eclipse.jdt.core.prefs
-rw-rw-r-- 1 mlubecki mlubecki 471 paź 13 18:08 org.eclipse.wst.common.component
-rw-rw-r-- 1 mlubecki mlubecki 324 paź 7 15:05 org.eclipse.wst.common.project.facet.core.xml
-rw-rw-r-- 1 mlubecki mlubecki 49 paź 7 15:05 org.eclipse.wst.jsdt.ui.superType.container
-rw-rw-r-- 1 mlubecki mlubecki 6 paź 7 15:05 org.eclipse.wst.jsdt.ui.superType.name

./src:
razem 20
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 18 14:55 .
drwxrwxr-x 6 mlubecki mlubecki 4096 paź 18 15:25 ..
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 13 17:48 hconfig
-rw-rw-r-- 1 mlubecki mlubecki 1514 paź 7 14:28 Main.java
drwxrwxr-x 3 mlubecki mlubecki 4096 wrz 28 13:30 pl

./src/hconfig:
razem 12
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 13 17:48 .
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 18 14:55 ..
-rw-rw-r-- 1 mlubecki mlubecki 1985 paź 10 15:20 hibernate.cfg.xml

./src/pl:
razem 12
drwxrwxr-x 3 mlubecki mlubecki 4096 wrz 28 13:30 .
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 18 14:55 ..
drwxrwxr-x 3 mlubecki mlubecki 4096 wrz 28 13:30 ****

./src/pl/***:
razem 12
drwxrwxr-x 3 mlubecki mlubecki 4096 wrz 28 13:30 .
drwxrwxr-x 3 mlubecki mlubecki 4096 wrz 28 13:30 ..
drwxrwxr-x 3 mlubecki mlubecki 4096 wrz 28 13:30 ******

./src/pl//:
razem 12
drwxrwxr-x 3 mlubecki mlubecki 4096 wrz 28 13:30 .
drwxrwxr-x 3 mlubecki mlubecki 4096 wrz 28 13:30 ..
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 10 10:08 ********

./src/pl///******:
razem 16
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 10 10:08 .
drwxrwxr-x 3 mlubecki mlubecki 4096 wrz 28 13:30 ..
drwxrwxr-x 5 mlubecki mlubecki 4096 paź 10 14:40 kerlink
drwxrwxr-x 3 mlubecki mlubecki 4096 paź 10 10:08 sensors

./src/pl///******/kerlink:
razem 20
drwxrwxr-x 5 mlubecki mlubecki 4096 paź 10 14:40 .
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 10 10:08 ..
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 10 14:41 db
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 18 13:35 json
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 18 15:14 ws

./src/pl///******/kerlink/db:
razem 16
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 10 14:41 .
drwxrwxr-x 5 mlubecki mlubecki 4096 paź 10 14:40 ..
-rw-rw-r-- 1 mlubecki mlubecki 90 paź 10 14:40 package-info.java
-rw-rw-r-- 1 mlubecki mlubecki 1441 paź 12 11:16 RawPayloads.java

./src/pl///******/kerlink/json:
razem 32
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 18 13:35 .
drwxrwxr-x 5 mlubecki mlubecki 4096 paź 10 14:40 ..
-rw-rw-r-- 1 mlubecki mlubecki 968 paź 10 13:22 GwRX.java
-rw-rw-r-- 1 mlubecki mlubecki 227 paź 10 13:16 MessageRx.java
-rw-rw-r-- 1 mlubecki mlubecki 582 paź 10 10:08 MoteTX.java
-rw-rw-r-- 1 mlubecki mlubecki 92 paź 10 10:08 package-info.java
-rw-rw-r-- 1 mlubecki mlubecki 682 paź 10 13:22 Rx.java
-rw-rw-r-- 1 mlubecki mlubecki 874 paź 10 13:22 UserData.java

./src/pl///******/kerlink/ws:
razem 16
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 18 15:14 .
drwxrwxr-x 5 mlubecki mlubecki 4096 paź 10 14:40 ..
-rw-rw-r-- 1 mlubecki mlubecki 90 paź 10 10:08 package-info.java
-rw-rw-r-- 1 mlubecki mlubecki 3516 paź 18 15:17 RxMessageHandler.java

./src/pl///******/sensors:
razem 12
drwxrwxr-x 3 mlubecki mlubecki 4096 paź 10 10:08 .
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 10 10:08 ..
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 7 14:56 xxxxx

./src/pl///******sensors/xxxxx:
razem 16
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 7 14:56 .
drwxrwxr-x 3 mlubecki mlubecki 4096 paź 10 10:08 ..
drwxrwxr-x 2 mlubecki mlubecki 4096 wrz 28 10:10 data
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 12 10:51 parser

./src/pl///******/sensors/xxxxxx/data:
razem 16
drwxrwxr-x 2 mlubecki mlubecki 4096 wrz 28 10:10 .
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 7 14:56 ..
-rw-rw-r-- 1 mlubecki mlubecki 3346 paź 12 13:41 LoraMessage.java
-rw-rw-r-- 1 mlubecki mlubecki 98 wrz 28 10:10 package-info.java

./src/pl///******/sensors/xxxxxxx/parser:
razem 16
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 12 10:51 .
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 7 14:56 ..
-rw-rw-r-- 1 mlubecki mlubecki 2249 paź 12 12:30 xxxxxParser.java
-rw-rw-r-- 1 mlubecki mlubecki 100 paź 7 14:56 package-info.java

./WebContent:
razem 16
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 18 14:55 .
drwxrwxr-x 6 mlubecki mlubecki 4096 paź 18 15:25 ..
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 13 17:48 META-INF
drwxrwxr-x 3 mlubecki mlubecki 4096 paź 18 13:53 WEB-INF

./WebContent/META-INF:
razem 16
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 13 17:48 .
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 18 14:55 ..
-rw-rw-r-- 1 mlubecki mlubecki 39 paź 7 15:05 MANIFEST.MF
-rw-rw-r-- 1 mlubecki mlubecki 1458 paź 13 17:47 persistence.xml

./WebContent/WEB-INF:
razem 16
drwxrwxr-x 3 mlubecki mlubecki 4096 paź 18 13:53 .
drwxrwxr-x 4 mlubecki mlubecki 4096 paź 18 14:55 ..
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 7 15:24 lib
-rw-rw-r-- 1 mlubecki mlubecki 866 paź 10 10:09 web.xml

./WebContent/WEB-INF/lib:
razem 30204
drwxrwxr-x 2 mlubecki mlubecki 4096 paź 7 15:24 .
drwxrwxr-x 3 mlubecki mlubecki 4096 paź 18 13:53 ..
-rw-rw-r-- 1 mlubecki mlubecki 445288 cze 19 2014 antlr-2.7.7.jar
-rw-r--r-- 1 mlubecki mlubecki 14765 paź 7 2015 aopalliance-repackaged-2.4.0-b31.jar
-rw-r--r-- 1 mlubecki mlubecki 379036 paź 7 2015 asm-debug-all-5.0.4.jar
(....) i reszta bibliotek

Persistence.xml wygląda niezmiennie tak:

<?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="hibernate_JPA" transaction-type="RESOURCE_LOCAL">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
   
      <class>pl.yyyy</class>
      <class>pl.xxx</class>

      <properties>
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />
        <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://eee/xxxx"/>
        <property name="javax.persistence.jdbc.user" value="java-process"/>
        <property name="javax.persistence.jdbc.password" value="xxx"/>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
 		<property name="hibernate.c3p0.min_size" value="5" />
  		<property name="hibernate.c3p0.max_size" value="20" />
  		<property name="hibernate.c3p0.timeout" value="300" />
  		<property name="hibernate.c3p0.max_statements" value="50" />
  		<property name="hibernate.c3p0.idle_test_period" value="3000" />
      </properties>
      
   </persistence-unit>
</persistence>
0

Przykro mi ale w ciemno się tego nie zdebuguje. Spróbuj to ewentualnie otworzyć w IntelliJ. On ma 6 zmysł jeśli chodzi o fixowanie zrypanych konfiguracji ;]

0

w projekcie maven NetBeans automatycznie dodaje do C:\MojaAplikacja\src\main\resources\META-INF\persistence.xml

1

Z pomocą kumpla udało się to odpallić. Po pierwsze z persistence.xml trzeba było wywalić

<provider>org.hibernate.ejb.HibernatePersistence</provider>

Jak również we właściwościach projektu w Java Build Path -> Source dodać ręcznie katalog resources.

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