Does JMS require the Java Naming and Directory Interface (JNDI)?
No, but... JNDI provides network-oriented look-up services for distributed objects (among other things). It's possible to implement, as well as use, JMS software without JNDI. In general, however, JNDI provides critical services for JMS-based software because it's important to be able to locate (programmatically) JMS services implemented in objects called factories.
For example, applications that communicate via JMS must set up communication pathways that involve destinations (topic areas and queues), connections, sessions, and so on. JNDI makes it easy for an application to locate, for example, a connection factory for the appropriate vendor's JMS middleware, which can then provide a connection, which can provide a session, and so on, all relative to the JMS server that's associated with that connection factory.