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.

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();
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>&nbsp;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?