9

javax.jms.ConnectionFactoryスタンドアロンのJMSクライアントに挿入できません。私は以下のコードjava.lang.NullPointerExceptionでatを取得します。connectionFactory.createConnection()

JmsClient.java

public class JmsClient {

    @Resource(mappedName="jms/QueueConnectionFactory")
    private static ConnectionFactory connectionFactory;    

    @Resource(mappedName="jms/ShippingRequestQueue")
    private static Destination destination;

    public static void main(String[] args) {        
        try {
            Connection connection = connectionFactory.createConnection();
            connection.start();

            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            MessageProducer producer = session.createProducer(destination);
            ObjectMessage message = session.createObjectMessage();

            ShippingRequestQueue shippingRequest = new ShippingRequestQueue(1, "107, Old Street");

            message.setObject(shippingRequest);
            producer.send(message);
            session.close();
            connection.close();

            System.out.println("Shipping request message sent ..");
        } catch (Throwable ex) {
            ex.printStackTrace();
        }        
    }

}

Glassfish 3.1管理コンソールを使用して、 Open MQ (MoM)で対応する接続​​ファクトリと宛先リソースを作成しました。

誰かが私が欠けているものを理解するのを手伝ってもらえますか?

4

2 に答える 2

7

リソースインジェクションは、JavaEEアプリケーションサーバーやSpringコンテナなどの管理された環境でのみ機能します。スタンドアロンアプリケーションでは、JNDIが唯一の選択肢です。

一般に、アノテーションは何らかのツール/フレームワークによって処理されることを意図しており、メソッドを実行するプレーンなJVMにはそのmain()ようなものが含まれていません。私が知っているアノテーションは、JVMによってそのまま処理されるのは、コンパイル時と@Deprecatedです。@Override@SuppressWarnings

あなたのコメントへの返信:私は本にアクセスできないので、おそらくスタンドアロンのアプリケーションクライアントはなく、アプリケーションクライアントコンポーネントの実行について説明していると思います。同じではありません— GlassfishEJBFAQを確認してください。ACCは通常、アプリケーションサーバーにデプロイされ、Java Web Startを介して、またはそれなしで実行できますが、AS固有の方法で実行できます。Glassfishの例を参照してください(EJBがどのASで実行されるかは言いませんでした)。

于 2011-09-23T10:46:31.407 に答える
1

@スキップ:試してみてください @Resource(name="jms/QueueConnectionFactory") instead of @Resource(mappedName="jms/QueueConnectionFactory")

name = javax.annotation.ResourcejavadocによるJNDI名。

于 2011-09-08T12:55:01.093 に答える