Я занимаюсь этой проблемой более недели ...
Я довольно новичок в мире 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
в разные места без успеха.
Вот мое текущее дерево файлов:
Что я должен делать дляизбежать этой ошибки и заставить Hibernate работать со Glassfish? Наконец, как только я решу эту проблему, что я должен знать, чтобы заставить это работать на рабочем сервере?
EDIT : Добавлены библиотеки Hibernate в Glassfish в Intellij Project Structure > Artifacts
и, наконец,это работает!