Servletと外部プロセスとの通信

このQ&Aのポイント
  • Servletと外部プロセスの通信方法を探す
  • Servletを使って外部プロセスを制御する方法を検討している
  • Servletから予約リストを更新し、Xプロセスと通信する方法を考える
回答を見る
  • ベストアンサー

Servletと外部プロセスとの通信

Servletを使って、出先からローカルポートを制御するモノを書いています。 (ユーザはServletに対して制御命令を与えると動作をします) で、たとえば「19時になったらシリアルポートからコレを出力してね」という感じで イベントを付加したいと思っています。Servletからアクセスすると、予約画面が 出て更新でき、時間になったら自動で動作するといった感じですね。 このServletは単発動作なので、常に時間をチェックして、予約リストを読みつつ、条件を満たしたら Servletに制御指令を与えるプロセスXが走っている必要があると思います。 ということは、Servlet経由で予約リストを更新したいときは、Servlet→Xの通信を、イベントが発動するときはX→Servletの通信を行わなければなりません。 この二つを連結する上手い方法はないものでしょうか。 今のところ、Xのpidを記録しておいて、Servlet→Xはプロセス通信で、X→Servletはローカルに対してHTTPリクエストを発行してしまおうかといった考えなのですが・・・。

  • Java
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • chi-kon
  • ベストアンサー率43% (58/132)
回答No.2

むむむ、むずかしい話ですね。 ユーザはservletを通してあるコマンドを実行するということではないのですか? >常に動いている動いているプロセスXが時間になったら >Servletに対してリクエストを発行しないといけないな~ サーブレットに対してリクエストをおくるプロセスXというのはブラウザのような動きをするということですか?

pythian
質問者

補足

そうですね、元々ブラウザからのgetで動くように作ってしまっているので・・・。(汗 (ServletはWebからのアクセス専門として、制御のコア部分はひとつのJavaモジュールに分離してしまうのも手かもしれません・・・)

その他の回答 (1)

  • chi-kon
  • ベストアンサー率43% (58/132)
回答No.1

レスがついていないので、コメントいれておこうとおもいまして。。。 レスがつかないというのは質問の意味が伝わってないからじゃないでしょうか? 自分はX→Servletの通信というところの意味がわかりませんです。 「19時になったらシリアルポートからコレを出力してね」 こんなんだったらTimerを使えばできそうなもんですがどうなのでしょう?

pythian
質問者

補足

すみません。ちょっと説明足らずだったかもしれません。現在のシステムでは、制御自体はServletにGetを送ることで行います。 ("ControlServlet?Device=Video&Function=Rec"みたいな感じです) なので、時間で起動させるためには、常に動いているプロセスXが時間になったらServletに対してリクエストを発行しないといけないな~、という意味です(_ _;

関連するQ&A

  • Javaプログラム同士のプロセス間通信について

    Java初心者です。 デーモン化したJavaプログラムとJavaサーブレット間のプロセス間通信を 行いたいと思っていますがどのようにしたものか悩み中です。 ○デーモン化したJavaプログラムは、 1、あるポートからSocket通信でデータを受信し、受信したデータをDBに格納する 2、クライアントからの要求で1で保存したデータを加工して送信 ○サーブレットプログラムでは、 上記のデーモン化プログラムの設定等をブラウザ上から変更できるようにしたいと考えています。 設定とは、例えば受信したデータを全てDBに保存せずに ブラウザから条件を設定できてフィルターするような動作に変更できたり、 また、デーモン化プログラムの動作をブラウザ上から停止、開始できるようにしたいのです。 上記の様な構成の場合にプロセス間通信をする必要があると思いますが、 どの様なプロセス間通信を使えばいいのか悩んでいます。 ほんとうは上記の様な2つのプログラムを1つのプログラムで出来ればいいなぁ~と考えているのですが、、 実現方法が判りません。。 なにか名案はございませんでしょうか? わかりづらい説明でもうしわけございません。 参考になるかわかりませんが、イメージ図を、 <イメージ図> デ  data   開  data    ク ー --------> 発 -------->  ラ タ        中         イ 鯖        鯖         アント          ↑          |          |設定変更          |       管          └--------- 理                   者 よろしくおねがいします。

    • ベストアンサー
    • Java
  • PICを用いてシリアル通信

    PIC制御でシリアル通信を行いたいです。 以下の条件にマッチする製品が分かれば教えてくれませんか? ・シリアル通信は通信ポートが2つで両者の通信が行える ・半田付けなどは行わずにモジュールを組み合わせて動作するボード 以上、宜しくお願いします。

  • エラーを起こしたソフトのエラーログをイベントビューアで特定したい。

    今朝、Windows XPマシンで動作させているサーバソフトでエラーが発生したようで、このサーバソフトで使っている COMポート拡張PCIボードのRSA-PCI2/P4ボードのCOMポートからの通信が全くできない状態に陥ってしまったようです。 http://www.iodata.jp/product/mobile/serial/rsa-pci2p4/ 以前からこの問題は1か月に1回起こるような状態だったのですが、原因が特定できていないので、今回は原因を調べてみたいと思っているのですが、 たとえば、イベントビューアでこのサーバソフトに関連するエラー履歴を特定するにはどのようにしたらよいのでしょうか。 このサーバソフトのPID(プロセスID)でイベントビューアのログを見つけることなどはできるのでしょうか?

  • netstatコマンドの見方

    通信のためにポートを開ける必要があります。しかし何番のポートを開ければいいのかわかりません。netstatコマンドの結果の見方について教えて下さい。 1)ローカルアドレスというのは自分のPC(netstatコマンドを実行したノード)のローカルアドレスでよいのでしょうか? 2)外部アドレスというのは通信相手のノードのグローバルアドレスという事でよいのでしょうか? 3)通信の際のポートの番号ですが、自分のローカルアドレスとポート番号が”192.168.x.x:10000”の場合、グローバルアドレス変換するとポート番号10000というのは変わるのでしょうか? 4)自分のPCのポートを開放するというのは3)でいうところのローカルアドレスの末尾のポート番号を開放すればよろしいのでしょうか。

  • FelicaのカードIDを読み取れるシリアル通信キット

    Felica規格に対応したRFIDリーダーキットを探しています。 単体動作させたいので、データ通信がシリアルポートで、マイコンからも制御できそうな物を探しています。 Felica規格のカードのIDが読み取れれば(カードの識別だけできれば)構いません。 個人向けでそのようなキットを販売している所を教えてください。

  • RS232C通信(PC⇔PLC)

    PCとPLCでシリアル通信を行っています。PLCからPCへステータス受信要求し、PCから正常アンサーがあればPLCからPCへ処理開始指令コマンドが出力されるというプロトコルです。実際には、PC側ステータス正常の場合、PLCへの正常アンサーを出力するところまでは行くのですが、その直後にPLCから送信されているはずの処理開始指令コマンドを受信することができません。一連のコマンド送信・受信の間隔が狭すぎるのかと思い、PLC側で処理開始指令コマンド送信前に10msecのウェイトを設けるとPC側で受信することができました。(PLC側の送信が悪いのか、PC側の受信に問題があるのか不明ですが、、、) シリアル通信では、上記のような問題が発生しないように送受信の間隔等なんらかの規約が定められているのでしょうか??ウェイトを設けることなく通信を行いたいのですが、考えられる対処法を教えていただけませんでしょうか。よろしくお願い致します。 なお、通信機器の仕様は以下の通りです。 PLC:三菱シリアルコミニケーションユニット QJ71C24N-R2 PC:WinXpSP2、COMポート、VisualBASIC6.0のCommイベントによりデータ受信(10msecウェイトなしでは、処理開始指令コマンド送信時にCommイベントが発生しませんでした。) ※アスキー文字、PLC・PCともに送信終了コード(CR+LF)でバッファデータ読込み

  • マカフィープロセス暴走について

    会社でマカフィーを使用しています。 ここ2ヶ月くらいで端末が急激にもっさりするようになり、タスクマネージャーを確認すると「mcshield.exe」がCPU使用率50%以上占有するようになりました。普段通りに使用しているだけなのに、なぜかこのプロセスががんばっています。 また社内の人に聞いてみると、スペックや型番に関係なく50%占有現象は相当数あり、私だけの問題ではないようでした。 またインターネットで特定のページを参照すると、「mcshield.exe」のCPU使用率が100%近くまで上昇し、ページが表示できなくなりました。 いずれの現象もプロセスを終了させると正常に動作したり、表示されるようになりました。・・・ただ数秒待つとプロセスが再起動し再び50%占有を始めます。 マカフィーのバージョン security center 5.2.3 ウィルスおよび、スパイウェア対策 6618.0000 スキャンエンジン 5400.1158 バッファーバーフロー検出バージョン 588 ブラウザ保護サービスエンジンバージョン 3.0.0.638 常に最新のバージョンへの更新・適用をしています。 ・聞きたいこと ・このプロセス暴走について同現象になっている方で、どのような対策を実施したか。 ・プロセス制御ソフトを使用して、20%程度に強制的におさえたいが、有効なソフト・方法はあるか。(バトルエンコーダーシラセというソフトを使用しましたが、制御付加でした) ・特定のサイトだけ挙動がおかしくなる現象について、どのような対策を実施したか。(マカフィーの機能で閲覧先をチェックする機能のうち、そのサイトだけチェック対象外にするよう設定しましたが、設定が有効な端末と、まったく効果の無い端末と分かれてしまいました) 現状マカフィーから乗り換える予定は無いとのことです。 まとまりのない文章で申し訳ありませんが、知恵をお貸しください。 よろしくお願いいたします。

  • システム開発で困っています。

    システム開発で困っています。 Linux,Xウィンドウ環境で作成している画面プロセス(動作中)に対し、 他プロセスからマウスイベントを発行したいのですが・・・。 解決のヒントでも頂けたら助かります。

  • 起動時エラー

    RedHat9にPosgreSQL 7.3をインストールしたんですが、DB起動時にエラーが出てます。 DB起動コマンドは、 pg_ctl start -D /usr/local/pgsql/data -l /home/postgres/logfile postmaster successfully started DB停止コマンドは、 pg_ctl stop -D /usr/local/pgsql/data メッセージは、 pg_ctl: cannotfind /usr/local/pgsql/data/postmaster.pid Is postmaster running? postmastar.pidファイルを探しましたが、確かにありません。 そして、logfileは以下です。 LOG: startup process (pid 14202) was terminated by signal 6 LOG: aborting startup due to startup process failure 一度は起動停止確認は出来たのですか、2回目からできなくなってしまい、大変困っています。 ポート番号はデフォルトの5432のままです。 どうしたらいいのかわかりません。 よろしくお願いいたします。

  • teratermではシリアル通信出来るのですが・・

    現在アームロボットをPCからシリアルで送って制御するプログラムを作りたいと思っております。 現在Teratermからコマンドを送ってアームロボットが動く事は確認出来ております。 ただ、そこからC#にてプログラムを作成して動かそうとするとどうしてもコマンドを受け付けてくれません。 Teratermの設定は  ボーレート9600bps  データ長8bit  パリティnone  ストップビット 1bit  フロー制御 non です。 これで接続して「NT」と打ってリターンを押すと ロボットが原点復帰動作をします。 一方C#では  SerialPort port = new System.IO.Ports.SerialPort("COM2",9600,Parity.None,8,StopBits.One);  port.Open();  port.Write("NT");  port.Close();  port.Dispose(); と記述して実行しますが動きません。 改行コードが怪しいと思い、teratermで改行コードを CRからCR+LFに変更してみましたが問題なく動きます。 teraterm以外にもシリアル通信チェッカーv4.1.0 を試しましたが動きませんでした。 teratermは何か特別な仕様なのでしょうか? 何か見落としている設定項目ありますでしょうか? どうぞアドバイスよろしくお願い致します。