Utilizando el proveedor EJB, los clientes WSIF pueden invocar enterprise beans
mediante RMI-IIOP (invocación a método remoto a través del protocolo de Internet Inter-ORB). Utilice esta
información y los fragmentos de código asociados que le ayudarán a escribir la extensión WSDL (Web Services
Description Language) que enlaza el servicio con un servicio implementado como un enterprise bean.
Antes de empezar
Aunque puede utilizar el proveedor de EJB para la invocación de servicio Web basada en EJB(IIOP),
se recomienda que, en su lugar, invoque los servicios Web de RMI-IIOP con
JAX-RPC.
El archivo JAR de cliente de EJB debe estar disponible en el entorno de
ejecución de cliente con el proveedor actual.
El proveedor de EJB no da soporte al tiempo de espera síncrono WSIF. El proveedor EJB no excederá el tiempo de espera esperando a que finalice un método Java™.
Acerca de esta tarea
El cliente WSIF puede invocar un enterprise bean utilizando RMI-IIOP, con los contextos actuales
de seguridad y transacción. Si se invoca el proveedor de EJB dentro de una transacción, ésta
se pasa al servicio previo y se aplica el atributo de transacción de EJB estándar.
Si hay varias implementaciones del servicio, los proveedores del servicio son
responsables de garantizar que éstas ofrezcan la misma semántica. Por ejemplo, para las transacciones, el desplegador de bean debe especificar TX_REQUIRES_NEW para forzar una nueva transacción.
Utilice el procedimiento siguiente y los fragmentos de código asociados que le ayudarán a escribir la
extensión WSDL (Web Services Description Language) que permite al servicio WSIF invocar un enterprise bean.
Procedimiento
- Especifique el enlace EJB.
<!-- EJB binding -->
<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>
En este ejemplo:
- Un signo de interrogación (?) significa opcional y un
asterisco (*) significa igual a 0 o mayor.
- El atributo name del elemento <format:typeMap> es un nombre cualificado
de un tipo simple o complejo utilizado por una de las operaciones EJB.
- El atributo formatType del elemento <format:typeMap> es el nombre de clase plenamente cualificado para la clase Java con la que se correlaciona el elemento especificado por name.
- El atributo methodName del elemento <ejb:operation> es el nombre del método
en el enterprise bean al que llama la operación.
- El atributo parameterOrder del elemento <ejb:operation>
contiene una lista separada por espacios en blanco de los nombres de partes que definen el orden en el cual
se pasaron al método EJB.
- El atributo interface del elemento <ejb:operation> debe
establecerse en remote o en home.
El valor especifica la interfaz del
enterprise bean desde donde se puede acceder al método nombrado por el atributo
methodName.
- Especifique el elemento <ejb:address>.
<service ... >
<port>*
<ejb:address
className="nmtoken"
jndiName="nmtoken"
initialContextFactory="nmtoken" ?
jndiProviderURL="nmtoken" ? />
</port>
</service>
En este ejemplo:
- El atributo className del elemento <ejb:address>
especifica el nombre de clase plenamente cualificado de la clase de interfaz inicial del
enterprise bean.
- El atributo jndiName del elemento <ejb:address> especifica el nombre JNDI (Java Naming and Directory Interface) cualificado que se utiliza para buscar el enterprise bean.
- El atributo initialContextFactory del elemento <ejb:address>
es opcional y especifica la clase de fábrica de contexto inicial.
- El atributo jndiProviderURL del elemento <ejb:address> es
opcional y especifica la dirección web del proveedor JNDI.