Сервер JavaEE Hibernate + Glassfish: нет поставщика сохраняемости для EntityManager - PullRequest
0 голосов
/ 09 ноября 2019

Я занимаюсь этой проблемой более недели ...

Я довольно новичок в мире JaveEE, Hibernate, Glassfish и т. Д.

Яиспользуя JavaEE / Glassfish и Hibernate, чтобы создать небольшой проект для школы.

1) Мы должны получить список рейсов из локальной базы данных, используя Hibernate.
2) Мы должны получить результат через запрос GET с использованием REST-api

Мой класс "маршрутизации":

package routes;

import DAO.DAOUtilisateurs;
import DAO.DaoVolsManager;
import controllers.VolsBD;
import models.Vol;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.List;

@Path("/vols")
public class Vols {

    DaoVolsManager manager = new DaoVolsManager();

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Vol> getVol() {

        return manager.getAllVols();
    }
}

Относится к моему классу управления объектами управления полетами DAOVolsManager:

package DAO;

import com.sun.istack.NotNull;
import models.Vol;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class DaoVolsManager {

    // Create an EntityManagerFactory when you start the application.
    private static final EntityManagerFactory ENTITY_MANAGER_FACTORY = Persistence
            .createEntityManagerFactory("VolDB");

    /**
     * Renvoie tous les vols de la base
     * @return Liste de vols
     */
    public List<Vol> getAllVols() {
        List<Vol> vols = new ArrayList<>();

        EntityManager manager = ENTITY_MANAGER_FACTORY.createEntityManager();

        try {
            vols = manager.createQuery("FROM Vol", Vol.class).getResultList();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            manager.close();
        }
        return vols;
    }
}

Hibernate persistence.xml file:

<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="VolDB" transaction-type="RESOURCE_LOCAL">
        <!-- Persistence provider -->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <!-- Entity classes -->
        <class>models.Vol</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/vols" />
            <property name="javax.persistence.jdbc.user" value="**myusername**" />
            <property name="javax.persistence.jdbc.password" value="**mypassword**" />
        </properties>
    </persistence-unit>
</persistence>

Вот проблема : когда я получаю данные в Main классе ...

import models.Vol;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.List;

public class Main {
    // Create an EntityManagerFactory when you start the application.
    private static final EntityManagerFactory ENTITY_MANAGER_FACTORY = Persistence
            .createEntityManagerFactory("VolDB");

    public static void main(String[] args) {

        // Print all the Students
        List<Vol> vols = readAll();
        if (vols != null) {
            for (Vol v : vols) {
                System.out.println(v.getNumVol());
            }
        }

        // NEVER FORGET TO CLOSE THE ENTITY_MANAGER_FACTORY
        ENTITY_MANAGER_FACTORY.close();
    }

    /**
     * Read all the Students.
     *
     * @return a List of Vols
     */
    public static List readAll() {

        List vols = null;

        // Create an EntityManager
        EntityManager manager = ENTITY_MANAGER_FACTORY.createEntityManager();
        EntityTransaction transaction = null;

        try {
            // Get a transaction
            transaction = manager.getTransaction();
            // Begin the transaction
            transaction.begin();

            // Get a List of Students
            vols = manager.createQuery("SELECT v FROM Vol v",
                    Vol.class).getResultList();

            // Commit the transaction
            transaction.commit();
        } catch (Exception ex) {
            // If there are any exceptions, roll back the changes
            if (transaction != null) {
                transaction.rollback();
            }
            // Print the Exception
            ex.printStackTrace();
        } finally {
            // Close the EntityManager
            manager.close();
        }
        return vols;
    }
}

... все работает нормально, и данные отображаютсяв локальной консоли, но как только я пытаюсь получить данные, запустив свой сервер Glassfish и набрав в браузере good url, я получаю Error 500: Internal Server Error, говорящий javax.persistence.PersistenceException: No Persistence provider for EntityManager named VolDB

Я пыталсячтобы переместить мой persistence.xml в разные места без успеха.

Вот мое текущее дерево файлов:
project file tree

Что я должен делать дляизбежать этой ошибки и заставить Hibernate работать со Glassfish? Наконец, как только я решу эту проблему, что я должен знать, чтобы заставить это работать на рабочем сервере?

EDIT : Добавлены библиотеки Hibernate в Glassfish в Intellij Project Structure > Artifacts и, наконец,это работает!

...