Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Code commun entre plusierus EJB

3 réponses
Avatar
Marc Ferry
Bonjour,

J'ai construit un EAR (WebLogic) qui contient 2 EJB session qui
partagent des classes en commun (bibliothèque de méthodes utilitaires
par exemple).
Pour le code commun, j'ai fait un .jar avec les .class des classes en
commun et l'ai mis dans le répertoire META-INF/lib de l'EAR.
Pour que les EJB trouvent cette librairie commune, j'ai ajouté dans le
MANIFEST.MF du .jar de l'EAR la ligne suivante :
Class-Path: META-INF/lib
Mais au déploiement des EJB sur WebLogic, les classes communes ne sont
pas trouvées.
Qu'est-ce qui ne convient pas ?

J'ai également tenté de mettre les .class directement dans les EJB (donc
en dupliquant le code commun), mais cela n'a pas marché.
J'ai aussi tenté de modifier le MANIFEST.MF des .jar des EJB, mais cela
n'a rien donné.

Merci pour votre aide.
Marc

3 réponses

Avatar
Damien Lecan
J'ai construit un EAR (WebLogic) qui contient 2 EJB session qui
partagent des classes en commun (bibliothèque de méthodes utilitaires
par exemple).
Pour le code commun, j'ai fait un .jar avec les .class des classes en
commun et l'ai mis dans le répertoire META-INF/lib de l'EAR.
Pour que les EJB trouvent cette librairie commune, j'ai ajouté dans le
MANIFEST.MF du .jar de l'EAR la ligne suivante :
Class-Path: META-INF/lib
Mais au déploiement des EJB sur WebLogic, les classes communes ne sont
pas trouvées.
Qu'est-ce qui ne convient pas ?
Il te faut un fichier application.xml, qui va décrire beaucoup plus

finement le contenu de ton EAR.

La dtd
http://java.sun.com/j2ee/dtds/application_1_2.dtd


Damien

Avatar
Frédéric Lachasse
"Marc Ferry" wrote in message
news:bugv3a$
Bonjour,

J'ai construit un EAR (WebLogic) qui contient 2 EJB session qui
partagent des classes en commun (bibliothèque de méthodes utilitaires
par exemple).
Pour le code commun, j'ai fait un .jar avec les .class des classes en
commun et l'ai mis dans le répertoire META-INF/lib de l'EAR.
Pour que les EJB trouvent cette librairie commune, j'ai ajouté dans le
MANIFEST.MF du .jar de l'EAR la ligne suivante :
Class-Path: META-INF/lib
Mais au déploiement des EJB sur WebLogic, les classes communes ne sont
pas trouvées.
Qu'est-ce qui ne convient pas ?


1) Le "Class-Path:" doit être dans le manifest des modules (EJBs et WARs),
pas dans le manifest de l'EAR, chaque module pouvant avoir un classpath
différent.

2) Comme pour un classpath classique, un répertoire référence une hiérarchie
de .class, mais ne charge pas les JARs. Pour mettre un .jar dans un
classpath, on met le nom complet du jar...

J'ai également tenté de mettre les .class directement dans les EJB (donc
en dupliquant le code commun), mais cela n'a pas marché.
J'ai aussi tenté de modifier le MANIFEST.MF des .jar des EJB, mais cela
n'a rien donné.


Cf point 2.

Structure de l'EAR:

app.ear
META-INF/application.xml
ejb1.jar
META-INF/ejb-jar.xml
META-INF/MANIFEST.MF
Class-Path: common.jar
ejb2.jar
META-INF/ejb-jar.xml
META-INF/MANIFEST.MF
Class-Path: common.jar
common.jar

(Pourquoi mettre les jars dans META-INF/lib? Ce n'est pas un WAR.)

Note: dans un EAR, j'ai mis tous les .class de l'application, servlets et
EJBs dans le même jar, puis créé un ejb.jar et web.war contenant juste les
DD (deployment descriptors) et un Class-Path dans leurs MANIFEST.MF. Et le
truc marche avec tous les serveurs que j'ai testé (WebLogic, WebSphere,
JBoss et SunONE).

--
Frédéric Lachasse - ECP86

Avatar
Marc Ferry
Merci pour ces infos.
J'ai trouvé une autre solution, qui me semble plus "élégante".
Structure de l'EAR :

app.ear
APP-INF/lib/common.jar
META-INF/application.xml
ejb1.jar
META-INF/ejb-jar.xml
ejb2.jar
META-INF/ejb-jar.xml

Marc

Frédéric Lachasse wrote:

"Marc Ferry" wrote in message
news:bugv3a$


Bonjour,

J'ai construit un EAR (WebLogic) qui contient 2 EJB session qui
partagent des classes en commun (bibliothèque de méthodes utilitaires
par exemple).
Pour le code commun, j'ai fait un .jar avec les .class des classes en
commun et l'ai mis dans le répertoire META-INF/lib de l'EAR.
Pour que les EJB trouvent cette librairie commune, j'ai ajouté dans le
MANIFEST.MF du .jar de l'EAR la ligne suivante :
Class-Path: META-INF/lib
Mais au déploiement des EJB sur WebLogic, les classes communes ne sont
pas trouvées.
Qu'est-ce qui ne convient pas ?




1) Le "Class-Path:" doit être dans le manifest des modules (EJBs et WARs),
pas dans le manifest de l'EAR, chaque module pouvant avoir un classpath
différent.

2) Comme pour un classpath classique, un répertoire référence une hiérarchie
de .class, mais ne charge pas les JARs. Pour mettre un .jar dans un
classpath, on met le nom complet du jar...



J'ai également tenté de mettre les .class directement dans les EJB (donc
en dupliquant le code commun), mais cela n'a pas marché.
J'ai aussi tenté de modifier le MANIFEST.MF des .jar des EJB, mais cela
n'a rien donné.




Cf point 2.

Structure de l'EAR:

app.ear
META-INF/application.xml
ejb1.jar
META-INF/ejb-jar.xml
META-INF/MANIFEST.MF
Class-Path: common.jar
ejb2.jar
META-INF/ejb-jar.xml
META-INF/MANIFEST.MF
Class-Path: common.jar
common.jar

(Pourquoi mettre les jars dans META-INF/lib? Ce n'est pas un WAR.)

Note: dans un EAR, j'ai mis tous les .class de l'application, servlets et
EJBs dans le même jar, puis créé un ejb.jar et web.war contenant juste les
DD (deployment descriptors) et un Class-Path dans leurs MANIFEST.MF. Et le
truc marche avec tous les serveurs que j'ai testé (WebLogic, WebSphere,
JBoss et SunONE).