A l'aide du fournisseur EJB, les clients WSIF peuvent appeler les beans enterprise via le protocole RMI-IIOP (Remote Method Invocation over Internet Inter-ORB Protocol). Utilisez ces informations et les fragments de code associés pour écrire l'extension WSDL qui va relier votre service WSIF à un service implémenté en tant que bean enterprise.
Avant de commencer
Bien que vous puissiez utiliser le fournisseur EJB pour l'appel de service Web basé sur EJB(IIOP), il est conseillé plutôt d'appeler les services Web RMI-IIOP à l'aide de JAX-RPC.
Le fichier JAR du client d'EJB doit être disponible dans l'environnement
d'exécution des clients, avec le fournisseur en cours.
Le fournisseur EJB ne prend pas en charge le délai d'expiration
des opérations synchrones WSIF. Le
fournisseur EJB peut attendre indéfiniment qu'une méthode
Java™ se termine.
Pourquoi et quand exécuter cette tâche
Un bean enterprise est appelé par le client WSIF à l'aide des méthodes d'appel RMI-IIOP, avec les contextes de transaction et la sécurité en cours. Si le fournisseur
EJB est appelé à l'intérieur d'une transaction, cette dernière est
transmise au service appelé et l'attribut de transaction EJB standard s'applique.
S'il existe plusieurs
implémentations du service, il revient aux fournisseurs de services de s'assurer qu'ils
offrent la même sémantique. Par exemple, pour les transactions, le déployeur du bean doit spécifier TX_REQUIRES_NEW pour forcer l'ouverture d'une nouvelle transaction.
Utilisez
la procédure suivante et les fragments de code associés pour écrire l'extension
WSDL devant permettre à votre service WSIF d'appeler un bean enterprise.
Procédure
- Indiquez la liaison EJB.
<!-- Liaison EJB -->
<binding .... >
<ejb:binding />
<format:typeMapping style="Java" encoding="Java"/>?
<format:typeMap name="qname" formatType="nmtoken"/>*
</format:typeMapping>
<operation>*
<ejb:operation
methodName="nmtoken"
parameterOrder="nmtoken"
returnPart="nmtoken"?
interface="remote|home" />
<input name="nmtoken"? />?
<output name="nmtoken"? />?
<fault name="nmtoken"? />?
</operation>
</binding>
Dans cet exemple :
- Un point d'interrogation (?) signifie facultatif et un astérisque (*) signifie 0 ou plus.
- L'attribut name de l'élément <format:typeMap> est un nom qualifié d'un type simple ou complexe utilisé par l'une des opérations EJB.
- L'attribut formatType de l'élément <format:typeMap> constitue le nom complet de
la classe Java à laquelle
l'élément indiqué par name est mappé.
- L'attribut methodName de l'élément <ejb:operation> est le nom de la méthode du bean enterprise qui est appelée par l'opération.
- L'attribut parameterOrder de l'élément <ejb:operation> contient une liste de noms de parties (séparées par des espaces) qui définit l'ordre dans lequel ces parties sont transmises à la méthode EJB.
- L'attribut interface de l'élément <ejb:operation> doit être défini sur remote ou home.
Cette valeur définit l'interface du bean enterprise dans laquelle la méthode désignée par l'attribut methodName est accessible.
- Indiquez l'élément <ejb:address>.
<service ... >
<port>*
<ejb:address
className="nmtoken"
jndiName="nmtoken"
initialContextFactory="nmtoken" ?
jndiProviderURL="nmtoken" ? />
</port>
</service>
Dans cet exemple :
- L'attribut className de l'élément <ejb:address> spécifie le nom de classe complet de l'interface home du bean enterprise.
- L'attribut jndiName de l'élément <ejb:address> représente le nom complet JNDI
(Java Naming and Directory
Interface) utilisé pour rechercher le bean enterprise.
- L'attribut initialContextFactory de l'élément <ejb:address> est facultatif et spécifie la classe de la fabrique de contexte initial.
- L'attribut jndiProviderURL de l'élément <ejb:address> est facultatif et spécifie l'adresse Web du fournisseur JNDI.