web-dev-qa-db-ja.com

このJMSの例では、JNDIルックアップはどのように機能しますか?

次の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");

jndiContextConnectionFactoryオブジェクトを保持できるように、何らかのサーバーを実行する必要がありますか?一般に、上記のJNDIルックアップが機能するには、どのようなセットアップが必要ですか?

どうもありがとうございました。

9
JBT

一般に、JNDIは、アプリケーションで使用されるオブジェクトのセットを提供するサービスです。このサービスは通常、アプリケーションサーバーまたはWebサーバー、あるいは専用のLDAPサーバーによって提供されます。従おうとしているチュートリアルがWebアプリケーションのコンテキストでJMSチュートリアルを説明している場合、アプリケーションサーバー(Glassfish、JBossなど)またはWebサーバー(Tomcatなど)で実行するセットアップがいくつかある可能性があります。 JNDIにアクセスする方法は、プロバイダーによっても異なります。通常、これには構成ファイル(プロパティファイルまたはXMLファイルのいずれか)が含まれます。 JMSを使用する別の方法は、ActiveMQなどの専用のJMSプロバイダーを利用することです。このように、アプリケーションサーバーは必要ありません。アプリケーションはスタンドアロンJavaアプリケーション(つまり、必ずしもWebアプリケーションである必要はありません)にすることができます。JNDIを介してActiveMQによって提供されるオブジェクトへのアクセスについては、ここで説明します: https://activemq.Apache。 org/jndi-support.html 。一般的なJNDIチュートリアル: http://docs.Oracle.com/javase/tutorial/jndi/

10
suhe_arie