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;
}
}
用于查找的初始上下文工厂为 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>
作为在初始上下文中嵌入 PROVIDER_URL、SECURITY_PRINCIPAL 和 SECURITY_CREDENTIALS 参数的替代方案,您可以在 wildfly > 元素来配置连接 URI 和安全设置。
-config.xml 文件中分别使用 client<connection-uri> 和 <authentication-
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() { }
}
该注释允许远程接口提供商告知远程接口使用者是否需要方法进行事务。