5.2. 使用远程 Jakarta Enterprise Beans 客户端


5.2.1. 初始上下文查找

在创建初始上下文时,您可以使用 PROVIDER_URL 属性传递远程服务器的地址:

public class Client {
    public static void main(String[] args)
            throws NamingException, PrivilegedActionException, InterruptedException {
        InitialContext ctx = new InitialContext(getCtxProperties());
        String lookupName = "ejb:/server/HelloBean!ejb.HelloBeanRemote";
        HelloBeanRemote bean = (HelloBeanRemote)ctx.lookup(lookupName);
        System.out.println(bean.hello());
        ctx.close();
    }
    public static Properties getCtxProperties() {
        Properties props = new Properties();
        props.put(Context.INITIAL_CONTEXT_FACTORY, WildFlyInitialContextFactory.class.getName());
        props.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
        props.put(Context.SECURITY_PRINCIPAL, "joe");
        props.put(Context.SECURITY_CREDENTIALS, "joeIsAwesome2013!");
        return props;
    }
}
Copy to Clipboard Toggle word wrap
注意

用于查找的初始上下文工厂为 org.wildfly.naming.client.WildFlyInitialContextFactory

5.2.2. 远程 Jakarta Enterprise Beans 配置文件

JBoss EAP 具有 Elytron 安全框架。wildfly-config.xml 文件存在于客户端应用的类路径的 META-INF/ 目录中,允许针对 Elytron 安全框架和 Jakarta Enterprise Beans 客户端配置提供广泛的身份验证和授权选项。

<configuration>
   <authentication-client xmlns="urn:elytron:client:1.2">
      <authentication-rules>
         <rule use-configuration="default" />
      </authentication-rules>
      <authentication-configurations>
         <configuration name="default">
            <sasl-mechanism-selector selector="DIGEST-MD5" />
            <set-user-name name="admin" />
            <credentials>
               <clear-password password="password123!" />
            </credentials>
         </configuration>
      </authentication-configurations>
   </authentication-client>
   <jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0">
      <connections>
         <connection uri="remote+http://127.0.0.1:8080" />
      </connections>
   </jboss-ejb-client>
</configuration>
Copy to Clipboard Toggle word wrap

作为在初始上下文中嵌入 PROVIDER_URLSECURITY_PRINCIPALSECURITY_CREDENTIALS 参数的替代方案,您可以在 wildfly -config.xml 文件中分别使用 <connection-uri> 和 <authentication- client > 元素来配置连接 URI 和安全设置。

5.2.3. ClientTransaction 注解

@org.jboss.ejb.client.annotation.ClientTransaction 注释处理来自 Jakarta Enterprise Beans 客户端的交易传播。如果客户没有交易,您可以强制传播失败,或者防止交易传播,即使客户有一个主动交易。您可以使用 org.jboss.ejb.client.annotation.ClientTransactionPolicy 接口的常量来控制 ClientTransaction 注解的策略。以下是 org.jboss.ejb.client.annotation.ClientTransactionPolicy 接口的常量:

  • MANDATORY: Fail(无客户端交易上下文时除外);如果存在客户端侧事务上下文,则传播客户端交易上下文。
  • NEVER:不传播任何事务上下文;如果存在客户端交易上下文,则会引发异常。
  • 注意_SUPPORTED:不传播任何事务上下文,无论是否存在客户端交易上下文。
  • SUPPORTS:如果没有客户端端交易上下文,则中断交易;传播客户端交易上下文(如果存在)。

如果没有注解,则默认策略为 org.jboss.ejb.client.annotation.ClientTransactionPolicy#SUPPORTS,这意味着事务会被传播(如果存在),但传播不会失败,无论事务是否存在。

@ClientTransaction(ClientTransactionPolicy.MANDATORY)
@Remote
public interface RemoteCalculator  {
   public void callRemoteEjb() { }
}
@Stateless
@Remote(RemoteCalculator.class)
public class CalculatorBean implements RemoteCalculator {

   @Override
   public void callRemoteEjb()  {   }
}
Copy to Clipboard Toggle word wrap

该注释允许远程接口提供商告知远程接口使用者是否需要方法进行事务。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat