Может ли кто-нибудь сказать или указать мне код, чтобы перечислить все записи jndi на удаленном компьютере.
Код для перечисления всех записей в jndi на удаленной машине
Ответ 1
Можно перечислять все записи InitialContext. Вы можете использовать этот фрагмент:
InitialContext ctx = new InitialContext();
NamingEnumeration<NameClassPair> list = ctx.list("");
while (list.hasMore()) {
System.out.println(list.next().getName());
}
Если вы используете сервер приложений, обычно существует возможность просмотра дерева JNDI.
Ответ 2
Я знаю, что есть много времени от последнего ответа, но мне нужно было перечислить весь источник данных jdbc, доступный в контексте (контекст tomee).
В моем случае мне понадобилось больше, чем list("")
(к сожалению, это не сработало для меня), чтобы достичь моей цели.
Здесь я нашел список имен:
Именование среды для компонентов приложения J2EE
После этого я получил все доступные ресурсы jdbc, используя следующий фрагмент кода
InitialContext ctx = new InitialContext();
NamingEnumeration<NameClassPair> list = ctx.list("java:comp/env/jdbc");
while (list.hasMore()) {
System.out.println(list.next().getName());
}
Что все.
Я надеюсь, что это поможет кому-то другому, как помогает мне.
Ответ 3
Предыдущие ответы не дали мне "полную картину" (на Tomcat7), поэтому я собрал следующее объединение, которое преобразует значения JNDI в карту деревьев (с значениями toString
):
import javax.naming.*;
...
public static Map toMap(Context ctx) throws NamingException {
String namespace = ctx instanceof InitialContext ? ctx.getNameInNamespace() : "";
HashMap<String, Object> map = new HashMap<String, Object>();
log.info("> Listing namespace: " + namespace);
NamingEnumeration<NameClassPair> list = ctx.list(namespace);
while (list.hasMoreElements()) {
NameClassPair next = list.next();
String name = next.getName();
String jndiPath = namespace + name;
Object lookup;
try {
log.info("> Looking up name: " + jndiPath);
Object tmp = ctx.lookup(jndiPath);
if (tmp instanceof Context) {
lookup = toMap((Context) tmp);
} else {
lookup = tmp.toString();
}
} catch (Throwable t) {
lookup = t.getMessage();
}
map.put(name, lookup);
}
return map;
}
Применение:
toMap(new InitialContext());
Дает следующий вывод в Tomcat7:
{
"comp": {
"env": {
"myCustomVar": "foobar"
},
"UserTransaction": "Cannot create resource instance",
"Resources": {
"index.html": "[email protected]",
"WEB-INF": {
"ibm-web-ext.xml": "[email protected]",
"ibm-web-bnd.xml": "[email protected]"
}
}
}
}