working tutorial not new from classes java netbeans jpa glassfish

java - tutorial - JPA-Clase de bean de entidad desconocida



netbeans new entity classes from database not working (4)

De acuerdo con el mensaje de error y lo que figura de su código, el error parece estar en el archivo persistence.xml, ¿puede ser un poco más detallado?

Con suerte, puedo explicar este problema correctamente. Tengo 3 clases que tratan con mis entidades.

@MappedSuperclass public abstract class Swab implements ISwab { ... private Collection<SwabAccounts> accounts; ... } @Entity @Table(name="switches") @DiscriminatorColumn(name="type") @DiscriminatorValue(value="DMS500") public class DmsSwab extends Swab implements ISwab, Serializable { ... private ObjectPool pool; ... @Transient public ObjectPool getPool(){ return pool; } ... } @Entity(name="swab_accounts") public class SwabAccounts implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private int swab_account_id; private int swab_id; ... }

Y en un EJB una consulta se está haciendo de esta manera

DmsSwab dms = em.find(DmsSwab.class, 2); List<Swab> s = new ArrayList<Swab>(1); s.add(dms);

Mi persistence.xml se ve así:

<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.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_1_0.xsd"> <persistence-unit name="dflow-pu" transaction-type="RESOURCE_LOCAL"> <provider>oracle.toplink.essentials.PersistenceProvider</provider> <class>com.dcom.sap.dms.DmsSwab</class> <class>com.dcom.sap.jpa.SwabAccounts</class> <properties> <property name="toplink.jdbc.user" value="dflow"/> <property name="toplink.jdbc.password" value="dflow"/> <property name="toplink.jdbc.url" value="jdbc:mysql://itcd-400447:3306/dflow"/> <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/> </properties> </persistence-unit> </persistence>

Me sale este error:

java.lang.IllegalArgumentException: Unknown entity bean class: class com.dcom.sap.dms.DmsSwab, please verify that this class has been marked with the @Entity annotation. com.dcom.sap.SwabException: java.lang.IllegalArgumentException: Unknown entity bean class: class com.dcom.sap.dms.DmsSwab, please verify that this class has been marked with the @Entity annotation. Caused by: java.lang.IllegalArgumentException: Unknown entity bean class: class com.dcom.sap.dms.DmsSwab, please verify that this class has been marked with the @Entity annotation. at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.findInternal(EntityManagerImpl.java:306) at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.find(EntityManagerImpl.java:148)

Estoy ejecutando netbeans 6.1 con la versión de Glassfish que viene con él. MySql 5.0.


define esta entidad en la etiqueta de clase dentro de persistence.xml


Tuve el mismo error y, complementando la información anterior, mi caso era un problema de ClassLoader. Mi aplicación tiene tres archivos. Un ejb-module.jar que depende de app-lib.jar (biblioteca que contiene pojo y entidades de base de datos) y un web-module.war que depende de app-lib.jar.

En la implementación, app-lib.jar fue cargada dos veces por Glassfish. Google, descubrí que debería copiar la aplicación lib.jar a una lib "compartida" en el dominio glassfish. Copié el postgresql.jar a "domain-dir / lib" y mi aplicación-lib.jar a "domain-dir / lib / applibs". Hecho, la aplicación funcionó como un encanto.

La explicación utilizada se puede encontrar aquí: http://docs.oracle.com/cd/E19798-01/821-1752/beade/index.html


Resolví este problema al crear un ContextListener en mi aplicación web, invocando el cierre de la fábrica del administrador de entidades en el contexto de destrucción,:

public void contextDestroyed(ServletContextEvent servletContextEvent) { try { logger.info("contextDestroyed..."); LifeCycleManager lifeCycleManager = ServiceLocator.getLifeCycleManager(); lifeCycleManager.closeEntityManagerFactory(); } catch (Exception e) { logger.error(e.getMessage(), e); } }

También creo un bean con el nombre LifeCycleManager y dentro de ellos invoco un método DAO para cerrar la fábrica del administrador de entidades:

public void closeEntityManagerFactory() throws BusinessException { logger.info("closeEntityManager"); try { logger.info("closing entity manager factory..."); genericDAO.closeEntityManagerFactory(); logger.info("Entity manager factiry closed"); } catch (Exception e) { throw new BusinessException(BusinessErrorCode.CODIGO_EJEMPLO_01, Severity.ERROR); } }

Dentro del DAO:

...

@Autowired private EntityManagerFactory entityManagerFactory;

...

public void closeEntityManagerFactory() { logger.info("closing entity manager factory"); getEntityManagerFactory().close(); logger.info("entity manager factory closed"); }

Al usar esto cada vez que despliegue un cambio desde mi entorno de eclipse, se invoca el contexto de destrucción. Espero poder ayudarlos, mi entorno es WebLogic Server 11gR1 y JPA 1.0.