はじめに
タスクの1つとして、外部システムと統合する必要がありました。 IBM WebSphereは、すべての開発者にとって重要な役割を果たしているため、IBM WebSphereとすぐに統合できることも考慮して、WebSphere MQは完全に適合しています。 まず、キューからデータを送受信する簡単なアプリケーションを作成し、HermesJMSのインストールと構成を完了し、そこからメッセージを送受信する方法を確認した後、WebSphereとWebSphere MQをインストールして構成します。 すべてがWindows 7で行われます。続行する前に、上記のプログラムをダウンロードします。
注意トラフィック!
WebSphereおよびWebSphere MQのインストールと構成
必要なプログラムをすべてダウンロードし、インストールを続行する準備ができていることを願っています。 最初に、IBM Installation Managerインストーラーを実行します。 特別なセマンティックロードを持たないスクリーンショットの記事のサイズを大きくしないために、ネタバレを削除します。 完全に削除するのは間違っていると思う 彼らはあなたがすべてを正しくしていることを明確にします。
スクリーンショット
Instalation Managerを再起動し、[ファイル]-> [オプション]に移動します。 最初のディスクからストレージを追加します。
[OK]をクリックしてインストールを開始します。
説明付きのスクリーンショット
ロシア語の翻訳からフラグを削除します。
次に、インストーラーはディスク2と3を挿入するように求めます。それらを挿入します。
ロシア語の翻訳からフラグを削除します。
次に、インストーラーはディスク2と3を挿入するように求めます。それらを挿入します。
インストール後、プロファイルマネージャーが自動的に起動します。
「作成...」ボタンをクリックして、下のスクリーンショットのように実行します。
スクリーンショット
次に、WebSphere MQをインストールします。
スクリーンショット
インストールが完了したら、WebSphere MQとWebSphereを構成しましょう。 WebSphereのセットアップ時にキュー名とキューマネージャーが必要なため、WebSphere MQから始めましょう。 すべてのコマンドは、WebSphere MQディレクトリーのbinディレクトリーから実行されます。 まず、キューマネージャーを作成し、 crtmqm.exe HABR_QUEUE_MANAGERコマンドを使用してHABR_QUEUE_MANAGERを呼び出します。
strmqm.exe HABR_QUEUE_MANAGERコマンドを使用して、新しく作成したキューマネージャーを起動します。
着信および発信キューを作成するには、 runmqsc.exe HABR_QUEUE_MANAGERを呼び出してMQコマンドラインを実行し、2つのコマンドを連続して実行します。
- DEFINE QLOCAL(HOME.TO.ES)-アプリケーションから外部システムにメッセージを送信するためのキュー
- DEFINE QLOCAL(ES.TO.HOME)-外部システムからメッセージを受信するためのキュー
リスナーとチャネルを作成して実行し、WebSphere MQは構成済みと見なすことができます。 これを行うには、次のコマンドを実行します。
- DEFINE LISTENER(HABR_QUEUE_MANAGER.LISTENER)TRPTYPE(TCP)ポート(1414)
- START LISTENER(HABR_QUEUE_MANAGER.LISTENER)
- DEFINE CHANNEL(SYSTEM.ADMIN.SVRCONN)CHLTYPE(SVRCONN)
ポート1414を覚えておいてください。 WebSphere Application Serverの構成に役立ちます。
WebSphere Application Serverをセットアップしましょう。
接続ファクトリーを作成します。 これを行うには、管理者コンソールを実行し、[リソース]-> [JMSプロバイダー]-> [WebSphere MQメッセージングプロバイダー]-> [キュー接続ファクトリー]-> [新規]を選択します(下のスクリーンショットを参照)。
次に、名前とjndi名を入力します。
キューマネージャの名前を入力します。
接続検証中にメッセージが表示された場合(下のスクリーンショットに表示されます)、次の手順を実行します。
- MQコマンドプロンプトを再度実行し、runmqsc.exe HABR_QUEUE_MANAGERを実行します
- ALTER QMGR CHLAUTH(無効)をダイヤルします
- [Windowsサービス]セクションに移動し、[ログオン]セクションのIBM MQSeriesサービスをアカウントに置き換えます。 WebSphere Application Server 8.5についても同じことを行います
- システムを再起動してHABR_QUEUE_MANAGERを実行し、LISTENERを開始します(HABR_QUEUE_MANAGER.LISTENER)
- 今、すべてが動作するはずです
次に、キューを作成します。 2つのキューを作成する必要があります。 それらは、WebSphere MQで作成されたキューのような名前になります。 誰もが忘れた場合、それらはES.TO.HOMEおよびHOME.TO.ESと呼ばれます。 [リソース]-> [JMS]-> [キュー]-> [新規]に移動します
類推によって2つ目を作成します。
リスナーポートの構成は残ります。 アプリケーションサーバー-> server1->メッセージリスナーサービス->リスナーポートに移動し、新しいポートを追加します。
設定を保存します。 jndiにはキュー接続マネージャーの名前を指定し、jndiには外部システムからのメッセージが送信されるキューの名前を指定しました。 ポートを起動します。
WebSphere Application ServerとWebSphere MQをカスタマイズしました。 簡単なテストアプリケーションの作成を開始できます。
キューからメッセージを送受信する簡単なアプリケーションを作成する
アプリケーションを開発するときに、Maven、Gradle、またはantなどのプロジェクトを作成するためにさまざまなツールを意図的に使用しないため、舞台裏で何が起こっているかを理解できます。 それでも、便宜上、プロジェクトを耳で構築するのに役立つスクリプトをいくつか作成します。 プロジェクト全体をgithubに投稿しました。 以下では、主なポイントのみを説明します。
キューへのメッセージの送信
メッセージを送信するために、サーブレット、ビン、およびメッセージを入力するためのフォームを作成します。
ejb-coreモジュールのJMSMessageBeanクラスから始めましょう。 ejbCreateメソッドでは、メッセージを送信する接続ファクトリーとキューへのリンクを取得します。 processMessageメソッドは、テキストメッセージを作成してキューに送信するように設計されています。
public class JMSMessageBean implements SessionBean { private SessionContext sessionContext; private QueueConnectionFactory connectionFactory; private Queue destination; public boolean processMessage(String message) { QueueConnection jmsConnection = null; QueueSession jmsSession = null; try { jmsConnection = connectionFactory.createQueueConnection(); jmsSession = jmsConnection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE); TextMessage jmsMessage = jmsSession.createTextMessage(); jmsMessage.setText(message); jmsSession.createSender(destination).send(jmsMessage); } catch (JMSException e) { return false; } finally { try { if (jmsSession != null) { jmsSession.close(); } if (jmsConnection != null) { jmsConnection.close(); } } catch (JMSException e) { e.printStackTrace(); } } return true; } public void ejbCreate() throws EJBException { try { Context ctx = new InitialContext(); connectionFactory = (QueueConnectionFactory) ctx.lookup("java:comp/env/QMHabr"); destination = (Queue) ctx.lookup("java:comp/env/jms/HOME.TO.ES"); } catch (NamingException e) { throw new EJBException(e); } } @Override public void ejbActivate() throws EJBException { } @Override public void ejbPassivate() throws EJBException { } @Override public void ejbRemove() throws EJBException { } @Override public void setSessionContext(SessionContext sessionContext) throws EJBException { this.sessionContext = sessionContext; } }
以下は、SendJMSMessageServletサーブレットです。 initメソッドでは、上記のBeanへの参照を取得します。 さらに、doPostメソッドでは、フォームからメッセージを受信し、beanをprocessMessageメソッドに送信します。 残りの作業はビンによって行われます。
public class SendJMSMessageServlet extends HttpServlet { private static final String MESSAGE_PARAMETER_NAME = "message"; private static final String MESSAGE_SENDING_SUCCESS = " "; private static final String MESSAGE_SENDING_ERROR = " "; private JMSMessage jmsMessage = null; @Override public void init() throws ServletException { super.init(); try { Context ctx = new InitialContext(); Object objHome = ctx.lookup("java:comp/env/ejb/JMSMessageLocal"); JMSMessageHome jmsMessageHome = (JMSMessageHome) PortableRemoteObject.narrow(objHome, JMSMessageHome.class); jmsMessage = jmsMessageHome.create(); } catch (Exception e) { throw new ServletException(e); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/sendMessage.jsp").forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String message = request.getParameter(MESSAGE_PARAMETER_NAME); request.setAttribute(MESSAGE_PARAMETER_NAME, (jmsMessage.processMessage(message)) ? MESSAGE_SENDING_SUCCESS : MESSAGE_SENDING_ERROR); request.getRequestDispatcher("/viewMessage.jsp").forward(request, response); } }
html提出フォームは最も基本的なものです。 これは最も重要な部分ではありません。 メッセージはハードコードされているか、プロパティファイルから受信されます。 しかし、とにかくコードを提供します。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <html> <head> <meta http-equip="Content-Type" content="text/html; charset=UTF-8"/> <title> </title> </head> <body> <form action="sendMessage" method="POST"> <table> <tr> <td> :</td> <td><input type="text" name="message" size="70"/></td> </tr> <tr> <td colspan="2"><input type="submit" name="submitMessage" value=""/></td> </tr> </table> </form> </body> </html>
HermesJMSのインストールと構成
WebSphere MQが別のマシンにインストールされており、キュー内のメッセージをチェックするのに疲れている場合、またはテストメッセージをキューに送信するための便利なツールが必要な場合は、HermesJMSを使用できます。 おそらくアナログがありますが、私が見つけたものは支払われました。 知っているなら、良い無料の類似物をコメントでアドバイスしてください。 他の同様のシステムを喜んで検討します。 具体的には、HermesJMSでは、ファイルからメッセージを送信する(しっかりロックする)場合、UIのバグの一部は完全に満たされておらず、リソースは解放されませんが、それらに耐えることができます。
それで、インストールと設定を進めましょう。
スクリーンショット
HermesJMSを起動して、新しいセッションを追加します。 開始するには、[プロバイダー]タブに移動し、新しいグループを追加します。 スクリーンショットのように名前を付け(重要ではありませんが)、以下にリストされているすべてのjarファイルを追加します。
Sessionアイテムにプロバイダーを追加したら、ドロップダウンリストからプロバイダーを選択します。 他のフィールドの設定例は、以下のスクリーンショットに示されています。
次に、私たちの番にメッセージを送ってください。 これを行うには、アドレスhttp:// localhost:9080 / habr / sendMessageに移動し、入力フィールドにメッセージを入力して、「送信」ボタンをクリックします。
ここでHermesJMSを開き、HOME.TO.ESキューを開いて表示します。 下のスクリーンショットに示すようなメッセージが表示された場合は、上記のすべての手順を正しく実行しています。
これで私は記事を完了します。 ご清聴ありがとうございました! 彼女が誰かに役立つことを願っています。