Bueno, ми танго aplicación веб-que tiene el backend en Java
довод "против" y que trabaja Hibernate
, Jackson
(para el parseo de json objetos y наоборот) y Jersey
para la API Rest. El problema es que cuando le pongo "запускает" al слугу (Tomcat 8
) танго una java.lang.NoDefClassFoundException
diciendo que no encuentra la clase Persistence
, pero lo raro es que tengo la dependencia de Hibernate 5.2.7
(que supuestamente trae la jpa-api
обманный su propia implementación de la clase Persistence
) y никакой se porque я sigue saliendo ese ошибка. Я fijo en las dependencias de Maven y el paquete javax.persistence
está ahí, y también la clase Persistence
, por lo танто никакой Эстар se que es lo que puede pasando. Фургон Ya 2 días enteros que le voy dedicando а-ля búsqueda de la solución pero никакой la он podido encontrar.
Cualquier ayuda es muy agradecida. Les dejo el pom.xml
y el árbol de archivos que tengo.
PD: Estoy trabajando подставляют Идею IntelliJ, никакой se si eso afectará en algo (por ej. алгоритм que haya que configurar que эй никакой sepa o este pasando por альт).
pom.xml
:
4.0.0
MissingDog
MissingDog
war
1.0-SNAPSHOT
MissingDog Maven Webapp
http://maven.apache.org
junit
junit
3.8.1
test
org.postgresql
postgresql
9.4.1212
org.hibernate
hibernate-entitymanager
5.0.2.Final
com.fasterxml.jackson.core
jackson-annotations
2.8.6
com.fasterxml.jackson.core
jackson-core
2.8.6
com.fasterxml.jackson.core
jackson-databind
2.8.6
javax.ws.rs
javax.ws.rs-api
2.0.1
org.glassfish.jersey.core
jersey-client
2.25
org.glassfish.jersey.containers
jersey-container-servlet
2.25
org.glassfish.jersey.core
jersey-server
2.25
org.jboss.spec.javax.servlet
jboss-servlet-api_3.1_spec
1.0.0.Final
MissingDog
Править: Añado la stack trace del error:
28-Jan-2017 13:25:49.478 SEVERE [RMI TCP Connection(7)-127.0.0.1] org.apache.catalina.core.StandardContext.listenerStart Excepción enviando evento inicializado de contexto a instancia de escuchador de clase controllers.MissingDogListener
java.lang.NoClassDefFoundError: javax/persistence/Persistence
at util.JPAUtil.buildEntityManagerFactory(JPAUtil.java:15)
at controllers.MissingDogListener.contextInitialized(MissingDogListener.java:26)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1696)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:484)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:433)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:324)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: javax.persistence.Persistence
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1332)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166)
... 47 more
28-Jan-2017 13:25:49.482 SEVERE [RMI TCP Connection(7)-127.0.0.1] org.apache.catalina.core.StandardContext.listenerStop Excepción enviando evento de contexto destruído a instancia de escuchador de clase controllers.MissingDogListener
java.lang.NoClassDefFoundError: javax/persistence/EntityManagerFactory
at util.JPAUtil.shutdown(JPAUtil.java:30)
at controllers.MissingDogListener.contextDestroyed(MissingDogListener.java:18)
at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4889)
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5526)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:224)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:159)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1696)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:484)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:433)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:324)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: javax.persistence.EntityManagerFactory
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1332)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166)
... 48 more
РЕДАКТИРОВАНИЕ 2: JPAUtil.java
:
package util;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUtil {
private static EntityManagerFactory emf = null;
public static void buildEntityManagerFactory(String persistenceUnitName) {
if(emf == null) {
try {
emf = Persistence.createEntityManagerFactory(persistenceUnitName);
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
}
public static EntityManager getEntityManager() {
if(emf == null)
return null;
else
return emf.createEntityManager();
}
public static void shutdown() {
if(emf.isOpen()) emf.close();
}
}
persistence.xml
:
MascotaDAO
:
package dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.TypedQuery;
import model.Mascota;
import util.JPAUtil;
public class MascotaDAO {
public void guardar(Mascota entity) throws Exception {
//Creo el pool de conexiones si es que no esta creado
// try {
// JPAUtil.buildEntityManagerFactory("MissingDog");
// } catch (Exception e) {
// throw new ExceptionInInitializerError(e);
// }
//Tomo una conexion y creo una transaccion
EntityManager em = JPAUtil.getEntityManager();
EntityTransaction txn = em.getTransaction();
//Guardo la mascota
try {
txn.begin();
em.persist(entity);
txn.commit();
} catch (Exception e) {
if(txn.isActive())
txn.rollback();
throw new Exception(e);
}
finally {
em.close();
}
}
public void eliminar(Integer id) throws Exception {
//Creo el pool de conexiones si es que no esta creado
// try {
// JPAUtil.buildEntityManagerFactory("MissingDog");
// } catch (Exception e) {
// throw new ExceptionInInitializerError(e);
// }
//Tomo una conexion y busco todas las mascotas cargadas en la base de datos
EntityManager em = JPAUtil.getEntityManager();
TypedQuery query = em.createQuery("SELECT m FROM Mascota m WHERE m.id=" + id, Mascota.class);
Mascota mascota = query.getSingleResult();
//Elimino la mascota
EntityTransaction txn = em.getTransaction();
try {
txn.begin();
em.remove(mascota);
txn.commit();
} catch (Exception e) {
if(txn.isActive())
txn.rollback();
throw new Exception(e);
}
finally {
em.close();
}
}
public void actualizar(Mascota entity) throws Exception {
//Creo el pool de conexiones si es que no esta creado
// try {
// JPAUtil.buildEntityManagerFactory("MissingDog");
// } catch (Exception e) {
// throw new ExceptionInInitializerError(e);
// }
//Tomo una conexion y creo una transaccion
EntityManager em = JPAUtil.getEntityManager();
EntityTransaction txn = em.getTransaction();
Mascota mascota = null;
try {
txn.begin();
//Busco la mascota para comprobar que este en la base de datos
mascota = em.find(Mascota.class, entity);
//La actualizo si es que est�
if(mascota != null) {
em.merge(mascota);
txn.commit();
}
} catch (Exception e) {
if(txn.isActive() && mascota != null)
txn.rollback();
throw new Exception(e);
}
finally {
em.close();
}
}
public List buscarPorRaza(String raza) {
//Creo el pool de conexiones si es que no esta creado
// try {
// JPAUtil.buildEntityManagerFactory("MissingDog");
// } catch (Exception e) {
// throw new ExceptionInInitializerError(e);
// }
//Tomo una conexion y busco todas las mascotas con esa raza
EntityManager em = JPAUtil.getEntityManager();
TypedQuery query = em.createQuery("SELECT m FROM Mascota m WHERE m.raza=" + raza, Mascota.class);
List mascotas = query.getResultList();
return mascotas;
}
public List listarMascotas() {
//Creo el pool de conexiones si es que no esta creado
// try {
// JPAUtil.buildEntityManagerFactory("MissingDog");
// } catch (Exception e) {
// throw new ExceptionInInitializerError(e);
// }
//Tomo una conexion y busco todas las mascotas
EntityManager em = JPAUtil.getEntityManager();
TypedQuery query = em.createQuery("SELECT m FROM Mascota m", Mascota.class);
List mascotas = query.getResultList();
return mascotas;
}
}
Тебе не хватает зависимости
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.6.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.6.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
Также ты можешь менять Гєltima из-за нее declaraciГіn затмения
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.1.0</version>
</dependency>
EstГЎs работая с EntityManagers, с тем, что я понимаю, ты нуждаешься в том, чтобы сменить твою зависимость
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.7.Final</version>
</dependency>
на
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.2.Final</version>
</dependency>
С другой стороны, necesitarГЎs файл META-INF/persistence.xml, что не sГ© если habrГЎs созданный. Для mГЎs informaciГіn, консультирует ее documentaciГіn hibernate + JPA aquГ - .
Query q1 = em.createQuery("SELECT m FROM Mascota m");
илиTypedQuery<Mascota> q2 = em.createQuery("SELECT m FROM Mascota m", Mascota.class);
– Danyel Cabello 30.01.2017, 20:14