gpt4 book ai didi

java - 将参数从客户端注入(inject)到上下文中的 ejb bean

转载 作者:行者123 更新时间:2023-11-30 08:08:02 25 4
gpt4 key购买 nike

如何在Ejb的客户端中注入(inject)参数?类似这样的事情:

final Hashtable<String, String> jndiProperties = new Hashtable<String, String>();
jndiProperties.put("java.naming.factory.initial", "org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory");
jndiProperties.put("java.naming.factory.url.pkgs", "org.ow2.jonas.naming");
jndiProperties.put("java.naming.provider.url", "rmi://localhost:1099");

final Context context = new InitialContext(jndiProperties);
Object obj = context.lookup("MyEjbTest");

context.addToEnvironment("user", new Object());

在服务器端,使用Interceptor获取客户端注入(inject)的参数:

public Object intercept(InvocationContext ctx) throws Exception {

Object o = ctx.getContextData().get("user");
if (o != null) {
LOG.info("Exists " + o.toString());
return ctx.proceed();
} else {
return null;
}
}

参数 user 永远不会注入(inject)到上下文中,并且在服务器端 o 始终为 null。有什么办法可以解决吗?

最佳答案

不,没有标准方法可以将数据从客户端隐式传递到 EJB。您必须通过方法参数显式地将数据传递到 EJB。

如果您使用 RMI-IIOP,那么您可以编写自己的 interceptor将上下文数据传输到服务器,然后将其存储在本地线程中。如果您使用的是 WebSphere Application Server,则可以使用 application context work areas ( JSR 149 试图对此进行标准化,但它被认为不够便携)。这些选项可能太小众或太麻烦,因此您最好通过方法参数显式传递数据。

使用 RMI-IIOP 发送附加上下文数据的完整示例非常广泛,但一般步骤是:

  1. 首先注册 ORBInitializer 。请参阅其中的 javadoc,但由于 ORB 配置通常由应用程序服务器严格控制,因此您应该阅读应用程序服务器文档,特别是如何(或者是否完全支持)添加 ORB 拦截器以及类加载的工作原理.
  2. 在客户端中,您的 ORBInitializer 应调用 ORBInitInfo.add_client_request_interceptor 。在 send_request 方法的实现中,调用 ClientRequestInfo.add_request_service_context
    1. 通常情况下,您会为服务上下文 ID 保留带有 OMG 的供应商前缀,但如果它是您的环境本地的(即,您不向第三方提供应用程序),那么您可能会选择一个不不与您环境中的任何其他产品冲突。
    2. 您发送的字节由您选择。您的客户端可能会在本地线程中设置一些数据,然后 send_request 方法的实现会将数据序列化为要添加到 ServiceContextbyte[] 。 .
  3. 在服务器中,您的 ORBInitializer 应调用 add_server_request_interceptor 。您对此拦截器的实现将解码客户端发送的服务上下文,并可能在请求期间设置一个线程局部变量,并在最后将其删除。

关于java - 将参数从客户端注入(inject)到上下文中的 ejb bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30808391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com