完全にコミットするためにJMSメッセージをMQに送信するにはどうすればよいですか?

ザナトス

Websphere Application ServerにデプロイするEARがあります。このEARは、関数を使用して、JMSを使用してMQにメッセージを送信し、別のキューからすぐにメッセージを受信します。

    ConnectionFactory cf = null;
    InitialContext context = null;
    String[] arrDatos_SR = null;

    Connection conn = null;
    Session session = null;
    Queue queue = null;
    Queue queue2 = null;

    Destination dest = null;
    Destination dest2 = null;
    MessageConsumer consumer = null;
    MessageProducer producer = null;
    TextMessage message = null;

    String comando = "";
    int tamanio = 0;
    String tamanio2 = "";
    String cadena = "";

    try {
        context = new InitialContext();
        cf = (ConnectionFactory) context.lookup(arrDatos[1].trim());
        conn = cf.createConnection();
        session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);      
        queue = (Queue) context.lookup(arrDatos[2].trim());
        queue2 = (Queue) context.lookup(arrDatos[3].trim());
        dest = (Destination) queue;
        dest2 = (Destination) queue2;

        producer = session.createProducer(dest);


        // Create a text message using the queue session.
        TextMessage textMessage = session.createTextMessage();

        textMessage.setText(arrDatos[4]);

        textMessage.setJMSReplyTo(dest2);
        textMessage.setJMSMessageID(arrDatos[6]);
        textMessage.setJMSCorrelationID(arrDatos[7]);
        producer.send(textMessage);


    } catch (NamingException e) {
        // TODO Auto-generated catch block
        logger.error("MQSendReceive() - Exception e2 = "
                + e, e);
    } catch (JMSException e) {
        // TODO Auto-generated catch block
        logger.error("MQSendReceive() - Exception e2 = "
                + e, e);
    } 

        arrDatos[5] = arrDatos[5].trim();

        try{
            conn.start();       
            consumer = session.createConsumer(dest2);
            Message receivedMessage = consumer.receive(Long.parseLong(arrDatos[5]) * 1000);



            if(receivedMessage != null)
            {
                message = (TextMessage)receivedMessage;
                comando = message.getText();
                comando = comando.trim();
                tamanio = comando.length();
                tamanio2 = StringUtils.leftPad(Integer.toString(tamanio), 9, '0');

                comando = StringUtils.rightPad(comando, Constantes.TAMANIO_RESPUESTA_DES_C1, ' ');
                cadena = arrDatos[0] + comando + tamanio2; 
            }
            else
            {
                comando = new String();
                comando = "";
                tamanio = comando.length();
                tamanio2 = StringUtils.leftPad(Integer.toString(tamanio), 9, '0');

                cadena = arrDatos[0] + comando + tamanio2;
            }

            arrDatos_SR = new String[2];
            arrDatos_SR[0] = cadena;
            arrDatos_SR[1] = arrDatos[0];

        }
        catch(Exception e)
        {
            logger.error("MQSendReceive() - Excepcion:" + e);
        }
        finally
        {
            try {
                consumer.close();
                session.close();
                conn.close();
                context.close();
            } catch (JMSException e) {
                // TODO Auto-generated catch block
                logger.error("MQSendReceive() - Error desconectando de MQ - Excepcion:" + e);
            } catch (NamingException e) {
                // TODO Auto-generated catch block
                logger.error("MQSendReceive() - Error desconectando de MQ - Excepcion:" + e);
            }

        }

        return arrDatos_SR;

メッセージはMQキュー#1に送信され、次に別のMQキュー#2に転送されます。これは、別のMQキュー#3への送信キューです。メッセージをこのキューに入れるWebsphereMQ管理GUIでテストしたところ、メッセージはスムーズに転送されました。しかし、何らかの理由でコードを使用すると、すぐに送信されません。代わりに、受信が終了した後(タイムアウトが期限切れになったとき、または実際にメッセージを受信したとき)に実行されます。

なぜこれが起こっているのか誰かに教えてもらえますか?

更新:(2014年3月31日)@ LocalBean、@ Singleton、および@TransactionManagement(TransactionManagementType.CONTAINER)アノテーションが付いたEJBコンテナーを使用していることを忘れました。SO(http://goo.gl/JBSW7rからこの投稿を読んで、接続全体を作成する3つのクラスと、パブリックメソッドを使用するオブジェクトとしてそれらすべてを使用する1つのメインがあることに気付きました。 。これらのクラスも同じアノテーションでEJBに変換することにしました。また、各メソッドの@TransactionAttributeタイプを、いくつかが機能するかどうかをテストするために、一度に1つずつREQUIRED、NOT SUPPORTED、およびMANDATORYに変更しようとしました。また、セッション行を次のように変更しました。

session = conn.createSession(true, Session.SESSION_TRANSACTED); 

結果は同じように見えます。MessageConsumerのタイムアウト間隔中にメッセージが受信されている間、メッセージはまだ送信キューに留まっています。

誰かが私にこれらについていくつかの考えを与えることができますか?

ザナトス

何度も試した後、EJBの削除を終了しました。ロジック全体でWebプロジェクトを作成しました。whileループのあるスレッドを使用して、コードの繰り返しを制御することにしました。ブール変数を使用して、EARの開始とシャットダウンのwhileループの初期化と停止を制御します。

さて、Webアプリケーションに戻ると、正常に機能します。なぜこのように機能し、他の方法では機能しないのかはまだわかりませんが、今のところは問題ないと思います。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

コミットメッセージを重要なトラッカーストーリーにコメントとして送信するためのgitフックを追加するにはどうすればよいですか?

分類Dev

GitHubでコミットメッセージを検索するにはどうすればよいですか?

分類Dev

BitBucketでコミットメッセージを検索するにはどうすればよいですか?

分類Dev

svnでコミットメッセージを編集するにはどうすればよいですか?

分類Dev

SVNコミットメッセージログを更新するにはどうすればよいですか?

分類Dev

コードでヒントメッセージを送信するにはどうすればよいですか?

分類Dev

完全なコミットメッセージをgitに記録するにはどうすればよいですか?

分類Dev

埋め込み直後にメッセージを送信するにはどうすればよいですか?

分類Dev

Spring Bootを継続的に使用してIBM MQ JMSからメッセージを受信するにはどうすればよいですか?

分類Dev

クライアント側でこのエラーメッセージのコンテンツを使用するために、C#からAjaxにエラーメッセージを送信するにはどうすればよいですか?

分類Dev

Git:マージされたコミットを履歴メッセージから削除するにはどうすればよいですか?

分類Dev

特定のコミットの間にコミットメッセージを一覧表示するにはどうすればよいですか?

分類Dev

コミットしたときにgitcommitメッセージを取得するにはどうすればよいですか?

分類Dev

ボットが送信した埋め込みメッセージのIDを取得するにはどうすればよいですか?

分類Dev

Jenkinsビルドをトリガーした「変更」(コミットメッセージ)を取得するにはどうすればよいですか?

分類Dev

Twythonでダイレクトメッセージを送信するにはどうすればよいですか?

分類Dev

「このマージが必要な理由を説明するためにコミットメッセージを入力してください」というプロンプトでgitmergeを中止するにはどうすればよいですか。

分類Dev

メッセージを入力した後、Git Bashでコミットを完了するにはどうすればよいですか?

分類Dev

マージされたコミットをBitbucketから完全に削除するにはどうすればよいですか?

分類Dev

コミットメッセージに特定の単語が含まれている最新のgitcommitを参照するにはどうすればよいですか?

分類Dev

コミットメッセージをチェックするgitpre-commitフックを作成するにはどうすればよいですか?

分類Dev

Mercurialで誤ったコミットメッセージを編集するにはどうすればよいですか?

分類Dev

TortoiseGitで間違ったコミットメッセージを編集するにはどうすればよいですか?

分類Dev

Youtrack Time Trackingのコミットメッセージで費やした時間を設定するにはどうすればよいですか?

分類Dev

Dockerで子イメージにコミットした後に親イメージを削除するにはどうすればよいですか?

分類Dev

WebViewからReactNativeにメッセージを送信するにはどうすればよいですか?

分類Dev

PythonでのDiscordボットのプログラミング-メッセージを自動的に送信させるにはどうすればよいですか?

分類Dev

ターミナルにエラーメッセージを送信しているプロセスを特定するにはどうすればよいですか?

分類Dev

NSArrayControllerがオブジェクトを自動的に再配置した後にメッセージを送信するにはどうすればよいですか?

Related 関連記事

  1. 1

    コミットメッセージを重要なトラッカーストーリーにコメントとして送信するためのgitフックを追加するにはどうすればよいですか?

  2. 2

    GitHubでコミットメッセージを検索するにはどうすればよいですか?

  3. 3

    BitBucketでコミットメッセージを検索するにはどうすればよいですか?

  4. 4

    svnでコミットメッセージを編集するにはどうすればよいですか?

  5. 5

    SVNコミットメッセージログを更新するにはどうすればよいですか?

  6. 6

    コードでヒントメッセージを送信するにはどうすればよいですか?

  7. 7

    完全なコミットメッセージをgitに記録するにはどうすればよいですか?

  8. 8

    埋め込み直後にメッセージを送信するにはどうすればよいですか?

  9. 9

    Spring Bootを継続的に使用してIBM MQ JMSからメッセージを受信するにはどうすればよいですか?

  10. 10

    クライアント側でこのエラーメッセージのコンテンツを使用するために、C#からAjaxにエラーメッセージを送信するにはどうすればよいですか?

  11. 11

    Git:マージされたコミットを履歴メッセージから削除するにはどうすればよいですか?

  12. 12

    特定のコミットの間にコミットメッセージを一覧表示するにはどうすればよいですか?

  13. 13

    コミットしたときにgitcommitメッセージを取得するにはどうすればよいですか?

  14. 14

    ボットが送信した埋め込みメッセージのIDを取得するにはどうすればよいですか?

  15. 15

    Jenkinsビルドをトリガーした「変更」(コミットメッセージ)を取得するにはどうすればよいですか?

  16. 16

    Twythonでダイレクトメッセージを送信するにはどうすればよいですか?

  17. 17

    「このマージが必要な理由を説明するためにコミットメッセージを入力してください」というプロンプトでgitmergeを中止するにはどうすればよいですか。

  18. 18

    メッセージを入力した後、Git Bashでコミットを完了するにはどうすればよいですか?

  19. 19

    マージされたコミットをBitbucketから完全に削除するにはどうすればよいですか?

  20. 20

    コミットメッセージに特定の単語が含まれている最新のgitcommitを参照するにはどうすればよいですか?

  21. 21

    コミットメッセージをチェックするgitpre-commitフックを作成するにはどうすればよいですか?

  22. 22

    Mercurialで誤ったコミットメッセージを編集するにはどうすればよいですか?

  23. 23

    TortoiseGitで間違ったコミットメッセージを編集するにはどうすればよいですか?

  24. 24

    Youtrack Time Trackingのコミットメッセージで費やした時間を設定するにはどうすればよいですか?

  25. 25

    Dockerで子イメージにコミットした後に親イメージを削除するにはどうすればよいですか?

  26. 26

    WebViewからReactNativeにメッセージを送信するにはどうすればよいですか?

  27. 27

    PythonでのDiscordボットのプログラミング-メッセージを自動的に送信させるにはどうすればよいですか?

  28. 28

    ターミナルにエラーメッセージを送信しているプロセスを特定するにはどうすればよいですか?

  29. 29

    NSArrayControllerがオブジェクトを自動的に再配置した後にメッセージを送信するにはどうすればよいですか?

ホットタグ

アーカイブ