2010-07-26 6 views
7

J'ai une application JavaEE6, constituée d'éléments Web et d'EJB et qui est déployée en tant que fichier WAR uniquement (en utilisant EJB3.1). La construction est basée sur Maven. Je viens de lire une nouvelle possibilité de commander l'initialisation du module en Java EE 6 here dont j'ai également besoin pour mon application. Aussi, je voudrais avoir une option pour définir certaines propriétés EJB en XML.Application EJB 3.1 déployée en tant que fichier WAR uniquement: qu'en est-il de ejb-jar.xml?

Étant donné que l'exemple est déployé en tant que projet EAR, l'ordre est défini dans le fichier application.xml. Mais dans un projet déployé par WAR, il n'y a pas de fichier application.xml. Maintenant, je me demande où je peux définir de telles informations? Ou est-il possible d'utiliser un fichier application.xml dans une application WAR-déployée?

EDIT:

Oops je ne l'ai pas lu le module ordre bon exemple, dans le premier moment je pensé qu'il était dans quel ordre les EJBs dans mon application sont chargés. Bien sûr, je n'ai qu'un seul module dans mon application WAR, donc commander n'a aucun sens.

Ok, mais comme je suis à elle, une grande question demeure (également modifié le titre de la question pour refléter le changement): Qu'en est-il le ejb-jar.xml? Puis-je en quelque sorte définir des choses sur mes EJB en XML (comme c'est utile pour certains paramètres, pour éviter la recompilation)?

+0

Remarqué votre édition, belle question btw. J'ai mis à jour ma réponse. –

Répondre

9

En résumé, ce n'est pas possible avec un déploiement basé sur WAR.

La fonction d'initialisation de module de Java EE 6 est destinée à initialiser différents modules d'une application dans un ordre spécifique. Au moment où vous avez une application EJB basée sur WAR, vous n'avez plus de modules séparés pour votre application EJB et Web. Il n'y a qu'un module - le module d'application Web dans un déploiement basé sur WAR.

Par conséquent, si vous devez obtenir la même fonction que l'ordre d'initialisation du module, offert en Java EE 6, vous devrez faire une des opérations suivantes:

  • Séparer les EJB dans un module séparé et utilisez un déploiement basé sur EAR.
  • Ceci est plus ou moins rusé, comme cela a été fait dans Java EE 5, et vous voudriez l'éviter. Vous pourriez vouloir coder en logique pour vous assurer que les EJB singleton ont été créés (en supposant que cela soit dû à l'utilisation de singletons dans votre application), avant qu'ils ne soient utilisés dans le code.

Lieu du ejb-jar.xml dans un fichier WAR

The EJB 3.1 specification (dans le chapitre sur l'emballage) aborde la question de l'emplacement du fichier ejb-jar.xml lorsqu'il est déployé dans un WAR:

Dans un fichier .war, le déploiement descripteur est stocké avec le nom WEB-INF/ejb-jar.xml.

PS: Je n'ai pas encore essayé ce style de déploiement. YMMV.

+0

Merci pour l'info! Juste modifié ma question, voir mon édition. – ifischer

+3

En note, vous pouvez emballer vos EJB dans un fichier EJB-JAR et les déployer dans un fichier WAR. –

5

Note latérale sur les EJB en .wars et le traitement ejb-jar.xml. Comme déjà noté l'emplacement est WEB-INF/ejb-jar.xml, mais notez aussi que c'est seulement lieu vérifié même s'il y a des jarres ejbs dans WEB-INF/lib/- via des règles standard tout META-INF/Les fichiers ejb-jar.xml sont ignorés.Le groupe d'experts était plutôt divisé sur celui-ci, donc si vous avez une préférence, il n'est pas trop tard pour envoyer des commentaires à la liste des groupes d'experts EJB 3.1 pour examen dans EJB.next. Mon vote consistait à permettre à chaque jar d'avoir des fichiers META-INF/ejb-jar.xml, tout comme ces jars peuvent maintenant avoir persistence.xmls, beans.xmls, fragments de web, etc. Le plus gros problème pour moi était que Il est en contradiction avec l'API Embedded EJB Container qui prend en charge un classpath de type EAR qui autorise plusieurs fichiers/modules contenant chacun un fichier META-INF/ejb-jar.xml. Le résultat étant que si vous utilisez l'API intégrée pour tester une application ejb multi-jar qui est composée dans un seul fichier .war, vous devez alors fusionner toutes les données ejb-jar.xml que vous avez dans un seul ejb. -jar.xml pour la webapp. Une sorte de douleur pour les utilisateurs.

Questions connexes