Como posso obter todas as classes @Entity de uma unidade de persistência?

Problema

Estou escrevendo um programa utilitário autônomo que, dado um jar contendo uma unidade de persistência anotada JPA-2, precisa obter, por programação, uma lista de todas as minhas classes @Entity em uma determinada unidade de persistência.

Eu gostaria de decidir qual das duas abordagens seria o caminho a percorrer para obter essa informação e por quê; ou se há outra maneira melhor que eu não tenha pensado.

Solução 1

O programa Java coloca o jar no classpath, cria a unidade de persistência das classes no jar usando as metodologias JavaSE. Em seguida, ele usa as classes javax.persistence para obter o Metamodelo JPA, retirando a lista de tokens de classe.

<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>
Solução 2

Programe a varredura dos diretórios e arquivos dentro do jar especificado para arquivos persistence.xml, e encontre um com o nome da unidade de persistência especificada. Em seguida, XPath o arquivo para obter a lista de<class> Elementos XML e leia os nomes de classe completos a partir daí. De nomes, construa tokens de classe.

Restrições / PreocupaçõesEu gostaria de ir com a abordagem 1, se possível.Este utilitário NÃO será executado dentro de um contêiner, mas o jar é um projeto EJB projetado para ser executado dentro de um. Como isso será um problema?O utilitário terá o Open-EJB disponível no caminho de classe para obter implementações de todas as classes do Java EE 6.Embora o projeto EJB seja construído para ser executado no Hibernate, o utilitário não deve ser específico do Hibernate.Existem alguns obstáculos?

questionAnswers(2)

yourAnswerToTheQuestion