2009-08-07 11 views
3

Java 1.4を使用してWebSphere 6.01でポートレットを実行しています。 JMSメッセージをJBoss 5キューに送信し、Java 5(または多分6、しかしそれは確かに1.4より新しい)を実行します。 JBossクライアントjarをポートレットのクラスパスに含める必要があるため、JNDIを使用して接続しようとすると機能しません。これらはJava 1.5です。したがって、私はInitialContextを作成しようとすると、サポートされていないメジャー/マイナーエラーが発生します。JNDIのないJMS?

JNDIを使用せずにJBossに直接接続できますか?あるいは、私が考えることのできないこの問題を回避する方法がありますか?

答えて

2

JBossのJNDIを経由せずにJMSに接続できたとしても、JMSを使用するにはJBossクライアントJARを含める必要があります。 JNDIとJMSはどちらもAPIであり、サーバーと通信するためには、そのクライアントAPIのサーバー実装が必要です。

0

JMS接続ファクトリと宛先(キューまたはトピック)を作成できる唯一の方法はJNDIで、これが通信手段です。

0

を参照してくださいあなたはイースリーことができるので、JMSプロバイダの独立したことにする方法です。それを変更。 しかし、ほとんどのプロバイダが接続ファクトリと宛先を作成する機能を提供している場合は、

2

JBossクラスではなく、Java 5をプリレックするJNDIクラスであれば、これを行うことができます。しかし、オブジェクトのすべてのプロパティを設定する必要があり、それはプロバイダ固有です。 WebSphere MQのJMSサンプルでは、​​WMQでこれを行う方法が示されており、同等のコードを作成するには、JBossのプロパティと値の名前を知る必要があります。ここでWMQ JmsProducer.javaサンプルからコードスニペットです:

JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER); 
    JmsConnectionFactory cf = ff.createConnectionFactory(); 

    // Set the properties 
    cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, host); 
    cf.setIntProperty(WMQConstants.WMQ_PORT, port); 
    cf.setStringProperty(WMQConstants.WMQ_CHANNEL, channel); 
    cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT); 
    cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, queueManagerName); 

    // Create JMS objects 
    connection = cf.createConnection(); 
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    if (isTopic) { 
    destination = session.createTopic(destinationName); 
    } 
    else { 
    destination = session.createQueue(destinationName); 
    } 
    producer = session.createProducer(destination); 

一方、あなたのJBossのクラスは、Java 1.5習得条件ならば、あなたは、Java 1.5以上を実行する必要があります。

0

問題はJNDIではなく、環境間で競合するクラス名のように聞こえるようです。

JBOSSクライアントクラスのインスタンスを作成しようとすると、クラスローディングを自分自身で実行することができます。そうすることで、ポートレットをロードしたクラスローダーとは別のクラスローダーを取得できます。 Parent-first or Parent-last behaviorが必要かどうかを理解してください。またそのページにはdebugging classloadingがあり、JBOSSライブラリを分離してクラス名の衝突を避けるためにクラスローダーのクラスパスを設定する方法を示すことができます。 advanced classloading issuesでさえ理解するのに良いリソースです。