Olá PCalcado,
A arquitetura de camadas que usamos é a seguinte:
VISÃO _
<=> |
CONTROLE | --- > WAR
<=> |
DELEGAÇÃO _|
<=>
SISTEMA _
<=> | ----> EJB JAR
DOMÍNIO _ |
Para vc entender a dependência que o "Hibernate Domain Bean" gera nas aplicações clientes, experimente criar um WAR que receba um POJO que foi utilizado pelo Hibernate em um archive EJB como retorno de um determinado método de negócio, implementado por um Session Bean. Para o exemplo ficar legal, procure implantar as aplicações de forma independente, de preferência em application servers distintos, no melhor exemplo um TomCat e um JBoss.
Você vai perceber que para "deployar" a sua aplicação Web no TomCat você vai ter que fornecer o jar do Hibernate. Isso acontece por que o POJO que representa uma entidade de negócio, que teoricamente é um objeto Java comum, é estendido pelo Hibernate. Ou seja, o objeto que chega como retorno para você na tua camada de delegação não é mais um "Plain Java" mas um objeto Hibernate. Daí a tal da dependência.
Quanto ao fato de criar estruturas paralelas, a primeira vista, realmente parece o fim do mundo. Concordo com você que "duplicar código" é sempre uma má idéia. Mas o fato de trabalhar por contratos e tentar isolar os clientes de componentes mais internos, eu considero crucial. O "Hibernate Domain Bean" acaba se tornando um "Mochileiro das Galáxias". Sai das camdas mais baixas do sistema (camada de persistência) e vai parar nas páginas JSP. Isso para mim é o que se chama de "ALTO ACOPLAMENTO". Ou seja, deixamos de ter trabalho criando estruturas paralelas mas ganhamos uma alta dependência dos clientes com pacotes e interfaces do tipo [i]br.com.acme.xpto.entidades.Aluno[/i]. Realmente não acredito que se justifique.
Abração.