3/31(Wed)
/** Web障害管理システム */ 着々とリメイクが進行中。 一覧表示画面とか、登録/更新兼用画面とか、 基本的な要素は押さえたので、Strutsで悩むことはしばらくないかも。 JSPは、スクリプトレットを大量に使っていたのに対し、 今回はTaglibs(JSTL & Struts Taglib)を大量に使っているせいか、 特にループ処理の辺りで見通しが良くなったような気がします。 データベース周りは、Jakarta Commons DbUtilsを導入したのですが、 コンテナ依存・データベース依存を引き起こしそうなDataSourceは使えないため、 (よく調査すれば使えそうな気もするけど。) Connectionを第一引数に渡すバージョンを駆使しているのですが、 try〜catch(SQLException)〜finally(con.close()) のパターンをあちこちにばらまくはめになるため、あまり思わしくないです。 再考の余地ありかも。 コントローラはStrutsを導入したので、 struts-config.xmlに集約されたのが嬉しいのですが、 そのうち分割することになるかも。 ココに載ってるのは知ってるんですが、読むのがめんどうだ。。。 /** ブログ */ 流行に流されて〜♪ 始めてみました〜♪ というわけで、どっかにあります。探さないようにしましょう(^^; (ブログ/blogについては、ココからたどるのがいいかもです。) 明日からインターネットの使えない現場なので、 あんまり面倒は見られないのですが。 ちなみに、僕が使ってるブログのWikiのシンタックスは、 前使ってたYukiWikiに比べるとはるかに貧弱です。 まあ、あんまり難しすぎてもダメなんでしょうけど、 もう少しなんとかならないですかねぇ。3/30(Tue)
/** ようやく */ 鶴見区民改め磯子区民となりました。 まあ、横浜市民ってのは変わらんのですが。 そういえば、住民税も変わらないでしょうねぇ。 毎月7,000ってのはボリすぎではないでしょうか。。。 なんか鶴見の時とちがって、 「磯子で生き抜くためのサバイバルガイド」じゃなくて、 「ようこそ磯子区へ」とかいうパンフレットもらいました。 大変重くて迷惑千万です(T_T) まあ中身を見てみると、医療機関マップとか、 困ったときに区ではこういうことができますよとか、 色々と役立ちそうな予感。 まあ、我が家の有事の場合のみ活用されて、 普段はほこり被ってそうな勢いですが。 で、ついでに思い出したのが免許。 まあ、普段車乗ることもないのでかまわないのですが、 証明書代わりに使うことも多いので、 ヒマなときに行こうと思います。 (いや、4月からはめちゃくちゃ忙しいとかいうウワサもあるけど。。。) /** Strutsでハマる。。。 */ 相変わらずなんとかしのいでます(^^; でも、Struts1.1のValidatorの辺りとか全然使ってないので、 そういうの使おうと思ったら、やっぱり本買った方がいいかも。 でも、来月も、ケーブルテレビ解約代金なる負債が原因となって、 予算委員会の承認が降りないかも。3/27(Sat)
/** Strutsでハマる。。。 */ まあ、予想通りなんですが。。。 Webの情報をアテにして、まだ書籍は購入していないんですが、 Ja-Jakartaプロジェクトの翻訳以外、あんまりまとまった情報が無いらしく、 知りたいことがなかなか検索できないもどかしさを感じています。 例えば、あるアクションから別のアクションを呼ぶ場合とか、 selectタグのデフォルト値をセットしておく(SELECTEDを付ける)方法とか、 文章では載ってるんですが、サンプルが無いため、 想像でやってみても動かないということが多々ありました。 ちなみに、前者はここ、後者はここを見て解決しました。 Struts in Actionの購入も検討しましたが、 高いのとイマイチとのウワサもあるため、 まだとりあえずWebでがんばってみようかと、 ケチ根性が働いているところです。 どこまでいけるのやら。3/25(Thu)
/** GPSってばスゴイね。 */ 逆探知でこんなの発見しました。 ホームページの感じからすると、子供が行方不明にならないように、 監視するシステムのようなんですが、 一歩間違えば、探偵とかが使う追跡ツールみたいになっちゃいますね。 なんだか、物騒な世の中を反映したようで、いいんだか悪いんだか微妙な気がします。 ただ、このシステム自体は、携帯電話にアタッチメントみたいのをくっつけて、 Windowsにソフトを入れるだけみたいなので、 お手軽でよくできていると思いますが。 /** ヤマハのオンラインレッスン */ こんな記事発見しました。 なんでも、わざわざ先生のところまで行かなくても、 オンラインでレッスンを受けられるんだそうな。 なんか、ヒマの無い社会人受けしそうな予感。 というか、「大人のためのピアノ基本講座」しかないらしい。今のところ。 ただ、 > ただし、講師側から受講者の演奏を聞くことはできない。 ってのが微妙じゃないですか? リアルレッスンしてもらってる時には、 演奏している指の動きとかもそうですが、やっぱり音も聞いてもらわないと、 先生分からないような気がするんですが、どうなんでしょう。 グループレッスンみたいなので、 受講生みんなの音が混ざると大変ってのもあるんでしょうけど、 個人レッスンに応用されれば、これまたイケてるシステムになるでしょう。 まあ、時間さえあれば、リアルレッスンの方が良いに決まってますが。 /** Web障害管理システム */ 昨日辺りから、Struts1.1(Controller) + JSTL(View) + Commons DBUtils(Model?) + その他もろもろ で再構築&機能追加始めました。 目的は、自分のStruts + Eclipseの勉強と、現場で運用した結果のフィードバックなんですが、 特に期限があるわけでもないので、ちまちまやってく予定です。 → とか言ってると完成しないワナ(^^; ちなみに、Scarabってのが最近よさげなようです。 日本語の解説ページもあるので、興味のある方はどうぞ。 MySQLがいるみたいです。3/23(Tue)
/** 障害管理システム・バグ管理システム・Bug Tracking System */ 最近、Web障害管理システムを更新しようか、新しく作り直そうか、 微妙に悩んでいたところなのですが、 自分で作る前に、使えそうなものがないか探すのが先ということで、 現状使えそうな障害管理システムがないか探してみました。 ■影舞 URL: http://www.daifukuya.com/kagemai/ 日本人が作っている・データベース不要・GPLって辺りがよさげです。 画面イメージをみたところ、グラフとかの統計情報も出るみたいですし、 結構実用に耐えそうな予感もします。 Rubyっていうところが微妙ですが、 Windowsじゃあ動かないんですかね? ■バグ管理システム SAID URL: http://www.chronostar.jp/products/jp/said_top.htm クボタコンプス株式会社というところがが作っている有償のバグ管理システムです。 見た感じ、大したことはできなさそうなのですが、 これと一緒で、商用サポートが必要な場合には、選択の余地ありでしょう。 まあ、198,000円は高すぎるような気もしますが。 つか、どこにそんな大金出せるプロジェクトが存在するんじゃあボケェ!(>_<; というわけで、影舞が使い物になる場合、 Web障害管理システムの開発は、滞る可能性が高いですね。 /** 影舞を試す。 */ Windows環境で影舞を動かしたという情報もあったので、 早速やってみることに。 インストールしたもの: ・Apache 2.0.48 http://httpd.apache.org/ ・Ruby 1.8.1 (mswin32版) http://www.dm4lab.to/~usa/ruby/#download (インストール手順はここにありました。展開してPATHに加えるだけですが。) ・影舞 0.8.3 http://www.daifukuya.com/kagemai/ Quick Startを参考にした結果、以下の追加作業が必要になることが判明しました。 1) CGIの有効化 (Options ExecCGIなどを加える) 2) html/*.cgiのRubyパスを書き換える C:\rubyにインストールした場合は、 「#!C:\ruby\bin\ruby.exe」 とする。 3) パッチをあてる 手動で、lib/kagemai/cgi/action/summary.rbを書き換えました。 というわけで、インストールはまあ問題なくできました。 で、実際に動かしてみたんですが、 ・グラフ機能はGDとかいうのをインストールしないと使えないっぽい ・CSV出力機能がない (うちの現場では結構使うらしいです。) ・ログイン機能が良く分からない サイトのデモではBasic認証かかってましたが、利用制限とかあるんでしょうか?ナゾです。 ちなみにログインとか無いので、Cookieを利用しない場合、 新規レポート時に何回でもメールアドレス入力させられます。。。 ・mod_rubyを使ってないせいか、ちと遅い という軽微な使い勝手の悪さを感じました。 GDとmod_rubyのWindowsへのインストールに関して、 知識がある人にはよさげですね。 影舞動かして気づいたのは、 Web障害管理システムって、じつはあんまりお手軽じゃなかったんですね(^^; Tomcatとかでフォルダをクラスパスに通すってのが、結構敷居高かったりするので、 その辺改善策ないかなぁとか思ってたりするんですが、なかなか。 とりあえず、影舞とは想定規模の違いで住み分けできそうな気がするので、 開発続けた方がいいかも知れませんね。3/22(Mon)
/** しとしと */ 今日はよく降りました。 明日は雪かもってウワサですが、降らないといいなぁ。。。 /** ミニ鳥しそ丼 */ 鶏むね肉を適当な大きさに切って、塩コショウで味付けしつつ、 油で焼いて、最後にしそとからめて、ごはんの上にのっけておしまい(^^; なんか意外と美味でした(^^) /** いまさら */ 最近技術の勉強が遅れてる予感がしてるんですが、 ようやくEclipse + Tomcatプラグイン + Easy Strutsを試してみる時間が取れました。 実験マシンは、Celeron 1GHzのメモリ256MBなマシンだったんですが、 やっぱりEclipseが重すぎて、開発環境の良さを消してしまっていたような気がします。 常に頭をよぎるのは「こんなに重くて生産性上がるの?」だし。 良いなあと感じたことは、 Tomcatプラグインを入れることによって、 Eclipseのデバッガが使えることでしょうか。 (まあ、あちこちで言われてることですが。) ただ、Eclipseの重さはここでも尋常じゃなかったです(T_T) Tomcatはホットデプロイが出来ないので、 僕が好きな「warファイル生成 → ホットデプロイ」 という流れで開発できないのですが、 (まあ、いちいちTomcatを再起動すればできるが。) Tomcat以外のコンテナを利用していれば、 プラグインのwarファイル生成機能を使って、できるんじゃないかと思います。 当然のことながら、そのようなAntタスクを作ってやれば、同様のことはできます。 ちなみに、いきなりserver.xmlを壊してくれて、 Tomcat起動しなくなりました(T_T) Easy Strutsに関しては、 まあ、僕自身あんまりStrutsの知識が無いので何とも言えないのですが、 struts-config.xmlをがりごり書くよりは、 Easy StrutsのGUIを使った方が、はるかに分かりやすいので、 その点は評価できると思います。 あとの機能はよく分からないので使ってません。 JSPからActionFormBeanを自動生成してくれるようなことが書いてあったのですが、 それができたら結構便利かも。 ちなみにこいつも、既存のStrutsアプリをEclipse + Easy Strutsの環境に乗せ替えてる間に、 web.xmlとstruts-config.xmlを壊してくれたので、 アプリケーションが動かなくなりました(T_T) アプリケーション移行時にはご注意ください。3/21(Sun)
/** フィッシュマックディッパーを食す */ なんか安物っぽいっていうか、ちゃちっぽいっていうか、要はイマイチ? ケンタのお魚フライの方がだんぜんおいしいような気がします。 まあ、220円で6コ入りってあたり、質より量を取ったっていうことなんでしょうけど。 だったら、フィレオフィッシュでよくない?(^^; /** 2ピアノ4ハンズ */ ル テアトル銀座で見てきました。 幼少の頃からピアノを習っている人の風景(?) をコメディー化しつつ、曲を弾きつつ、連弾しつつ、 みたいな感じで、なかなか面白かったです(^^) 音楽大学行ったりした日には、ぢごくの日々が待ってるんでしょうね(^^; 気が狂ってしまいのも、分かるような気がします。 まあ、僕はちまちまやってきますが(^^;; /** JRunやっぱバグってます(T_T) */ JRun4 + Updater3で実験してみたんですが、 前からバグってるところが、やっぱりバグってました。 ■実験環境 OS: Windows XP HomeEdition JRun: JRun4 開発版 Windows版 JRE: >java -version java version "1.4.0" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92) Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode) データベース: Microsoft Access 2000 JDBC設定: testというデータソース名でなにがしかのmdbをODBC登録する。 JRunのAdminツールで、JDBC-ODBCブリッジでtestデータソースを参照する設定をする。 ■テストコード import java.sql.*; import javax.naming.*; import javax.sql.*; public class test { public static void main(String[] args) throws Exception { InitialContext ic = new InitialContext(); DataSource ds = (DataSource)ic.lookup("test"); Connection con = ds.getConnection(); // 1番目のコネクションを開く Connection con2 = ds.getConnection(); // 2番目のコネクションを開く con.close(); // 1番目のコネクションを閉じる (2番目のコネクションには関係ないはず。。。) Statement stmt = con2.createStatement(); // ここでエラー! ResultSet rs = stmt.executeQuery("select * from test"); while(rs.next()) { rs.getString(1); System.out.println(rs.getInt(2)); } rs.close(); stmt.close(); con2.close(); } } ■コンパイル javac -classpath jrun.jar;. test.java ■実行&エラーメッセージ >java -classpath jrun.jar;. -Djava.naming.factory.initial=jrun.namin g.JRunContextFactory -Djava.naming.provider.url=localhost:2908 test Exception in thread "main" java.sql.SQLException: この接続はタイムアウトしたか、 既に閉じられており、プールに戻りました。接続を再取得する必要があります。 at jrunx.cluster.ClusterAlgorithm.invokeService(ClusterAlgorithm.java:12 7) at jrunx.cluster.ClusterAlgorithm.invokeService(ClusterAlgorithm.java:80 ) at jrunx.rmi.Invocation.invoke(Invocation.java:304) at jrunx.rmi.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java :177) at jrun.ejb.invocation.ClientInvocationHandlerImpl.invoke(ClientInvocati onHandlerImpl.java:215) at $Proxy4.invokeConnection(Unknown Source) at jrun.sql.RemoteSQLProxy.invokeConnection(RemoteSQLProxy.java:138) at jrun.sql.RemoteSQLProxy.invoke(RemoteSQLProxy.java:87) at jrun.sql.RemoteSQLProxy$RemoteProxyDelegate.invoke(RemoteSQLProxy.jav a:366) at $Proxy5.createStatement(Unknown Source) at test.main(test.java:15) ■結論 というわけで、JRunのコネクションプーリングを利用する場合は、 SQLを実行する都度Connectionを取得するというスタイルではダメで、 Webアプリケーションならば「ボタン等を押下して次の画面に遷移するまで」 という1機能単位でConnectionを使いまわすようなスタイルを適用すべきだと言えるでしょう。 例えば、Jakarta Commons DBUtilsを組み合わせて使う場合を考えると、 QueryRunnerにDataSourceを渡してしまうと、内部的にConnectionを取得してしまうので、 あらかじめConnectionを取得しておいて、QueryRunnerにConnectionを渡すという 方式に統一する必要があると思います。