是否有任何简单的JNDI上下文实现,这意味着它们可以启动/停止等泄漏

时间:2011-01-03 01:22:49

标签: java jndi

我不是JNDI的特别粉丝 - 我认为当出于多种原因想要使用OSGI时,这是一项糟糕的技术。

  • JNDI不是自包含的。
  • 它很容易泄漏并留在jndi中。
  • 它太容易引起冲突,因为它是基于字符串的。
  • JNDI通常是一个没有范围的全局事物 - 任何一个人都在提供绑定时没有命名冲突。
  • 应该减少套接字 - 仅从Map中获取对象。

我想控制jndi上下文的范围。我需要它使用Hornet JMS层,不幸的是使用JNDI来注册队列,主题等。我不想提供我自己编码的jndi上下文,我想尝试重用另一个提供其范围而不是全局的。

有没有人有解决这个问题的解决方案/建议?

3 个答案:

答案 0 :(得分:1)

您不需要JNDI上下文实现来解决此问题。您只需要像在Java的其余部分一样正确编码资源获取和发布:基本上,通过Context.close()块中的finally{}。另外,请务必关闭您可能拥有的任何NamingEnumerations

答案 1 :(得分:1)

SimpleJNDI是JNDI的开源实现,支持内存上下文,可以从文件夹树(子上下文)和属性/ XML文件(对象)填充。

官方网站上的更多信息:http://code.google.com/p/osjava/wiki/SimpleJNDI(文档在可下载档案中)。

(P.S。:这不是一个活跃的项目 - 最新版本是从2010年开始 - 但它无论如何都可以帮助......)

答案 2 :(得分:1)

我认为Simple-JNDI可以满足您的要求“提供范围而非全局”。您可以将其配置为生成共享或非共享上下文。每次拨打

时都处于非共享模式
Context ctx = new InitialContext()

您将获得上下文定义的唯一内存副本,只有调用代码才能查看和修改。

要获得有关它的更多信息,请转到https://github.com/h-thurow/Simple-JNDI。它是一个基于旧的osjava Simple-JNDI的活动项目。