« May 2007 | Main | July 2007 »

June 2007

2007.06.25

JAXBで日付/時刻の処理

 JAXBを用いて「フォーマット付きの日付型や時刻型を使用する場合、どのようにすれば?」に関してですが、javax.xml.datatype.XMLGregorianCalendarクラスを用いることで、ある程度思ったようなフォーマットで出力できるようになるようです。

Continue reading "JAXBで日付/時刻の処理"

| | Comments (0) | TrackBack (0)

2007.06.24

Apache2.2 + Tocmat + Proxy

 Apache2.2とTomcatの連携をProxy経由で行う設定に関して・・・

<Location /jsp/>
  ProxyPass ajp://localhost:8009/jsp-examples/
</Location>

って書きましたが、このようにパスを切り替えるような設定にした場合、Redirect等が発生したときに正しく処理されません。

 ProxyPassReverseを組み合わせることで、ResponseHeaderの中身を書き換えるようになるはず・・・ですが、なんか上手く書き換わってくれない(汗・・・おそらく、設定を間違えているだけだとは思いますが)。もっとも、Headerの中身だけを書き換えても、出力されたhtml中に元のパスを意識したリンクが存在した場合に正しく遷移できなくなってしまいますが(mod_proxy_htmlを利用することでかなりの部分は対応可能となりますが)。

 ん~・・・ってことは、コンテキストルートの書き換えは行わない方が無難ってことでしょうかね。

| | Comments (0) | TrackBack (0)

2007.06.23

メジャー(MAJOR)

 NHK教育で放映中のアニメ メジャー。3rdシーズンもいよいよ次が最終回。

 予想通り(?)この後は3rdシーズンの再放送が行われ、続いて4thシーズンの開幕ですね(!)。ただ、原作のストーリー(といっても、原作を全て読んでいるわけではないのですが)を考えると、4thシーズンあたりで最後ってところでしょうかね? それとも、しばらく間をおいて5thシーズン開幕?(今の原作の範囲内で4th~5thまで行くのかもしれませんが)
 間をつなぐために1stシーズン、2ndシーズンの再放送(というか再々放送)も行われたりして(笑)。

| | Comments (0) | TrackBack (0)

Trac Ticketの日時表示

 わたりんの雑記とLAMPなメモ Ticketの日時表示を日時そのものを表示するように改善する
 やはり同じようなことを考えている人はいらっしゃるんですね。っていうか、バルーンで表示されるのすら知りませんでしたが(^^;
 今度(覚えていれば)自分のところのも直すこととしましょう。

#そういえば、Trac0.11でテンプレートエンジンがClearSilverからGenshiに変わりますが・・・GenshiはTracと同じところ(Edgewall社が開発しているんですね)。

| | Comments (0) | TrackBack (1)

2007.06.20

JTracの検索機能

 JTracには検索機能が実装されていますが、そのエンジンとしてはApache Luceneが利用されています(JTrac2.0-dev7ではLucene2.0.0が利用されているようです)。チケットを登録する毎に、自動的にインデックスの作成処理が行われるようになっているようですが、明示的なインデックスの再構築を行うこともできます(Optionメニュー内からRebuildで可能です)。

 残念ながら、デフォルトで設定されているアナライザがorg.apache.lucene.analysis.SimpleAnalyzerであるため、日本語に対する検索はできません(SimpleAnalyzerに関しては、関口宏司のLuceneブログ Analyzerクラス等で概要が書かれています)。

Continue reading "JTracの検索機能"

| | Comments (0) | TrackBack (0)

2007.06.19

Apache+TomcatでSSLクライアント証明書

ApacheTomcatを連携
・SSLクライアント証明書を要求するようにApacheを設定

という条件で、使用しているSSLクライアント証明書の情報をTomcat側で取得するテスト。
 ファイヤープロジェクト Webアプリケーションでのクライアント証明書情報の取得にて、いい感じでまとめられていますので、それを元に環境を構築。

Continue reading "Apache+TomcatでSSLクライアント証明書"

| | Comments (0) | TrackBack (0)

2007.06.18

JTracの日本語対応

 JTrac先日の記事)に関して、日本語の対応度合いを調べてみました。Javaで記述されているので、(内部的には)問題となる場所は少ないと思うのですが、これまでの経験上、外部との入出力(外部ファイルの取り込みやメール等での出力)において文字化けが発生する場合がそれなりにありますので。

 ってことで、全ての機能に関して試したわけではありませんが、結果をいくつか。今後どこまで試すかは僕の気分次第?(笑)

【メッセージの日本語化】
 メッセージが日本語されていないと拒絶反応を示される場合が多いというのも事実。個人的に使う分には英語のままでもいいのですが(一通り慣れれば何とかなりますし)、「英語だから」というだけでNGになってしまうことがあるのも悲しい現実。
 JTracは、基本的にメッセージが外部化されているため、messages.propertiesを元にメッセージを日本語化したmessages_ja.propertiesを作成しwebapp/WEB-INF/classesにコピーするだけで、自動的に日本語化されます。ユーザ設定の「言語」のところにも、「ja - 日本語」の選択肢が自動的に追加されます。
 2.0にはmessages_ja.propertiesは含まれていませんが、2.0リリース以降に追加されたようでtrunkにmessages_ja.propertiesがあります。とりあえずはこのファイルをダウンロードしてきてコピーすれば、メッセージを日本語化できます(一部誤植や「う~ん?」というような部分もありますが・・・)。

Continue reading "JTracの日本語対応"

| | Comments (1) | TrackBack (0)

2007.06.17

JTrac

 JTracなるものを試してみました。名前からして、TracのJava実装かなぁ・・・と思ったのですが、実際のところはどうなのでしょう? (ドキュメントによると、JTracの開発は2004年12月開始。一方TracはMilestone0.5が2004年2月なので開発開始はもっと昔でしょう)

 現時点でのJTracはワークフローや、項目を任意にカスタマイズ可能なBTSといったところでしょうか。Roadmapによると、WikiエンジンやSubversionとの連携等の開発予定もあるようで、それらが実装されるとTracのような感じのツールになるのではないかと。

 なお、JettyおよびHSQLDBを同梱しているので、JavaSE5以降がインストールされている環境の場合、アーカイブを展開してstart.batを実行するだけで動作します(ポート番号80で起動します)。他のデータベースやサーブレットコンテナに切り替えることも可能なようです(Chapter 3. Installationに記載されています)。

| | Comments (0) | TrackBack (0)

2007.06.15

複数のSSL証明書を併用

 1つのApacheに複数のSSL証明書を組み込むテスト。それぞれのSSL証明書をテストCAのレベルから別々に生成し、ついでにクライアント証明書も生成。

 いろいろと調べてみると、VirtualHostを名前ベースで使用している場合、ポート番号を分けないと正しく動作できないようです。逆に、同じポート番号を使用したい場合は、異なるIPアドレスを利用する必要があるようです。

 ホスト名はヘッダー情報から取得しますが、SSL通信環境下では復号処理を行うまでヘッダー情報を取得できないため、結果的に名前ベースでのVirtualHostは使えないとのこと(処理の順番ってことですね)。

 とりあえず、ポート番号を分ける方法で設定を行ってみました。もっとも、一般公開するサーバの場合、ポート番号を変えるとなるとFirewallの設定等を変更する必要がありますが(まぁ、複数のIPアドレスを割り当てる場合でも設定の変更は必要となると思いますが)。

Continue reading "複数のSSL証明書を併用"

| | Comments (0) | TrackBack (0)

2007.06.14

shared/lib

 Tomcatでは、jarファイルの配備先としてserver/libとcommon/libの他にshared/libってのもあります(もちろん、他に各Webアプリケーション毎の配備先もありますが)。

 Application Developer's Guide Deploymentによると、shared/libは

JAR files placed here are visible to all web applications, but not to internal Tomcat code. This is the right place for shared libraries that are specific to your application.

と書かれていますので、「Tomcat自身からは参照できないが、各Webアプリケーションで共通して使用するjarファイル」をshared/libにコピーするようです。

#複数のWebアプリケーションで使用するフレームワーク等とコピーするような感じでしょうか。

| | Comments (0) | TrackBack (0)

2007.06.13

server/libとcommon/lib

 Tomcatのserver/libとcommon/libの使い分けに関して今更ながらのメモ(^^;;

 ユーザ認証の設定に関して、調べ物をしているとき(The Apache Tomcat 5.5 Servlet/JSP Container Realm Configuration HOW-TO)に知りました(おそらく、ちゃんと記載されているページもあるんだとは思いますが)。

以下、JDBCRealmを使用した場合のJDBCドライバのjarファイルのコピー先の説明文。

Place a copy of the JDBC driver you will be using inside the $CATALINA_HOME/server/lib directory (if you do not need it visible to web applications) or $CATALINA_HOME/common/lib (if it will be used both by Tomcat 5 and by your apps). Note that only JAR files are recognized!

つまり・・・

【server/lib】
 Tomcat自身のみが使用するjarファイルをコピー。Webアプリケーションからは参照不可。

【common/lib】
 Tomcatと、各Webアプリケーションが使用する(共用する)jarファイルをコピー。

ってことになるわけですね。

Continue reading "server/libとcommon/lib"

| | Comments (0) | TrackBack (1)

2007.06.11

1日5000タッチ

 「1日5000タッチ」という話題をTVで見かけましたが・・・すべて英数字だったとして、ファイルサイズに変換すると5Kbyte。

 今日、ある処理を行うために作った簡単なプログラムが約3.2Kbyte。まぁ、Eclipseの自動補完等を使っているので、実際のタッチ数はその半分程度?

 その昔(20年ほど前)、DP社の某雑誌に掲載されていたプログラムの打ち込み。1行平均25文字として200行。行番号を10から10刻みで振ったとして、2000ですか。ん~それくらいの長さのプログラムも、たぶんそれなりに掲載されていたんでは(といっても、ほとんど覚えていないのですが)。
 ただ、1日で入力したかどうかは別問題ですが(^^; そもそも、20年前ってまだ小学生だったし。

#今は・・・5Kbyte程度のプログラムなら、ごろごろ転がっているかな。

| | Comments (0) | TrackBack (0)

2007.06.08

起動後に外部Jarファイル内のクラスを利用

 何らかのユーティリティーで、起動後のユーザ操作等でJarファイルを指定し、その中のクラスを利用したいような場合・・・例えば、データベース関係のユーティリティーとかですかね。
 ユーティリティー(ツール)実行時にクラスパスに含めるjarファイルは最小限にし、データベースに接続する際にJDBCドライバが含まれているjarファイルも指定して接続とかそんな感じのイメージ。

 実際にJDBC接続までテストしたというわけではありませんが、起動時にクラスパスに含まれていなかったjarファイル内のクラスを読み込む部分だけ試してみました。

Continue reading "起動後に外部Jarファイル内のクラスを利用"

| | Comments (0) | TrackBack (0)

2007.06.07

svndumpfilter

 Subversionリポジトリをダンプする際、特定のパスのみを抽出したり、逆に特定のパスのみを除外するためのツールとして、svndumpfilterってのがあります。詳細はリポジトリの保守多分原文)にまとめられています。

 あるフォルダを除外する場合は、

svnadmin dump Hoge | svndumpfilter exclude /fuga > Hoge_ExcludeFuga.dat

逆にあるフォルダのみを抽出する場合は、
svnadmin dump Hoge | svndumpfilter include /fuga > Hoge_IncludeFuga.dat

って感じで実行することとなります。

Continue reading "svndumpfilter"

| | Comments (0) | TrackBack (1)

2007.06.06

Apache&Tomcatで連携時のRemoteIPアドレス

 Apache2.0+Tomcat5.5+mod_jkで連携している場合、HttpServletRequest#getRemoteAddr()で接続元のIPアドレスを取得することが可能です。

 しかしながら、Apache2.2+Tomcat5.5+mod_proxyで連携した場合、HttpServletRequest#getRemoteAddr()の戻り値が"0.0.0.0"になってしまうようです。で、どうも(リバース)プロキシの動きとしては、これはこれで正しい動きとなるようですが(通常、プロキシサーバを経由すると、リクエスト元のIPアドレスはプロキシサーバのアドレスになってしまうよう)。ただ、その場合、"127.0.0.1"ではなく、何故"0.0.0.0"になってしまうのか不明ですが。

Continue reading "Apache&Tomcatで連携時のRemoteIPアドレス"

| | Comments (0) | TrackBack (0)

2007.06.05

Tomcat&Apacheでフェールオーバー

 mod_jkのbalancerあるいはmod_proxy_balancer(Apache2.2の場合)と、セッションレプリケーションを組み合わせることで、Tomcatが1台落ちても処理を継続できる環境を構築することが可能となりました・・・が、時々リクエストの割り振りに失敗してしまう場合があるようです。

 Tomcat1にリクエストが行っている処理があったとして・・・

  • Tomcat1を停止→Tomcat2に処理がとばされるようになる(これは正常)
  • Tomcat1復活→リクエストはTomcat2に割り振られ続ける(正常・・・?)

    この状態で、Tomcat2を停止すると、基本的にそのままTomcat1に処理が割り振られるようになるのですが、まれにTomcat1に処理を割り振ろうとしたタイミングで

    Service Temporarily Unavailable

    The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

    というエラーが出る場合があります(ctrl+Rで再読込すると、次のリクエストは問題なくTomcat1に送られるようになりますが)。

  • Continue reading "Tomcat&Apacheでフェールオーバー"

    | | Comments (0) | TrackBack (0)

    2007.06.04

    Tomcatでフェイルオーバー(比較)

     (細かい設定はさておき)Tomcatでサポートされている3種類のセッション情報の共有化に関して試してみたわけですが・・・その比較を。Tomcat easy clustering configurationに詳細にまとめられていますが、個人的な意見も交えつつ。なお、フェイルオーバーに関連した細かい設定等に関しては、気が向けば改めてまとめるかもしれません。

    【PersistenceManagerを利用】
     PersistenceManager+FileStoreおよびPersistenceManager+JDBCStoreの組み合わせを用いた場合、セッション情報の保管が行われるまで若干のタイムラグが発生してしまいます。他にも、いくつかの不利な点があります。

  • 設定でセッション保管の間隔を短縮することは可能だが、最低でも1秒以上の間隔は必要。当然ながら、間隔を短くしすぎるとリソースの消費は激しくなるので現実的には1秒といった設定は無理だと思いますが。
  • セッションデータのFile/DBへの保管が完了する前に別のTomcatにリクエストが行ってしまうと、古いセッション情報をロードしてしまう危険性がある。
  • セッション情報の変更の有無にかかわらず保管処理が行われる(従って、セッション数が多くなるとセッション情報の保管処理そのものにリソース(CPUおよびFile/DBへのIO、ネットワークの帯域等)が消費されてしまうことに)。
  • 1つ前のと関連しますが、セッション内のデータ全てをまとめて保管するため、セッションにいろいろな情報を格納すればするほどセッション情報保管時の負荷が増大することになる。

     また、不利な点というわけではありませんが、注意すべき点として以下のようなことがあります。

  • saveOnRestart属性の値を"true"にしておかなければ、Tomcatダウン時にセッション情報がクリアされてしまう(=フェイルオーバーできなくなる)。もっとも、PersistenceManagerはセッション情報の共有だけのために作られたものではないので、そういうものなのでしょうけど。
  • まずメモリ上にあるセッション情報を優先的にロード(メモリ上に見つからない場合にFile/DBからセッション情報を取得する)するため、StickySessionなしだと古いセッション情報を元に処理を行う場合がある。

  • Continue reading "Tomcatでフェイルオーバー(比較)"

    | | Comments (0) | TrackBack (0)

    メールボックス容量が50倍に

     @niftyのメールボックスの容量が5GB(会員向け)に増えるんですね。今が100MBなので、一気に50倍ですか。しかも、保存期間も無期限に。仮に会員数が300万人だとすると、単純計算で1500万GB=15PB(ペタバイト)。個人でも(容易に)1TBを超えるディスク容量を準備できる時代とはいえ、サーバ用でこの容量とは・・・(^^;

    #あ、でも、世界規模で考えたらきっとGmailの方が総容量は多くなりそうですね。

    | | Comments (0) | TrackBack (0)

    2007.06.03

    Tomcatでフェイルオーバー(SimpleTcpCluster)

     SimpleTcpClusterを用いたセッションレプリケーションのテスト。設定の詳細に関してはThe Apache Tomcat 5.5 Servlet/JSP Container Clustering/Session Replication HOW-TOに記載されていますが、とりあえずSimpleTcpClusterを用いてレプリケーションを行うのであれば、server.xmlの

    <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"

    から
    </Cluster>

    までのところのコメントアウトを解除すればOKです(テストしたのはTomcat5.5.23です)。同一端末上で複数のTomcatを動作させる場合は、<Receiver>要素のtcpListenPort属性の値をずらしておく必要があります。それ以外の項目に関してはデフォルトのままでOKですが、ネットワークに全く接続していないPCで動作テストを行う場合、mcastBindAddress="127.0.0.1"の設定がMembership要素の部分に必要となるとのことです。また、TeedaExtentionを使用する等、拡張子がhtmlのファイルを動的ファイルとして使用する場合、
    <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"

      filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

    のfilterの部分から.*\.html;を除去しておく必要があります(他の拡張子(通常は静的ファイルとして使用)に関しても、同様に動的ファイルとして使用する場合でセッションにアクセスするような場合は除去しておく必要があります)。

     なお、今回はWebアプリケーションの同期処理の部分はスキップさせるため、<Deployer>要素の部分は別途コメントアウトしています。

    Continue reading "Tomcatでフェイルオーバー(SimpleTcpCluster)"

    | | Comments (0) | TrackBack (0)

    2007.06.02

    Tomcatでフェイルオーバー(JDBCStore)

     JDBCStoreは、文字通りJDBCを用いてデータベースにセッション情報の保管を行います。試しに、MySQLConnector/Jを用いてJDBCStoreの設定を行ってみました。

  • MySQLにスキーマsessionおよびアカウントsesuser(パスワード:sespass)を追加。スキーマsessionに対しての全ての権限をsesuserに割り当て。
  • JDBCドライバが含まれているmysql-connector-java-5.0.6-bin.jarを、Tomcatのserver/libフォルダ内にコピー。
  • セッション情報を保管するテーブルを作成。例えば以下のような感じ。
    create table session.sessions (
    id varchar(100) not null primary key,
    valid char(1) not null,
    maxinactive int not null,
    lastaccess bigint not null,
    app varchar(255),
    data blob
    );

  • Continue reading "Tomcatでフェイルオーバー(JDBCStore)"

    | | Comments (0) | TrackBack (0)

    2007.06.01

    Tomcatでフェイルオーバー(FileStore)

     FileStoreを用いると、セッション情報をファイルに保存するようになります。なので、複数のTomcatから参照できるフォルダを保管先に指定することで、フェイルオーバーを実現することが可能となります。

     設定例としては、以下のような感じ。

    <Store className="org.apache.catalina.session.FileStore"
     directory="C:/Temp/Session"
     >
    </Store>

     directory属性を指定していない場合は、work/Catalina/localhost内の対応するWebアプリケーションフォルダ内にセッションファイルが格納されます。また、directory="/Temp/Session"のような感じで指定した場合、
    work/Catalina/localhost/(appname)/Temp/Sessionといった感じで処理されるようです(Windows環境の場合)。
    従って、複数台でファイルの共有を行う場合は、指定の仕方に注意が必要かと。

     セッション情報が保管されると、指定したフォルダ内に

    961C108DE6BEFD9A14634544D5D8B8D0.Tomcat1.session

    といった感じのファイル名で出力されます(jvmRoute="Tomcat1"を指定している場合)。

     なお、タイムアウトしていないのにセッションファイルが削除されることがありましたが、PersistenceManager要素のmaxIdleSwap属性の値を"-1"にすると、この現象は観察されなくなりました(ソースを調べたわけではないので、本当に関連があるのかどうかは不明ですが)。

    (参考)FileStoreのJavaDoc(Tomcat5.5)

    | | Comments (0) | TrackBack (1)

    « May 2007 | Main | July 2007 »