CでJavaのプロセスを制御



 …正確にはWindowsのネイティブのサービスでJavaのプロセスを制御するという話が来て2日でコーディング・計4日まででテスト完という無茶なスケジュールで、仕様も不明ということで出来そうになかったのでアドバイスだけして辞退。で、最近はテスターばかりという。ほぼ定時で帰れて楽なんだけど考えるところがあまりなくてひじょーにつまらん。そろそろ転職すべきかのう?

 んで、時間が余ったので実際にJavaのプロセスをC&WindowsAPIで制御というのを検証してみたのだが、

・起動はCreateProcessでも良いが終了するいい方法がない
 TerminateProcessだとブチッとプロセスを止めちゃうのでデータが壊れる可能性大。プロセスIDからウィンドウを探してWM_CLOSEを投げる手法はそれで終了してくれる保証がないしJavaの仕様で公開されていないため信用できない。

つーことで最初これをアドバイスしたんだが、検証してみたらNGって感じで。んでJavaのプロセス制御のできる公開されたAPIがないかなーと思ったら素直にJNIを使えばいいじゃんと思い当たる。都合よくVMの起動/終了のAPIもちゃんと公開されている。めでたしめでたし^^。ただし

・Process#addShutdownHookでシグナルでプロセス終了が来た時にきちんと終了処理が実装されていること(マルチスレッドで)

というところに気を付ける必要があります。外からもらったライブラリだそうで、その辺ちゃんと実装されてるかすら謎だったのだが。実装されてなかったらどっちの手法でもデータが壊れるのは同じかあ、ではある。南無

 しかし、こういうごく簡単なプログラムでもちゃんと調査して検証しないと意外な落とし穴があるもので、知らないとあとでメンテの大変な間抜けなプログラムを作っちゃったりするんだよなあとしみじみ思った。きちんと見積もるなら、調査に2日・コーディング1.5日、検証2日で1週間+αくらいかかるかなあと。慣れてない人だとリスクも考えて多めに見て2週間。そんなに費やせないので実際は1週間半でやれっつー感じですか。なれた人なら残業こみで丸々1週間か。

 んーで、実際はあれから2週間近く経ってるがまだやってる模様。引き受けなくて良かったなあとしみじみ(^^;。いや、時間をきちんと確保してくれればきちんと作るんですけどね~。上のSEの人が交渉上手ならその辺調整してくれるのですが…まあ、うちの仕事も当時忙しかったしのう。テスターは眠くてしょうがないので開発やりたいんだけど、あんまり無茶なのだとろくでもないのを作って後のメンテが大変になるしなあ(結局当初の構想の何倍も工数がかかっちゃったりする)。

 うーむ。
 最近はむしろ予算も何も出てないただ働きの方がよっぽど高度な処理を考えたりしてる気がするのだが。このまましばらく飼い殺されるんかのう。やれやれ。

 っつー感じです。やれやれ(^^;
[PR]
by namizusi | 2005-02-28 23:50 | プログラム


<< ラ・マンチャの男 黒グラ討伐 >>