【问题标题】:How does the JNDI lookup work in this JMS example?在这个 JMS 示例中,JNDI 查找是如何工作的?
【发布时间】:2014-04-13 09:28:50
【问题描述】:

我很难理解以下 JMS 示例的 JNDI 部分。

public static void main(String[] args) {
    try {
        // Gets the JNDI context
        Context jndiContext = new InitialContext();
        // Looks up the administered objects
        ConnectionFactory connectionFactory = (ConnectionFactory)
                jndiContext.lookup("jms/javaee7/ConnectionFactory");
        Destination queue = (Destination) jndiContext.lookup("jms/javaee7/Queue");
        // Sends a text message to the queue
        try (JMSContext context = connectionFactory.createContext()) {
            context.createProducer().send(queue, "Text message sent at " + new Date());
        }
    } catch (NamingException e) {
        e.printStackTrace();
    }
}

我得到这个例子的那本书没有提到使这个 JNDI 查找成为可能的设置。例如,在

ConnectionFactory connectionFactory = (ConnectionFactory)
      jndiContext.lookup("jms/javaee7/ConnectionFactory");

是否应该运行某种服务器以便jndiContext 可以获取ConnectionFactory 对象?一般来说,上面的 JNDI 查找需要什么样的设置才能工作?

非常感谢。

【问题讨论】:

  • 如果没有更多设置,它根本无法工作,除非它是 webapp 的一部分而不是独立程序的一部分。你需要定义。一个初始上下文工厂和一个用于开始的上下文 URL。有关示例,请参阅 Oracle JBDI 教程。
  • @EJP ConnectionFactory 如何加载 jndi.properties?虽然有 ldap example 我没有在 JNDI 教程中看到回答这个问题的解决方案。

标签: java jms jndi


【解决方案1】:

一般来说,JNDI 是一种服务,它提供一组供应用程序使用的对象。该服务通常由应用服务器或 Web 服务器或专用 LDAP 服务器提供。 如果您尝试遵循的教程解释了 Web 应用程序上下文中的 JMS 教程,那么很可能需要在应用程序服务器(例如 Glassfish、JBoss)或 Web 服务器(例如 Tomcat)中完成一些设置。 访问 JNDI 的方式也取决于提供者。通常,这涉及到一个配置文件(属性文件或 XML 文件)。 使用 JMS 的另一种替代方法是使用专用的 JMS 提供程序,例如 ActiveMQ。这样,您就不需要任何应用程序服务器。您的应用程序可以只是一个独立的 Java 应用程序(即不一定是 Web 应用程序)。此处解释了通过 JNDI 访问 ActiveMQ 提供的对象:https://activemq.apache.org/jndi-support.html。 通用JNDI教程:http://docs.oracle.com/javase/tutorial/jndi/

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2015-07-22
    • 2012-09-12
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多