Olá pessoal!
Estou desenvolvendo uma pequena aplicação formada por um projeto EJB e um projeto Web.
Inicialmente, criei no próprio projeto EJB um package para as minhas entidades (classes anotadas com javax.persistence.Entity), e um método de pesquisa simples na classe do EJB:
public List<Especie> getEspecies() {
Query q = em.createQuery("select esp from mytests.entities.Especie esp");
return q.getResultList();
Dessa maneira tudo funcionou perfeitamente, na inicialização o servidor carregava as entidades e gerava as tabelas no banco:
[EntityBinder] Bind entity mytests.entities.Especie on table especies
... Bind das outras entidades ....
[SchemaUpdate] updating schema
[DatabaseMetadata] table not found: especies
... depois vinham as outras tabelas...
[SchemaUpdate] schema update complete
E o melhor de tudo, ao chamar aquele método de pesquisa lá em cima ele trazia corretamente os resultados.
Mas aí o tonto aqui resolveu zuar o barraco: eu arranquei o pacote de entidades do projeto EJB e o coloquei em um projeto à parte, para que eu possa gerar um .jar comum que depois seria reaproveitado no lado Cliente (no caso, a aplicação Web).
Incluí esse jar de entidades no EAR do EJB, e a partir de então AS ENTIDADES NÃO SÃO MAIS CARREGADAS, apesar de as classes estarem no classpath pois não ocorre nenhum erro de ClassNotFound ou algo do tipo.
Na inicialização do servidor não aparecem mais as mensagens de “bind”, e onde deveria criar as tabelas aparece simplesmente isso:
[SchemaUpdate] updating schema
[SchemaUpdate] schema update complete
Ou seja, como se as entidades não existissem.
E ao chamar o método, a seguinte mensagem aparece no log:
O retorno é uma lista vazia, nenhuma exceção é lançada.
Também tentei colocar esse .jar de entidades no diretório lib do servidor e o resultado foi o mesmo.
Bom… resumindo, minhas dúvidas são as seguintes:
Como é que funciona esse negócio de encontrar as entidades? É feito algum tipo de “escaneamento” de todas as classes da aplicação?
Por que as classes do JAR não são encontradas, apenas as que fazem parte do próprio projeto EJB?
Teria algum jeito de forçar o servidor a olhar para minhas classes e entende-las como entidades?
Qualquer informação será bem-vinda, obrigado!