Как я могу получить все классы @Entity из модуля постоянства?

Problem

Я пишу отдельную служебную программу, которая, учитывая банку, содержащую аннотированный блок персистентности JPA-2, должна программно получить список всех моих классов @Entity в конкретном блоке персистентности.

Я хотел бы решить, какой из двух подходов будет способом получения этой информации и почему; или, если есть другой лучший способ, о котором я не думал.

Solution 1

Программа Java помещает jar в путь к классам, создает единицу постоянства из классов в jar, используя методологии JavaSE. Затем он использует классы javax.persistence для получения метамодели JPA, извлекая из нее список токенов классов.

<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>
Solution 2

Программа сканирует каталоги и файлы в указанном jar на наличие файлов persistence.xml, затем находит один с указанным именем единицы сохраняемости. Затем XPath файл, чтобы получить список<class> XML-элементы и считайте оттуда полные имена классов. Из имен строим токены классов.

Constraints/Concerns I'd like to go with approach 1 if possible. This utility will NOT run inside a container, but the jar is an EJB project designed to run inside one. How will this be a problem? The utility will have Open-EJB available on the classpath to get implementations of all the Java EE 6 classes. Even though the EJB project is built to run on Hibernate, the utility should not be Hibernate-specific. Are there any stumbling blocks?

Ответы на вопрос(2)

Ваш ответ на вопрос