現在進行形でやっている仕事で、ハンディターミナルを使ったシステムがあります。
ハンディ側のスクリプトでHTTP実装はなかったのですが、Socketが使えたので単純なHTTPクライアントを実装し、サーバーサイドはJava Servlet、コンテナにはTomcat7を使うことにしてあらかた実装も終えていました。ところが、
これまでペンディング状態だった機能の内、ハンディからある業務機能を実行すると、ラベルを出力するというのがあり、これがちょっと問題でした。
このラベルプリンタへの出力は、指示ファイルを出力すると、専用のソフトウェアがこれを読み取り印刷実行するというものです。これが1指示ファイルずつ処理、それも1指示ファイルパス名しか指定できないというもの。ハンディは複数台使われ、次々とラベル出力が要求される状況も当然考えられます。ラベルプリンタのベンダさん曰く「アプリで出力が終えるのを待ってください」とのことでした。要するに、スプールはアプリ側で行えということです。というわけで、Servletから非同期でラベル出力をする必要が出てきました。
これまで、システム間連携の為に専用の常駐サーバをフルスクラッチ開発したこともあります。そのような感じでスプーラを実装することも考えられましたが、さすがに納期も近いのでやりたくありませんでした。なんとか簡単にやれないものかと思い、MDB(Message Driven Bean)でやってしまえばいいのではないかと考えました。
ざっと調べたところ、GlassFishを使えば簡単にやれそうだと感じたので、翌日早速GlassFish v3.1.2.2をインストールしました。JDBCの設定をし、これまでTomcat7に配備していたものをそのままGlassFishに配備しただけで動作することが確認できました。
後は、JMSの設定、ラベル出力の指示ファイル出力部分をMDBで実装、ServletからMDBへ出力要求。ここまで、午前中だけで終えることができました。
細部について何も示しておりませんが、今回の一件で、タイトル通り「JavaEE6、GlassFishって便利」という感想です。もうJavaEE7の導入期みたいですが、とりあえずJavaEE6からしっかり勉強する価値大いに有りと思いました。