Jak mogę uzyskać wszystkie klasy @Entity z jednostki trwałości?

Problem

Piszę samodzielny program narzędziowy, który, biorąc pod uwagę słoik zawierający jednostkę trwałości z adnotacjami JPA-2, musi programowo uzyskać listę wszystkich moich klas @Entity w określonej jednostce trwałości.

Chciałbym zdecydować, które z dwóch podejść byłoby sposobem na uzyskanie tych informacji i dlaczego; lub jeśli jest inny lepszy sposób, o którym nie pomyślałem.

Rozwiązanie 1

Program Java umieszcza jar w ścieżce klasy, tworzy jednostkę trwałości z klas w jar przy użyciu metodologii JavaSE. Następnie używa klas javax.persistence, aby uzyskać metamodel JPA, wyciągając z niego listę żetonów klas.

<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>
Rozwiązanie 2

Program skanuje katalogi i pliki wewnątrz określonego jar dla plików persistence.xml, a następnie znajduje katalog o określonej nazwie jednostki trwałości. Następnie XPath plik, aby uzyskać listę<class> Elementy XML i stamtąd w pełni kwalifikowane nazwy klas. Z nazwisk buduj żetony klas.

Ograniczenia / obawyJeśli to możliwe, chciałbym przejść z podejściem 1.To narzędzie NIE uruchomi się wewnątrz kontenera, ale jar jest projektem EJB zaprojektowanym do uruchamiania wewnątrz niego. Jak to będzie problem?Narzędzie będzie miało dostęp do Open-EJB w ścieżce klasy, aby uzyskać implementacje wszystkich klas Java EE 6.Mimo że projekt EJB został zaprojektowany do pracy na Hibernate, narzędzie nie powinno być specyficzne dla Hibernate.Czy są jakieś przeszkody?

questionAnswers(2)

yourAnswerToTheQuestion