Problema подставляют aplicaciòn веб-обманного Знатока y, в спящем режиме

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
  

arbol de dependencias: dependencias

Править: 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;
    }
}

1
задан 30.01.2017, 21:00
2 ответа

Тебе не хватает зависимости

<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>
1
ответ дан 24.11.2019, 11:23
  • 1
    у меня выходит другая ошибка, если я добавляю эту зависимость " method createQuery in интерфейс javax.persistence. EntityManager cannot be applied to given types; [ОШИБКА] required: java.lang. String [ОШИБКА] found: java.lang. String, java.lang. Class< model. Mascota> [ОШИБКА] reason: настоящий формальный and argument lists differ in length [ОШИБКА]-> [Help 1] ". Это выходит, когда я стараюсь делать ' clean install' с maven – Augusto Herbel 30.01.2017, 20:06
  • 2
    У тебя есть ошибка в линии, где ты используешь createQuery, ты происходишь как query объект, когда это должен бы быть string с JPQL, правильный серьезный синтаксис что-то как 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
  • 3
    TypedQuery< Mascota> query = em.createQuery (" SELECT м FROM Амулет м WHERE m.id =" + пойдите, Mascota.class); это линия, где мне производит ошибку... редкое, - что я это перемещаю как String, но продолжает говорить мне, что он не находит эту версию метода с 2 параметрами. Там добавьте класс, который делает призыв к методу createQuery – Augusto Herbel 30.01.2017, 20:56
  • 4
    Ты прав... зависимость должна быть для JPA 2.0, обновите мой ответ с этой зависимостью – Danyel Cabello 30.01.2017, 21:20
  • 5
    если я меняю зависимость, и мешок та javax.persistence выходит у меня предыдущая ошибка, которая не находит класс Persistence. По какому-то разуму, что я не могу видеть, который, не используй пакет hibernate – Augusto Herbel 30.01.2017, 22:30

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Г - .

0
ответ дан 24.11.2019, 11:23
  • 1
    меня продолжают вытекать та же ошибка..., если я имею persistence.xml созданный и конфигурировавший – Augusto Herbel 29.01.2017, 00:48
  • 2
    какая-то идея о, потому что он может продолжать происходить даже меняя зависимости?? @pablo – Augusto Herbel 30.01.2017, 03:21
  • 3
    Обнови pom.xml и añ ade persistence.xml tambié n. – pablo 30.01.2017, 09:46
  • 4
    añ adido persistence и обновленный pom.xml – Augusto Herbel 31.01.2017, 14:56