¿Cómo puedo obtener todas las clases de @Entity de una Unidad de Persistencia?

Problema

Estoy escribiendo un programa de utilidad independiente que, dado un tarro que contiene una unidad de persistencia anotada JPA-2, necesita obtener mediante programación una lista de todas mis clases de @Entity en una unidad de persistencia particular.

Me gustaría decidir cuál de los 2 enfoques sería el camino a seguir para obtener esta información y por qué; O si hay otra forma mejor que no haya pensado.

Solución 1

El programa Java pone jar en el classpath, crea una unidad de persistencia a partir de las clases en el jar usando metodologías JavaSE. Luego usa las clases javax.persistence para obtener el Metamodelo JPA, retira la lista de tokens de clase de eso.

<code>EntityManagerFactory emf = Persistence.createEntityManagerFactory("MY_ PERSISTENCE_UNIT");
Metamodel mm = emf.getMetamodel();

// loop these, using getJavaType() from Type sub-interface to get 
// Class tokens for managed classes.
mm.getManagedTypes();
</code>
Solucion 2

El programa escanea los directorios y archivos dentro del jar especificado para los archivos persistence.xml, luego encuentra uno con el nombre de unidad de persistencia especificado. Luego XPath el archivo para obtener la lista de<class> Elementos XML y leer los nombres de clase completos desde allí. A partir de nombres, construir tokens de clase.

Restricciones / PreocupacionesMe gustaría ir con el enfoque 1 si es posible.Esta utilidad NO se ejecutará dentro de un contenedor, pero el jar es un proyecto EJB diseñado para ejecutarse dentro de uno. ¿Cómo será esto un problema?La utilidad tendrá Open-EJB disponible en la ruta de clase para obtener implementaciones de todas las clases de Java EE 6.Aunque el proyecto EJB está diseñado para ejecutarse en Hibernate, la utilidad no debe ser específica de Hibernate.¿Hay algún escollo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta