How to view the JNDI tree in WildFly

The naming subsystem provides an overview of the local JNDI namespace. The Jakarta EE platform specification defines the following JNDI contexts:

  • java:comp – The namespace is scoped to the current component (i.e. EJB)
  • java:module – Scoped to the current module
  • java:app – Scoped to the current application
  • java:global – Scoped to the application server

In addition to the standard namespaces, WildFly also provides the following two global namespaces:

  • java:jboss
  • java:/

Please note that only entries within the java:jboss/exported context are accessible over remote JNDI. For web deployments java:comp is aliased to java:module, so EJB’s deployed in a war do not have their own comp namespace.

You can view the JNDI binding in two ways: from the CLI or from the Web admin interface

Using CLI

Connect. Then navigate to the naming subsystem and run the jndi-view command:

[disconnected /] connect

[[email protected]:9990 /] /subsystem=naming:jndi-view
{
    "outcome" => "success",
    "result" => {
        "java: contexts" => {
            "java:" => {
                "ConnectionFactory" => {
                    "class-name" => "org.hornetq.jms.client.HornetQJMSConnection
Factory",
                    "value" => "HornetQConnectionFactory [serverLocator=ServerLo
catorImpl [initialConnectors=[org-hornetq-core-remoting-impl-invm-InVMConnectorF
actory?server-id=0], discoveryGroupConfiguration=null], clientID=null, dupsOKBat
chSize=1048576, transactionBatchSize=1048576, readOnly=false]"
                },
. . . . .
}

If running in Domain mode, include the host name and the target server in your command. Example:

/host=master/server=server-one/subsystem=naming:jndi-view

Using the Web Admin Console

Just log in to the admin console and select the Runtime upper Tab. From there, click on the View button in the JNDI subsystem:

jndi view wildfly jboss

Fetch the JNDI Programmatically

Finally, you can dump the JNDI Context of the application server using the javax.naming.NamingEnumeration Class. Here is a simple method which print recursively the JNDI tree under “java:jboss“:

public void discoverJndi(String path, Context context) throws Exception {
    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 (Exception e) {}
}

Then, to explore under the JNDI “java:jboss” just use the above method as follows:

discoverJndi("java:jboss", new InitialContext());

Here is a sample output from WildFly Console:

11:33:59,050 INFO  [stdout] (default task-1) java:jboss/TransactionManager
11:33:59,051 INFO  [stdout] (default task-1) java:jboss/TransactionSynchronizationRegistry
11:33:59,051 INFO  [stdout] (default task-1) java:jboss/UserTransaction
11:33:59,052 INFO  [stdout] (default task-1) java:jboss/ee
11:33:59,052 INFO  [stdout] (default task-1) java:jboss/ee/concurrency
11:33:59,052 INFO  [stdout] (default task-1) java:jboss/ee/concurrency/scheduler
11:33:59,052 INFO  [stdout] (default task-1) java:jboss/ee/concurrency/scheduler/default
11:33:59,053 INFO  [stdout] (default task-1) java:jboss/ee/concurrency/factory
11:33:59,053 INFO  [stdout] (default task-1) java:jboss/ee/concurrency/factory/default
11:33:59,053 INFO  [stdout] (default task-1) java:jboss/ee/concurrency/executor
11:33:59,053 INFO  [stdout] (default task-1) java:jboss/ee/concurrency/executor/default
11:33:59,053 INFO  [stdout] (default task-1) java:jboss/ee/concurrency/context
11:33:59,054 INFO  [stdout] (default task-1) java:jboss/ee/concurrency/context/default
11:33:59,054 INFO  [stdout] (default task-1) java:jboss/infinispan
11:33:59,054 INFO  [stdout] (default task-1) java:jboss/infinispan/container
11:33:59,054 INFO  [stdout] (default task-1) java:jboss/infinispan/container/ejb
11:33:59,055 INFO  [stdout] (default task-1) java:jboss/infinispan/container/hibernate
11:33:59,055 INFO  [stdout] (default task-1) java:jboss/infinispan/container/server
11:33:59,055 INFO  [stdout] (default task-1) java:jboss/infinispan/container/web
11:33:59,055 INFO  [stdout] (default task-1) java:jboss/infinispan/configuration
11:33:59,056 INFO  [stdout] (default task-1) java:jboss/infinispan/configuration/web
11:33:59,056 INFO  [stdout] (default task-1) java:jboss/infinispan/configuration/web/default
11:33:59,056 INFO  [stdout] (default task-1) java:jboss/infinispan/configuration/web/dist
11:33:59,056 INFO  [stdout] (default task-1) java:jboss/infinispan/configuration/web/routing
11:33:59,057 INFO  [stdout] (default task-1) java:jboss/infinispan/configuration/ejb
11:33:59,057 INFO  [stdout] (default task-1) java:jboss/infinispan/configuration/ejb/client-mappings
11:33:59,057 INFO  [stdout] (default task-1) java:jboss/infinispan/configuration/ejb/persistent
11:33:59,057 INFO  [stdout] (default task-1) java:jboss/infinispan/configuration/ejb/transient
11:33:59,058 INFO  [stdout] (default task-1) java:jboss/datasources
11:33:59,058 INFO  [stdout] (default task-1) java:jboss/datasources/ExampleDS
11:33:59,058 INFO  [stdout] (default task-1) java:jboss/mail
11:33:59,074 INFO  [stdout] (default task-1) java:jboss/mail/Default
11:33:59,077 INFO  [stdout] (default task-1) java:jboss/clustering
11:33:59,077 INFO  [stdout] (default task-1) java:jboss/clustering/registry
11:33:59,077 INFO  [stdout] (default task-1) java:jboss/clustering/registry/web
11:33:59,078 INFO  [stdout] (default task-1) java:jboss/clustering/registry/web/default-server
11:33:59,078 INFO  [stdout] (default task-1) java:jboss/clustering/registry/ejb
11:33:59,078 INFO  [stdout] (default task-1) java:jboss/clustering/registry/ejb/http-remoting-connector
11:33:59,078 INFO  [stdout] (default task-1) java:jboss/clustering/dispatcher
11:33:59,079 INFO  [stdout] (default task-1) java:jboss/clustering/dispatcher/default
11:33:59,079 INFO  [stdout] (default task-1) java:jboss/clustering/dispatcher/ee
11:33:59,079 INFO  [stdout] (default task-1) java:jboss/clustering/dispatcher/ejb
11:33:59,079 INFO  [stdout] (default task-1) java:jboss/clustering/dispatcher/hibernate
11:33:59,079 INFO  [stdout] (default task-1) java:jboss/clustering/dispatcher/server
11:33:59,080 INFO  [stdout] (default task-1) java:jboss/clustering/dispatcher/web
11:33:59,080 INFO  [stdout] (default task-1) java:jboss/clustering/group
11:33:59,080 INFO  [stdout] (default task-1) java:jboss/clustering/group/default
11:33:59,080 INFO  [stdout] (default task-1) java:jboss/clustering/group/ee
11:33:59,081 INFO  [stdout] (default task-1) java:jboss/clustering/group/ejb
11:33:59,081 INFO  [stdout] (default task-1) java:jboss/clustering/group/hibernate
11:33:59,081 INFO  [stdout] (default task-1) java:jboss/clustering/group/server
11:33:59,081 INFO  [stdout] (default task-1) java:jboss/clustering/group/web
11:33:59,082 INFO  [stdout] (default task-1) java:jboss/jgroups
11:33:59,082 INFO  [stdout] (default task-1) java:jboss/jgroups/factory
11:33:59,082 INFO  [stdout] (default task-1) java:jboss/jgroups/factory/default
11:33:59,082 INFO  [stdout] (default task-1) java:jboss/jgroups/factory/ee
11:33:59,082 INFO  [stdout] (default task-1) java:jboss/jgroups/factory/udp
11:33:59,083 INFO  [stdout] (default task-1) java:jboss/jgroups/channel
11:33:59,083 INFO  [stdout] (default task-1) java:jboss/jgroups/channel/default
11:33:59,083 INFO  [stdout] (default task-1) java:jboss/jgroups/channel/ee