使用 EJB 提供程序,WSIF 客户机通过因特网 ORB 间协议的远程方法调用 (RMI-IIOP) 来调用企业 Bean。使用以下信息和相关联的代码段来帮助您编写 Web 服务描述语言 (WSDL) 扩展,以将 WSIF 服务与作为企业 Bean 实现的服务链接起来。
开始之前
尽管,对于基于 EJB (IIOP) 的 Web Service 调用,您可以使用 EJB 提供程序,但建议您改为使用 JAX-RPC 来调用 RMI-IIOP Web Service。
在带有当前提供程序的客户机运行时环境中,必须提供了 EJB 客户机 JAR 文件。
EJB 提供程序不支持 WSIF 同步超时。EJB 提供程序将不进行超时等待来让 Java™ 方法完成。
关于此任务
您的 WSIF 客户机可以使用 RMI-IIOP 来调用企业 Bean(带有当前安全性和事务上下文)。如果 EJB 提供程序是在事务中调用的,那么事务传递到前面的服务并应用标准 EJB 事务属性。
如果存在多个服务实现,那么由服务提供者来确保每个实现提供相同的语义。例如,对于事务,Bean 部署程序必须指定 TX_REQUIRES_NEW 以强制新的事务。
使用以下过程和相关联的代码段来帮助您编写 Web 服务描述语言 (WSDL) 扩展,以允许 WSIF 服务调用企业 Bean。
过程
- 指定 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>
在本示例中:
- 问号 (?) 表示可选,而星号(*)表示 0 或更多。
- <format:typeMap> 元素的 name 属性是某个 EJB 操作使用的简单或复杂类型的限定名。
- <format:typeMap> 元素的 formatType 属性是 Java 类的标准类名,name 指定的元素映射到此 Java 类。
- <ejb:operation> 元素的 methodName 属性是操作所调用企业 Bean 上方法的名称。
- <ejb:operation> 元素的 parameterOrder 属性包含空格分隔的部件名列表,这些部件名定义了将它们传递给 EJB 方法的顺序。
- <ejb:operation> 元素的 interface 属性必须设为 remote 或 home。此值指定企业 Bean 的接口,此企业 Bean 上由 methodName 属性命名的方法是可访问的。
- 指定 <ejb:address> 元素。
<service ... >
<port>*
<ejb:address
className="nmtoken"
jndiName="nmtoken"
initialContextFactory="nmtoken" ?
jndiProviderURL="nmtoken" ? />
</port>
</service>
在本示例中:
- <ejb:address> 元素的 className 属性指定企业 Bean 的 Home 接口类的标准类名。
- <ejb:address> 元素的 jndiName 属性指定用于查找企业 Bean 的完整 Java 命名和目录接口 (JNDI) 名称。
- <ejb:address> 元素的 initialContextFactory 属性是可选的,并指定初始上下文工厂类。
- <ejb:address> 元素的 jndiProviderURL 属性是可选的,并指定 JNDI 提供程序 Web 地址。