Kod do wyświetlenia wszystkich wpisów w jndi na zdalnej maszynie

Czy ktos moze powiedziec lub wskazac mi kod do wypisania wszystkich wpisów jndi na zdalnej maszynie

 44
Author: skaffman, 2010-02-24

4 answers

Można wyświetlić listę wszystkich wpisów InitialContext. Możesz użyć tego fragmentu:

InitialContext ctx = new InitialContext();
NamingEnumeration<NameClassPair> list = ctx.list("");
while (list.hasMore()) {
  System.out.println(list.next().getName());
}

Jeśli używasz serwera aplikacji, zazwyczaj istnieje opcja przeglądania drzewa JNDI.

 74
Author: Steve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-24 09:54:41

Wiem, jest dużo czasu od ostatniej odpowiedzi, ale musiałem wymienić wszystkie źródła danych jdbc dostępne w kontekście (tomee context).

W moim przypadku, potrzebowałem więcej niż list("") (niestety, to nie działało dla mnie), aby osiągnąć mój cel. Znalazłem listę środowisk nazewniczych tutaj:

Środowisko nazw Dla komponentów aplikacji J2EE

Mając to, mam wszystkie dostępne zasoby jdbc używając następnego fragmentu kodu

InitialContext ctx = new InitialContext();
NamingEnumeration<NameClassPair> list = ctx.list("java:comp/env/jdbc");
while (list.hasMore()) {
    System.out.println(list.next().getName());
}
To wszystko.

Mam nadzieję, że to pomoże ktoś inny, jak mi pomaga.

 18
Author: Vielinko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-16 17:44:50

Poprzednie odpowiedzi nie dały mi "pełnego obrazu" (na Tomcat7), więc wrzuciłem następującą kombinację, która konwertuje wartości JNDI na mapę drzewa (z wartościami 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;
}

Użycie:

toMap(new InitialContext());

Daje następujące wyjście w Tomcat7:

{
  "comp": {
    "env": {
      "myCustomVar": "foobar"
    },
    "UserTransaction": "Cannot create resource instance",
    "Resources": {
      "index.html": "org.apache.naming.resources.FileDirContext$FileResource@32edeea8",
      "WEB-INF": {
        "ibm-web-ext.xml": "org.apache.naming.resources.FileDirContext$FileResource@6132b73b",
        "ibm-web-bnd.xml": "org.apache.naming.resources.FileDirContext$FileResource@22cf71b7"
      }
    }
  }
}
 16
Author: Nick Grealy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-05 11:44:06

Używam następującego kodu (nie do produkcji):

public void discoverJndi(String path, Context context) throws TestClientException, NamingException {
    try {
        NamingEnumeration<NameClassPair> list = context.list(path);
        while (list.hasMore()) {
            String name = list.next().getName();
            String child = path.equals("") ? name : path + "/" + name;
            System.out.println(child);
            discoverJndi(child, context);
        }
    } catch (NotContextException e) {}
}
 0
Author: Alexey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-05 11:45:24