これまでの軌跡

  1. トップページ
  2.  >
  3. これまでの軌跡 一覧
  4.  >
  5. これまでの軌跡

ソケット通信による独自プロトコル処理

今回取り上げるのは、IBM i (AS/400) で稼働する Java を使用した Socket通信プログラムです。IBM i (AS/400) の用途としては業務系の基幹アプリケーションがメインですが、安定稼働を約束する IBM i (AS/400) の信頼性がこの様なかたちでも役立つ事を紹介します。


背景

ご紹介するソリューションは、とあるシステムの一部として実装したものです。このシステムの概要は以下となります。

  • 様々な建物に設置されている通報機から連絡(情報)が来る
  • 連絡(情報)を IBM i (AS/400) がキャッチする
  • IBM i (AS/400) は情報を保管すると共に担当者へお知らせする
  • 知らせを受けた担当者が対応をする

ソケット通信による独自プロトコル処理1

今回のお客様の業務の形態では、24時間365日少しの停止も許されません。そのため、このシステムを稼働させるプラットフォームに求められたのは絶対的な信頼性であり、これを実現するものとして最適なのは IBM i (AS/400) 以外ありませんでした。

今回使用する通報機と IBM i (AS/400) は TCP/IP で通信します。もちろん IBM i (AS/400) 側のデータ受信プログラムは存在しませんので、このサーバー側プログラムが今回の開発部分です。プログラムの機能概要は以下の通りです。

  • TCP/IP の ソケットを常時監視
  • 通報機との通信は独自仕様のプロトコル
  • 1秒間に4トランザクションを処理


言語の選定

IBM i (AS/400)はソケット通信を行うための C API を持っていますので、ILE RPGにてソケット通信プログラムを記述する事は可能です。しかし、今回用いる通報機との通信プロトコルは独自仕様であり、また非常に複雑な処理も要求されました。こうした様々な要因を考慮すると、RPG では対応できないケースも想定されたのです。そこで、RPG以外の言語を検討することになりました。IBM i (AS/400) で開発できる言語で、かつソケット通信という条件を考えると、選択肢としては C または Java があります。当社は、 Java についてはソケット通信の実績こそなかったものの、研修の講師を担当した実績もあり、アプリケーションの開発実績もあったので、Java を使用して開発することにしました。


アーキテクチャの決定

もちろん今回の要求仕様が Java で実現可能かどうかは調査しなければなりません。その中でも最も重要視されたのはパフォーマンスです。1秒間に4トランザクション、つまり1秒間に通報機から来る情報を4回処理可能かという点です。最初はポーリングによる処理を検討しましたが、テストプログラムによるパフォーマンス検証を行ったところ不安が残る結果となってしまいました。

更なる速度向上には、ポーリングの様な直列処理では限界があるため並列処理を検討しました。通報機メーカーの方も交えてミーティングを重ねた結果、通報機とのデータのやり取りは基本的には直列性がなく並列化が可能である事が判明しました。もちろん Java にはスレッドの概念があり、並列処理の機能を実装することは可能です。早速テストプログラムを作成し確認したところ、ポーリングによる直列処理より1秒間に受信できる量を増やす事ができました。このテストにより1秒間に4トランザクションを実現できる事が確認できたのです。

ソケット通信による独自プロトコル処理2
設計と実装

アーキテクチャが決定したので、次は通報機との通信を行うための設計と実装に入ります。オブジェクト指向やデザインパターンを検討および採用し、設計と実装を行いました。プロトコル自体は通報機側で仕様が決められていたため、すぐにアプリケーションの設計に入る事ができました。今まで用いる事がなかった、バイト配列による処理が必須であったり、過去に手掛けた基幹系の業務アプリケーションでは行わない処理に新鮮さを感じながらの実装作業でした。


納品

テストは通報機メーカーの担当者と行いました。お客様へ搬入する前の IBM i (AS/400) を使用し、通報機との疑似環境を構築した上でのテストです。この時点で発覚した問題も幾つかありましたが、それら全てを解決し期日までにテストを完了することができました。この記事を書きながら、通報機メーカーの担当者の方と走って終電に向かい、帰りの電車の中で議論をした日々が懐かしく思い出されます。

テストに時間を費やせたこともありサービスインも無事に行われ、稼働後10年近く経ちますが現在まで一度もトラブルにより停止をする事なく安定した稼働を続けております。


お客様からの要望を実現するため我々は様々な角度からソリューションをご提案させていただきます。
お一人で悩まずに我々に是非ご相談ください。