【问题标题】:Caching JNDI Lookup缓存 JNDI 查找
【发布时间】:2016-10-12 09:59:36
【问题描述】:

调用 EJB 本地接口方法的推荐方法是执行查找:

<code>
Context ic = new IntialContext(); 
ic.lookup(objectJndiName);
</code>

但是,我在应用程序开始时浏览了完整的 JNDI 树,最后我能够创建所有对象的映射:

<code> 
   Map <String,Object> 
</code>

带有键 ObjectName 和所需接口实现的对象。我用键搜索对象并在接口上调用所需的方法,如下所示:

method.invoke(bean, args);

这个方法好吗?还是我应该每次都查找所需的 ejb?

【问题讨论】:

  • 您的方式不会捕捉到加载地图后发生的变化。这没有任何意义。这里没有什么昂贵的优化。
  • 我不需要跟踪 impl 对象的变化,因为实现是无状态会话 bean,其方法不需要任何状态。
  • 我没有说任何关于 impl 对象的更改。我只是说变化。不要妄下结论。绑定的内容可能会发生变化。这仍然没有意义。所以不要这样做。

标签: java ejb jndi


【解决方案1】:

JNDI 查找不是实例化无状态 bean 的本地接口引用的推荐方法,从 EE5 及更高版本开始。只需使用@EJB 注释或CDI 的@Inject 注入bean 就可以完成这项工作。

【讨论】:

  • 这是遗留代码问题。在当前情况下,使用注释不是一个选项。现有代码使用硬编码命名约定来解析 impl 类。这是第一步。下一步自然是激活 EJB 和 Inject 注解。您是否发现线程安全存在任何问题?
  • 抱歉,您提到了本地界面。我认为在 EJB 2.x 中有 Home 和 Remote 接口而不是本地接口。很久以前就没有使用它们了,我只记得使用“服务定位器”EE 模式,其中 JNDI 获得的引用被缓存在单例类中。
  • EJB 2.1 规范中引入了本地接口
猜你喜欢
  • 2016-08-19
  • 2021-04-30
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 2019-03-19
  • 2011-08-08
  • 2015-12-01
  • 1970-01-01
相关资源
最近更新 更多