OVH Cloud OVH Cloud

EJB -> Inclure une librairie externe

4 réponses
Avatar
Twist
Bonjour,

Je souhaite inclure un jar qui contient du code m=E9tier dans un EJB qui
marchait avant cela, pour utiliser certains objets.
J'utilise ejbdoclet pour g=E9n=E9rer l'ejb. Le probl=E8me est que JBoss me
fait un classnotfound sur la classe que j'importe du jar, mais pas de
probl=E8me de compilation.
M=EAme chose si je d=E9jarre (excusez du n=E9ologisme) les classes et les
mets dans le jar de l'EJB...

J'ai la piste du META-INF (classpath) mais je ne sais pas comment faire
avec xdoclet.
Vous auriez une id=E9e ?.

Merci en tous cas !

4 réponses

Avatar
Bruno Grieder
Bonjour,

Je souhaite inclure un jar qui contient du code métier dans un EJB qui
marchait avant cela, pour utiliser certains objets.
J'utilise ejbdoclet pour générer l'ejb. Le problème est que JBoss me
fait un classnotfound sur la classe que j'importe du jar, mais pas de
problème de compilation.
Même chose si je déjarre (excusez du néologisme) les classes et les
mets dans le jar de l'EJB...

J'ai la piste du META-INF (classpath) mais je ne sais pas comment faire
avec xdoclet.
Vous auriez une idée ?.

Merci en tous cas !



Bonsoir

La compilation et l'exécution sont deux problèmes séparés.
il est probable que ta librairie métier soit visible du compilateur mais
pas de JBoss.

Pour rendre ta libraire métier accessible de ton EJB, mets la dans
server/default/lib et redémarre to serveur Jboss (en admettant que
default soit ton environnment cible).


Bruno Grieder

Avatar
Twist
Merci, j'ai essayé cela marche pas.
J'ai mis le jar à plusieurs endroits dont dans le lib du serveur en
default.
J'ai aussi changé dans ant pour qu'il rajoute l'attribut Class-Path
dans le META-INF/MANIFEST.MF

La je sais plus trop mon but c'était a la base de mettre un jar qui
sert à mapper des fichiers xml côté client et serveur, on appel un
ejb avec un type de document en parametre genre ejb.process(MyDocument
mydocument) qui retourne un document. C'est possible non ? on n'est
tout de même pas obliger d'utiliser des objets de base ?.

Merci en tout cas toute aide sera la bienvenue !
Avatar
Bruno Grieder
Twist wrote:
Merci, j'ai essayé cela marche pas.
J'ai mis le jar à plusieurs endroits dont dans le lib du serveur en
default.
J'ai aussi changé dans ant pour qu'il rajoute l'attribut Class-Path
dans le META-INF/MANIFEST.MF

La je sais plus trop mon but c'était a la base de mettre un jar qui
sert à mapper des fichiers xml côté client et serveur, on appel un
ejb avec un type de document en parametre genre ejb.process(MyDocument
mydocument) qui retourne un document. C'est possible non ? on n'est
tout de même pas obliger d'utiliser des objets de base ?.

Merci en tout cas toute aide sera la bienvenue !



Bien sûr c'est faisable et bien sûr, glisser des librairies dans lib, ça
marche. Le problème vient d'ailleurs.

Il ne faut PAS modifier le MANIFEST.MF soi-même. En fait il ne contient
rien d'intéressant pour un JAR de ejb.

Inutile également de trop en mettre dans le xDoclet. Ci-dessous un
exemple déjà assez complexe

Enfin, lorsqu'on passe en paramètre des arguments à une méthode d'un
EJB, il faut bien s'assurer qu'ils sont supportés par la spec EBJ
utilisée, en particulier qu'ils sont sérialisables. Une bonne façon
d'éviter les mauvaise surprises est de se limiter aux types de base.
En l'occurence pour du XML, mieux vaut le passer sous forme de String et
le parser dans l'EJB. Une représentation DOM peut faire jusqu'à 10 fois
la taille du texte.


bruno


/**
* @author bgrieder
*
* @ejb.bean name="DataCluster"
* display-name="Name for DataCluster"
* description="Description for DataCluster"
* jndi-name="secret/remote/core/datacluster"
* local-jndi-name = "secret/local/core/datacluster"
* type="BMP"
* view-type="local"
*
* @ejb.value-object
*
*
* @ejb.permission
* view-type = "local"
* unchecked = "true"
*
* @ejb.pk
*
**************Ref to the Hidden EJB wrapper **********************
******* "ref-name" is the lookup name which is associated by
jboss.ejb-local-ref to the jndi name
* @ejb.ejb-external-ref
* business = "com.secret.hidden.ejb.local.XySLWrapperLocal"
* home = "com.secret.hidden.ejb.local.XySLWrapperLocalHome"
* ref-name = "ejb/XySLWrapperLocal"
* type = "Session"
* view-type = "local"
******* the jndi-name is "as such" while the ref-name is the same as
above without ejb/
* @jboss.ejb-local-ref
* jndi-name = "secret/local/xyleme/xyslwrapper"
* ref-name = "XySLWrapperLocal"
*

Avatar
Bruno Grieder
Twist wrote:
Merci, j'ai essayé cela marche pas.
J'ai mis le jar à plusieurs endroits dont dans le lib du serveur en
default.
J'ai aussi changé dans ant pour qu'il rajoute l'attribut Class-Path
dans le META-INF/MANIFEST.MF

La je sais plus trop mon but c'était a la base de mettre un jar qui
sert à mapper des fichiers xml côté client et serveur, on appel un
ejb avec un type de document en parametre genre ejb.process(MyDocument
mydocument) qui retourne un document. C'est possible non ? on n'est
tout de même pas obliger d'utiliser des objets de base ?.

Merci en tout cas toute aide sera la bienvenue !




Bien sûr c'est faisable et bien sûr, glisser des librairies dans lib, ça marche. Le problème vient d'ailleurs.

Il ne faut PAS modifier le MANIFEST.MF soi-même. En fait il ne contient rien d'intéressant pour un JAR de ejb.

Inutile également de trop en mettre dans le xDoclet. Ci-dessous un exemple déjà assez complexe

Enfin, lorsqu'on passe en paramètre des arguments à une méthode d'un EJB, il faut bien s'assurer qu'ils sont supportés par la spec EBJ utilisée, en
particulier qu'ils sont sérialisables. Une bonne façon d'éviter les mauvaise surprises est de se limiter aux types de base.
En l'occurence pour du XML, mieux vaut le passer sous forme de String et le parser dans l'EJB. Une représentation DOM peut faire jusqu'à 10 fois la
taille du texte.


bruno


/**
* @author bgrieder
*
* @ejb.bean name="DataCluster"
* display-name="Name for DataCluster"
* description="Description for DataCluster"
* jndi-name="secret/remote/core/datacluster"
* local-jndi-name = "secret/local/core/datacluster"
* type="BMP"
* view-type="local"
*
* @ejb.value-object
*
*
* @ejb.permission
* view-type = "local"
* unchecked = "true"
*
* @ejb.pk
*
**************Ref to the Hidden EJB wrapper **********************
******* "ref-name" is the lookup name which is associated by jboss.ejb-local-ref to the jndi name
* @ejb.ejb-external-ref
* business = "com.secret.hidden.ejb.local.XySLWrapperLocal"
* home = "com.secret.hidden.ejb.local.XySLWrapperLocalHome"
* ref-name = "ejb/XySLWrapperLocal"
* type = "Session"
* view-type = "local"
******* the jndi-name is "as such" while the ref-name is the same as above without ejb/
* @jboss.ejb-local-ref
* jndi-name = "secret/local/xyleme/xyslwrapper"
* ref-name = "XySLWrapperLocal"
*