2011-03-04 22 views
3

我正在寻找检查绑定状态的对象和适当的jndi名称的方式。如何检查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

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

回答

1

最有可能的,如果没有找到对象lookup将抛出一个NamingException 1.您需要捕获异常或尝试使用list方法来检查对象是否存在。

+0

是的,我在代码中捕捉[NamingException](http://download.oracle.com/javase/1.4.2/docs/api/javax/naming/NamingException.html),但这只告诉我关于命名问题,但没有关于绑定。例如,可能存在ldap名称,但对象不存在。在这种情况下,我不会得到任何[NamingException](http://download.oracle.com/javase/1.4.2/docs/api/javax/naming/NamingException.html)。正如我所看到的,[list](http://download.oracle.com/javase/1.4.2/docs/api/javax/naming/InitialContext.html#list(java.lang.String))方法只枚举名称// @ Superfilin – Milkywayfarer 2011-03-04 09:29:48

+1

可能是我应该使用[listBindings](http://download.oracle.com/javase/1.4.2/docs/api/javax/naming/InitialContext.html#listBindings(javax.naming。名称))方法?但它似乎是非常沉重的意思,遍历所有绑定。可能存在更轻量化的方式? @Superfilin – Milkywayfarer 2011-03-04 09:30:41

+0

但是,您可以将您的目标名称指定为列表或listBindings的输入。在最好的情况下,它将返回1,最差的0个bean。我不认为它比查找更重。 – 2011-03-04 09:36:23