snbhsmt_log

ネットワークとコンピュータ、その他いろいろ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

BeanUtil#copy() で Key を変換する

Slim3 の BeanUtil#copy() で Key 型を含むオブジェクトをコピーする際に、 keyToString したり逆に StringToKey する様にする。

スポンサーサイト

続きを読む »

slim3 のリクエスト処理の流れ

slim3 (FrontController) のリクエスト処理の流れをフローチャートに書いてみました。 おおまかな流れが思い出せれば良いので、色々端折ってます。

また、標準のフローチャートの書き方と違っていたり、分岐の方向を変えた方が スッキリするのにとかあると思いますが、とりあえずあまり気にしない方向で お願いします。

続きを読む »

Slim3 のルータを拡張するサンプル

Slim3 の AppRouter 周りは色々拡張できるなあとソースを読んでいて思ったので、 正規表現でルーティング指定できるものをちょっと書いてみました。

パスの変換自体は java.util.regex パッケージをそのまま使っているだけです。

AppRouter implements Router して、まったく独自のルーティングルールに する事もできるけど、RouterImpl#addRouting() もそのまま利用できる様に Routing の方を拡張する方法にしました。

オマケにすらならない様なテスト付き。

続きを読む »

AppRouter のテストはどう書く

9/03 追記:
ControllerTester#start() でルーティングされないのはバグだったらしく、 Revision 1340 で Fix された様です。

なので、これ以降の Slim3 を利用すれば、Controller のテストケース中で ルーティング前のパスを指定した場合でもルーティングのコードをカバーできるので、 AppRouter クラス単体でのテストは不要になる。

追記ここまで


Slim3 の AppRouter のテストはどう書けば良いのだろう。 そう思って ControllerTester とか FrontController 等のソースを見たら こんな感じの処理になっていた。

続きを読む »

Commons DBCP のメモ

以前 speculativeflow.net に置いといた Commons DBCP のメモ を移動した。
だいぶ古い内容だけど、何かの役に立つかもしれない。

ちなみに、アイドル接続退去スレッドについては Commons DBCP の Idle Object Evictorに新しく書いた。

あと Logsurfer のメモもそのうち移動しよう。忘れなければ。

Commons DBCP の Idle Object Evictor

Apache Commons DBCP の Idle object evictor スレッドは、 アイドル状態の接続をある条件により切断し、接続プールから立ち退かせる。 このスレッドを制御するパラメータは以下。

timeBetweenEvictionRunsMillis
スレッドの実行間隔 (ミリ秒) を指定する。 1 未満だとスレッドは実行されない。 よって、その場合以下のパラメータ群は指定しても意味を持たない。 初期値は -1 なので、デフォルトではこのスレッドは動作しない。
minEvictableIdleTimeMillis
アイドル接続がプール中に居座れる時間。 接続がアイドル状態になってからこの時間を過ぎていると、切断し破棄する。 1 未満は無制限を意味し、決して破棄されなくなる。 次の testWhileIdle の機能を利用するなら、無制限を指定するのも無意味ではない。 初期値は 1800000 (30 分) 。
testWhileIdle
検査するアイドル接続に validationQuery を発行して DB との接続を確認するかどうか。 ようするに testOnBorrow, testOnReturn のスレッド版。 true を指定した場合、実際に DB との通信が出来なくなっているオブジェクトを破棄する。 validationQuery が未指定の場合は何もしない。 この検査は、上記の minEvictableIdleTimeMillis での検査後に行われる。 初期値は false 。
numTestsPerEvictionRun
スレッドの一動作中に検査するアイドル接続の数。 0 を指定すると 1 つも調べずにスレッドが終了するので無意味。 負数の場合は Math.ceil(numIdle / Math.abs(numTestsPerEvictionRun)) 個を検査。全アイドル接続のうちの何分の一を検査するか、という事かな ? 初期値は 3 。
  • Commons DBCP 1.2.1

FC4 で Tomcat が停止できない

Fedora Core 4 にインストールした Tomcat 5.0.28 を catalina.sh stop で停止しようとしたら出来ず、ログを見ると以下の例外が発生していた。

Catalina.stop: java.net.SocketException: Invalid argument or cannot assign requested address
java.net.SocketException: Invalid argument or cannot assign requested address
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
        at java.net.Socket.connect(Socket.java:452)
        at java.net.Socket.connect(Socket.java:402)
        at java.net.Socket.<init>(Socket.java:309)
        at java.net.Socket.<init>(Socket.java:124)
        at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:410)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:336)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)
とりあえず telnet で 8005 番ポートにつないで停止。

127.0.0.1:8005 に接続できるか出来ないかの問題っぽいが、 iptables で DROP している訳でもなく、そういえば SELinux が関係しているのかと 考えて無効にしてみたら catalina.sh stop できた。 しかし Tomcat を利用する時は SELinux を無効にするというのでは問題なので 別の手を考える。

Tomcat の LISTEN 状態は netstat -a --inet しても表示されず、 --inet6 だと表示される事から IPv6 が有効になっている事がわかる。 そういえば Java の IPv6 周りはヤヤコシイと聞くので、 JVM に IPv4 を優先するオプションを付けてみる。

JAVA_OPTS="-Djava.net.preferIPv4Stack=true"
この状態で Tomcat を起動すると netstat -a --inet で LISTEN 状態が確認でき、 catalina.sh stop で正常に停止する事が確認できた。 SELinux の設定については勉強不足でよく解らないし、IPv6 を使う予定は無いので、 とりあえずこの方法で良しとする。

java.net.preferIPv4Stack システム・プロパティを true にすると、 IPv6 アドレスより IPv4 アドレスを優先する。 Java は標準で IPv6 が有効なシステムでは IPv6 で繋ごうとするらしいが、 繋げなかった場合 IPv4 なら繋がるかを試してくれないらしい。本当か ?

FC4 の lo インターフェースには IPv6 アドレスが割り当てられている。 これが無ければ java.net.preferIPv4Stack=false でも bind 出来るのだろうか。

  • Fedora Core 4
  • j2sdk 1.4.2_08
  • Tomcat 5.0.28

2006/01/02 更新
いつの間にか、java.net.preferIPv4Stack=true にしなくても Tomcat を正常に 停止できるようになっていた。よく解らないが SELinux のルールをアップデートした からかもしれない。

Top

HOME

Author:snbhsmt
Google Profiles

http://www.ksky.ne.jp/~snbhsmt/

全ての記事を表示する

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。