Je rencontre des problèmes lors du déploiement de mon application Java EE et je pourrais avoir besoin de conseils.
j'ai 3 composants pour déployer:Problème de déploiement de Java EE
- couche d'intégration (Data): POJOs et haricots CDI - fichier JAR
- de couche d'application (BL): EJB, grains de CDI et POJOs - fichier JAR
- Présentation couche: servlets et tel - fichier WAR
Idéalement, je voudrais être en mesure de déployer les fichiers JAR d'intégration et de la couche d'application dans le même serveur Java EE, mais comme JARs séparés (depuis que je pourrais vouloir changer la configuration matérielle plus tard et séparez-les en deux serveurs différents sur deux machines séparées).
Le problème est que je n'arrive pas à faire fonctionner l'injection CDI du JAR de la couche d'intégration au JAR de la couche d'application. Le serveur dit (et probablement à juste titre) qu'il est impossible de résoudre les injections.
Jusqu'à présent, je suis venu avec ces solutions possibles:
- Package deux JARs en un seul fichier EAR (peut-être jeter dans la guerre et ...), et déployer que
- JNDI
- Dans la couche d'intégration, placez les objets injectés dans les EJB de la couche d'application (DAO) au lieu des haricots CDI.
Je n'aime pas l'une ou l'autre de ces solutions (surtout la dernière), car elles limitent mes futures options de déploiement. La deuxième solution ne me limite pas, mais elle peut devenir fastidieuse à un moment donné (quand j'accumule beaucoup de code).
Enfin, ma question est la suivante:
Y at-il une option que je ne trouve pas encore, qui me permettrait de déployer les deux fichiers JAR sur le même serveur avec les injections de travail CDI? Peut-être quelque chose qui fonctionnerait encore si à un moment donné je sépare les JARs en différents serveurs?
Je suis en train de déployer sur des serveurs TomEE, et je ne pense pas qu'il supporte l'une de ces options. Je suis également intéressé à garder les choses aussi indépendantes du choix du serveur que possible, au cas où je changerais le serveur plus tard. Je me rends compte que les EJB sont le moyen de le faire, mon seul souci est que les objets qui passent de ma couche d'intégration à ma couche d'application soient DAO, et pour une raison quelconque, il me semble erroné de les rendre EJB. Ai-je tort ? – eitanfar
@eitanfar Si vous utilisez des EJB pour cela, c'est votre couche d'interface qui devrait être EJB (beans session sans état, pour être exact), pas les DAO eux-mêmes! La façon dont j'ai implémenté ceci est d'avoir une couche EJB pour interface -> interface de service de composant -> implémentation de service de composant -> DAO interne. Cela permet un découplage et une séparation maximum des problèmes dont j'ai besoin. En outre, pour tous mes EJB, il existe un délégué EJB distinct qui est réellement utilisé pour les recherches, de sorte que le fait que la recherche EJB soit effectuée est invisible pour la couche d'application. Le délégué EJB peut alors être utilisé comme un POJO. – eis
Je réalise que cela pourrait être plus de couches que vous voulez, et bien sûr, il n'est pas obligatoire d'avoir autant de couches. – eis