5.5. 为远程 EJB 调用配置 IIOP


JBoss EAP 支持对 JBoss EAP 上部署的 EJB 进行基于 CORBA/IIOP 的访问。

<iiop> 元素用于启用 IIOP、CORBA、EJB 的调用。此元素的存在意味着安装了 iiop-openjdk 子系统。<iiop> 元素包括以下两个属性:

  • enable-default :如果这是 true,则所有带有 EJB 2.x 主接口的 EJB 都通过 IIOP 公开。否则,必须通过 jboss-ejb3.xml 显式启用它们。
  • Use-qualified-name:如果为 true,则 EJB 使用 包含部署的应用程序和模块名称的绑定名称绑定到 CORBA 命名上下文,如 myear/myejbjbjar/MyBean。如果这是 false,则默认绑定名称就是 bean 名称。
注意

尽管 EJB 3 远程调用通常不需要 RemoteHome 接口,但任何使用 IIOP 公开的 EJB 3 Bean 都需要此接口。然后,您必须使用 jboss-ejb3.xml 文件启用 IIOP,或者为 standalone-full.xml 配置文件中的所有 EJB 启用 IIOP。

启用 IIOP

要启用 IIOP,您必须安装 IIOP OpenJDK ORB 子系统,ejb 3 子系统配置中有 <iiop/> 元素。发行版 附带的 standalone-full.xml 配置启用了这两个配置。

IIOP 在服务器配置文件的 iiop-openjdk 子系统中配置。

<subsystem xmlns="urn:jboss:domain:iiop-openjdk:2.1">
Copy to Clipboard Toggle word wrap

使用以下管理 CLI 命令访问和更新 iiop-openjdk 子系统:

/subsystem=iiop-openjdk
Copy to Clipboard Toggle word wrap

IIOP 元素采用控制服务器默认行为的两个属性。

<subsystem xmlns="urn:jboss:domain:ejb3:5.0">
  ...
  <iiop enable-by-default="false" use-qualified-name="false"/>
  ...
</subsystem>
Copy to Clipboard Toggle word wrap

以下管理 CLI 命令在 ejb3 子系统中添加 <iiop> 元素

/subsystem=ejb3/service=iiop:add(enable-by-default=false, use-qualified-name=false)
Copy to Clipboard Toggle word wrap

使用 IIOP 创建经过协调的 EJB

以下示例演示了如何从客户端进行远程 IIOP 调用:

  1. 在服务器中创建 EJB 2 Bean:

    @Remote(IIOPRemote.class)
    @RemoteHome(IIOPBeanHome.class)
    @Stateless
    public class IIOPBean {
        public String sayHello() throws RemoteException {
             return "hello";
        }
    }
    Copy to Clipboard Toggle word wrap
  2. 创建具有强制方法 create() 的主页实施。客户端调用这个方法来获取远程接口的代理来调用业务方法:

    public interface IIOPBeanHome extends EJBHome {
        public IIOPRemote create() throws RemoteException;
    }
    Copy to Clipboard Toggle word wrap
  3. 为远程连接 EJB 创建远程接口:

    public interface IIOPRemote extends EJBObject {
        String sayHello() throws RemoteException;
    }
    Copy to Clipboard Toggle word wrap
  4. 通过在 META-INF 中创建描述符文件 jboss-ejb3.xml 来 引入用于远程调用的 Bean

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
                   xmlns="http://java.sun.com/xml/ns/javaee"
                   xmlns:iiop="urn:iiop"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd
                      http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd
                      urn:iiop jboss-ejb-iiop_1_0.xsd"
                   version="3.1"
                   impl-version="2.0">
        <assembly-descriptor>
            <iiop:iiop>
                <ejb-name>*</ejb-name>
            </iiop:iiop>
        </assembly-descriptor>
    </jboss:ejb-jar>
    Copy to Clipboard Toggle word wrap
    注意

    现在,打包的 Bean 以及 JAR 文件中的描述符已准备好部署到 JBoss EAP 容器。

  5. 在客户端创建上下文:

    System.setProperty("com.sun.CORBA.ORBUseDynamicStub", "true");
    final Properties props = new Properties();
    props.put(Context.PROVIDER_URL, "corbaloc::localhost:3528/JBoss/Naming/root");
    props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.iiop.naming:org.jboss.naming.client");
    props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory");
    props.put(Context.OBJECT_FACTORIES, "org.jboss.tm.iiop.client.IIOPClientUserTransactionObjectFactory");
    Copy to Clipboard Toggle word wrap
    注意

    客户端需要将 wildfly iiop openjdk 库添加到其类路径中。客户端可能还需要将 org.wildfly:wildfly-iiop-openjdk 构件添加为 Maven 依赖项。

  6. 使用 context lookup 来缩小对 IIOPBeanHome 主目录的引用范围。然后,调用 home 接口 create() 方法来访问远程接口,允许您调用其方法:

    try {
        Context context = new InitialContext(props);
    
        final Object iiopObj = context.lookup(IIOPBean.class.getSimpleName());
        final IIOPBeanHome beanHome = (IIOPBeanHome) PortableRemoteObject.narrow(iiopObj, IIOPBeanHome.class);
        final IIOPRemote bean = beanHome.create();
    
        System.out.println("Bean saying: " + bean.sayHello());
    } catch (Exception e) {
        e.printStackTrace();
    }
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat