![](/img/trans.png)
[英]@Inject a bean from an EJB project gives UnsatisfiedResolutionException
[英]Inject a parameter from client to ejb bean in the context
如何在Ejb的客户端中注入参数? 像这样:
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());
在服务器端,使用拦截器获取客户端注入的参数:
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,并且在服务器端o始终为null。 有什么办法处理吗?
不,没有标准的方法可以将数据从客户端隐式传递到EJB。 您必须通过方法参数将数据显式传递给EJB。
如果使用的是RMI-IIOP,则可以编写自己的拦截器以将上下文数据传输到服务器,然后将其存储在本地线程中。 如果使用的是WebSphere Application Server,则可以使用应用程序上下文工作区 ( JSR 149尝试将其标准化,但认为它不够便携)。 这些选项可能太小众或太麻烦了,因此最好通过方法参数显式传递数据。
使用RMI-IIOP发送附加上下文数据的完整示例相当广泛,但是一般步骤如下:
byte[]
,以添加到ServiceContext中 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.