3.2.10.2. 用 JNDI 远程调用 Session Bean


这个任务描述了如何为远程客户添加支持以使用 JNDI 调用 Session Bean。这个任务假设该项目是用 Maven 构建的。
ejb-remote Quickstart 包含了演示这个功能的 Maven 项目。这个 Quickstart 包含了要部署的 Session Bean 和远程客户项目。下面的代码示例是从远程客户端程序抽取的。
这个任务假设 Session Bean 不要求进行验证。

警告

Red Hat 推荐您在所有受影响的软件包里显性地禁用 TLSv1.1 或 TLSv1.2 上的 SSL。

先决条件

在开始之前,下列预备条件必须被满足:
  • 您必须有一个可用的 Maven 项目。
  • 已经添加了用于 JBoss EAP 6 Maven Repository 的配置。
  • 已经部署了您要调用的 Session Bean。
  • 部署的 Session Bean 实现了远程商业接口。
  • Session Bean 的远程商业接口作为 Maven 依赖关系可用。如果远程商业接口只作为 JAR 文件可用,那么我们推荐您将 JAR 添加到 Maven 库作为 artifact 使用。请参考 http://maven.apache.org/plugins/maven-install-plugin/usage.html 里的 install:install-file 说明。
  • 您需要知道这个 session bean 所在的服务器的主机名和 JNDI 端口号。
要从远程客户调用 session bean,您首先必须正确配置这个项目。

过程 3.22. 为 session bean 的远程商业接口添加 Maven 项目依赖关系。

  1. 添加所需的项目依赖关系

    必须更新项目的 pom.xml 以包含必要的依赖关系。
  2. 添加 jboss-ejb-client.properties 文件

    JBoss EJB 客户 API 期望在项目根目录找到名为 jboss-ejb-client.properties 的文件,它包含 JNDI 服务的连接信息。添加这个文件到项目的 src/main/resources/ 目录并包含下列内容。
    # In the following line, set SSL_ENABLED to true for SSL
    remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
    remote.connections=default
    # Uncomment the following line to set SSL_STARTTLS to true for SSL
    # remote.connection.default.connect.options.org.xnio.Options.SSL_STARTTLS=true
    remote.connection.default.host=localhost
    remote.connection.default.port = 4447
    remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
    # Add any of the following SASL options if required
    # remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
    # remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT=false
    # remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS=JBOSS-LOCAL-USER
    
    
    Copy to Clipboard Toggle word wrap
    根据您的服务器来修改主机名和端口号。4447 是默认的端口号码。对于安全的连接,请将 SSL_ENABLED 一行设置为 true 并取消 SSL_STARTTLS 行的注释。容器里的 Remoting 接口支持使用相同端口的安全和不安全的连接。
  3. 为远程商业接口添加依赖关系

    pom.xml 里为 session bean 的远程商业接口添加 Maven 依赖关系。
    <dependency>
       <groupId>org.jboss.as.quickstarts</groupId>
       <artifactId>jboss-ejb-remote-server-side</artifactId>
       <type>ejb-client</type>
       <version>${project.version}</version>
    </dependency>
    
    Copy to Clipboard Toggle word wrap
现在已经正确配置了这个项目,您可以添加代码来访问并调用 session bean。

过程 3.23. 用 JNDI 获取 Bean 代理并调用 Bean 的方法

  1. 处理 checked 异常

    下面代码里的两个方法 (InitialContext()lookup()) 都会抛出类型为 javax.naming.NamingException 的 checked 异常。这些方法调用必须包括在捕获 NamingException 的 try/catch 块里,或者是再声明抛出 NamingException 的方法里。ejb-remote quickstart 使用了第二种方法。
  2. 创建一个 JNDI 上下文

    JNDI 上下文对象提供了从服务器请求资源的机制。请使用下列代码创建 JNDI 上下文:
    final Hashtable jndiProperties = new Hashtable();
    jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
    final Context context = new InitialContext(jndiProperties);
    
    Copy to Clipboard Toggle word wrap
    JNDI 服务的连接属性是从 jboss-ejb-client.properties 文件里读取的。
  3. 使用 JNDI Context's lookup() 方法来获取 bean 代理

    调用 bean 代理的 lookup() 方法并将您请求的 session bean 的 JNDI 名称传入。这将返回一个对象,它必须转换为包含您要调用的方法的远程商业接口的类型。
    final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup(
        "ejb:/jboss-ejb-remote-server-side//CalculatorBean!" + 
        RemoteCalculator.class.getName());
    
    
    Copy to Clipboard Toggle word wrap
    Session bean 的 JNDI 名称是用特殊语法定义的。详情请参考 第 3.2.10.3 节 “EJB JNDI 命名引用”
  4. 调用方法

    现在您已有一个代理 bean 对象,您可以调用远程商业接口里包含的任何方法了。
    int a = 204;
    int b = 340;
    System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server");
    int sum = statelessRemoteCalculator.add(a, b);
    System.out.println("Remote calculator returned sum = " + sum);
    
    Copy to Clipboard Toggle word wrap
    代理 bean 将方法调用请求传入服务器上的 session bean。其结果被返回到代理 bean,然后再返回给调用者。代理 bean 和远程 session bean 间的通讯对于调用者来说是透明的。
您现在应该可以配置一个 Maven 项目来支持调用远程服务器上的 session bean 并编写代码,使用通过 JNDI 从服务器获取的代理 bean 来调用 session bean 方法。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部