如何在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());
在服务器端,使用Interceptor获取客户端注入的参数:
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。有没有办法解决这个问题?
答案 0 :(得分:1)
不,没有标准方法可以从客户端隐式地将数据传递给EJB。您必须通过方法参数显式地将数据传递给EJB。
如果您正在使用RMI-IIOP,那么您可以编写自己的interceptor来将上下文数据传输到服务器,然后将其存储在本地线程中。如果您正在使用WebSphere Application Server,则可以使用application context work areas(这是JSR 149尝试标准化的,但它被认为不够便携)。这些选项可能太小或太麻烦,所以你最好只通过方法参数显式传递数据。
使用RMI-IIOP发送附加上下文数据的完整示例非常广泛,但一般步骤如下:
driver.get('http://sberbank.ru/ru/person/credits/money/consumer_unsecured')
driver.find_element_by_xpath('//*[@id="s2id_autogen1"]/a').click()
driver.find_element_by_xpath('//ul[@class="select2-results ps-container"]/li[2]').click()
以添加到ServiceContext。