Entity para vários Projetos (Hibernate)

Estou com uma dúvida cruel e não sei como resolver.

É o seguinte, estou projetando um sistema e quero (PRECISO) dividi-los em dois projetos. Isso porque o Projeto A seria o que o usuário realmente utilizaria, com banco de dados próprio. Já o projeto B seria algo mais administrativo, conterá um banco de dados de informações ENORME e com funções extremamente complexas, por isso a ideia de dividi-los.

Minha ideia é passar as informações do B para o A, quando solicitado, por webservice (alguém se opõe?? Aceito outras sugestões). Isso permitirá que eu coloque os sistemas em servidores diferentes sem problema algum. Até aqui ok, é simples e não tenho GRANDES dúvidas.

O projeto B, por exemplo, terá uma tabela e uma classe chamada “movimentos”, com diversos campos. É este projeto que trabalhará com suas informações.

Quando o A pedir determinado “movimento”, o B entregará um objeto da classe movimento. O sistema A guardará o ID de movimentos em suas tabelas para posteriores requisições. A dúvida começa aqui. Como mapear este ID à entity de outro projeto e deixar isso funcional?

Minha dúvida é como acessar a classe movimentos que pertence ao projeto B diretamente do projeto A?

Tentei solucionar (sem sucesso) da seguinte forma: criei um terceiro projeto que é apenas um JAR, centralizei todas as entitys neste projeto e inseri como dependencia nos projetos A e B. Os projetos reconhecem todos as classes normalmente, compilando o projeto sem erro. Porém ao tentar acessar qualquer entity o hibernate não a reconhece, acusando o seguinte: javax.servlet.ServletException: Unknown entity:

Não sei se consegui explicar minha dúvida, achei um pouco confuso meu texto…

Do que consegui entender, a sua estratégia de criar um terceiro projeto, uma lib, só com as entidades que será compartilhado por ambos os projetos, é pra funcionar sim.

O que não ficou claro pra mim é o seguinte:

A entidade Movimentos é “gerenciada” pelo projeto B. Mas o A precisa dela de alguma forma. Mas como o projeto A ta recuperando ela? Via banco? Invoca um WS dentro do projeto B? Da detalhes da operação que ta gerando esse erro de unknown entity. E se possível coloca o stack trace completo.

O detalhe é que se você for separar as tabelas em bancos diferentes, o DER que colocou está errado. Uma tabela tem uma FK para outra que está no mesmo banco e não em um separado. Caso isso ocorra, ela tem apenas uma coluna.
Sim, é uma boa prática criar um projeto separado, porém, ele é realmente necessário? A vai usar tudo o que B usa?

Primeiramente, me desculpe pela demora em responder, estava fora da cidade esta semana e não tive acesso ao fórum.

De outra parte, muito obrigado pelas respostas!!

[quote=rodrigo.uchoa]Do que consegui entender, a sua estratégia de criar um terceiro projeto, uma lib, só com as entidades que será compartilhado por ambos os projetos, é pra funcionar sim.

O que não ficou claro pra mim é o seguinte:

A entidade Movimentos é “gerenciada” pelo projeto B. Mas o A precisa dela de alguma forma. Mas como o projeto A ta recuperando ela? Via banco? Invoca um WS dentro do projeto B? Da detalhes da operação que ta gerando esse erro de unknown entity. E se possível coloca o stack trace completo.[/quote]

Isso mesmo, criei um terceiro projeto, e este deu certo, os erros estavam na configuração do persistence.xml

A ideia é fazer esta recuperação por WS dentro do projeto B, você conhece outra forma mais eficiente para trocas informações entre projetos??

[quote=drsmachado]O detalhe é que se você for separar as tabelas em bancos diferentes, o DER que colocou está errado. Uma tabela tem uma FK para outra que está no mesmo banco e não em um separado. Caso isso ocorra, ela tem apenas uma coluna.
Sim, é uma boa prática criar um projeto separado, porém, ele é realmente necessário? A vai usar tudo o que B usa?[/quote]

Tem toda razão, estava errado mesmo e vou arrumar isso, não poderei manter estes vínculos entre as tabelas e também não colocarei nas entitys, para não ter problemas.

Será necessário esta separação sim drsmachado, o Projeto B terá funções muito específicas e eu imagino que no futuro ela poderá lidar com muita informação, fato que talvez seja necessário até um servidor apenas para ele. Digamos que este Projeto B será um enorme banco de dados e funções para servir outros Projetos.

Já o Projeto A será o software do usuário propriamente dito. A ideia é atender Escritórios de Advocacia e Procuradorias, ou seja, no futuro este Projeto A poderá rodar diretamente no servidor do cliente, o que tornaria inviável deixar o Projeto B junto.

Por falar nisso, vocês sabem qual a melhor forma de criar novos “escritórios” no sistema e no banco de dados? minha ideia é criar um banco de dados para cada escritório, mas ainda não pensei como o software irá lidar com isso… Mas isso não é prioridade no momento…

Muito obrigado a todos!

Se for dentro da mesma rede, intranet, usar EJB também é uma possibilidade. Mas não estou dizendo que é a melhor pro seu caso. EJB a performance seria um pouco melhor, entretanto o acoplamento entre os seus sistemas seria maior por causa das interfaces remotas. WS a performance é pior, mas os seus sistemas ficariam completamente desacoplados.

Como pelo que entendi você vai usar a internet mesmo, acho que WS parece ser o mais indicado. Agora é escolher entre REST vs SOAP :slight_smile: