【问题标题】:How to check jndi bind/unbind status?如何检查 jndi 绑定/解除绑定状态?
【发布时间】:2011-07-08 16:22:14
【问题描述】:

我正在寻找检查对象绑定状态和适当 jndi 名称的方法。

例如,我有一些 ldap jms 队列名称: "/TheRootContext/SomeSubContext/SOME.QUEUE.NAME:queue"

我需要检查是否存在适当的队列并且它与传递的名称绑定。

检查“绑定状态”的正确方法是什么?

我看到这样的算法:

  1. 执行 jndi 查找以确保提供的名称存在。

    Object obj = ctx.lookup("/TheRootContext/SomeSubContext/SOME.QUEUE.NAME:queue");

  2. %我不知道下一步该做什么%,但建议您检查一下:

    obj != null && obj instanceof javax.jms.Queue

我说的对吗?正确的方法是什么?

【问题讨论】:

    标签: java queue jms bind jndi


    【解决方案1】:

    如果找不到对象,lookup 很可能会在 1 中抛出 NamingException。您需要捕获异常或尝试使用 list 方法来检查对象是否存在。

    【讨论】:

    • 是的,我在代码中找到了NamingException,但这仅告诉我命名问题,而没有告诉我绑定问题。例如,可能存在 ldap 名称但对象不存在。在那种情况下,我不会得到任何NamingException。如我所见,list 方法仅枚举绑定到上下文的名称。@Superfilin
    • 我应该使用listBindings 方法吗?但是,遍历所有绑定似乎是非常沉重的意思。可能存在更轻量级的方式吗? @Superfilin
    • 但是您可以将目标名称指定为 list 或 listBindings 的输入。在最好的情况下,它将返回 1,在最坏的情况下返回 0 bean。我不认为它比查找更重。
    • 另外,我认为您不能将名称绑定到 null。至少据我所知,并非所有 JNDI 提供者都允许这样做。因此,在这种情况下也会抛出 NamingException。
    • 如果您的 JNDI 提供程序可以进行空绑定,那么您在 #2 中所做的检查就足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    相关资源
    最近更新 更多