クリスタルDUKEが欲しくて....
2006年12月06日

セミナーに申し込んじゃいました。

タイミングを逸したので、
「参加したいなぁ~」と思うプログラムはほとんど『満員御礼』状態だったのですが。

DUKEのために(笑)、まだ空席のある講座からぽつぽつと選びました。
忙しいから、いけるかどうかもわからないのだけれど。
ひさしぶりに参加してみたいなぁ....

職場で席替えがあって、若いコ(女の子)が隣の席になりました。
Javaの話をあれこれしているうちにDUKEの話題に。
驚いたことに、最近のコはDUKE、知らないんですね。
Java言語を使っているのに~~涙

悲しいコトです。

「かわいいでショ」とDUKEの絵を描いてみせても、あまりにヘタクソで....(爆

クリスタルDUKEをゲットできたら、机の上に飾っちゃいます。
DUKEマウスパッドが黄ばんでばっちくなったので、バトンタッチ。
やっぱり、Javaで開発する限り....側転していた頃のDUKEのこと、忘れたくなくて。
本当に世界が変わってきましたよね??

投稿者 megu : 00:47 | コメント (0)

栗クリスマスイベント
2005年12月06日

今日、不思議なSubjectのメールを受け取りました。
[SDC]_オブジェクト倶楽部クリスマスイベント
Sun Developer Connectionからの
とっても真面目な(?)メーリングリストです。
(いろいろなイベントのお誘いがあるので楽しみにしているんです*^^*)

「栗のクリスマスって何??」と一瞬考えたけれど
次の瞬間大笑いしちゃいました!

メール本文にもしっかり引用されています。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
オブジェクト倶楽部栗クリスマスイベント
~ プロジェクトを成功させる7つのカギ ~
(開催日:2005年12月16日)
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

該当のサイトを覗いてみると....
やっぱりただの「2005クリスマスイベント」のようです。

ムフフフ....なんだかちょっぴりうれしい私。
だって、、、私もこんな間違い、やっちゃいそうなんですもん!

投稿者 megu : 22:19 | コメント (2)

HTMLエンコーディング
2005年12月01日

public class MyHtml {
    public static String htmlEncoding( String str ){
        str = str.replaceAll("&" , "&");
        str = str.replaceAll("<" , "&lt;");
        str = str.replaceAll(">" , "&gt;");
        str = str.replaceAll("'", "&#39;");
        str = str.replaceAll("\"", "&quot;");
        str = str.replaceAll(" " , "&nbsp;");
        return str;    
}
    public static void main(String[] args){
    System.out.println("<html><body>");
    System.out.println(htmlEncoding("aaa bbb<html>&'\""));
    System.out.println("</body></html>");
    }
}

とりあえずメモしておきます。
ネットから拾ってきたのに不具合があって、それを修正....といっても順番を変えただけ。
&→&amp;の変更は最初にしなくっちゃぁね*^^*

URLエンコーディングするクラスはあるけれど、
HTMLエンコーディングはないんですよね。
名前は似ているけれど、ぜんぜん異なるものなのだけれど....
HTMLエンコーディングは、『タグに使われる文字(たとえば<>など)』をサイト上に表示したいときに行います*^^*

ServletなどでHTMLを生成する際に表示するデータにタグに使われる文字が含まれることが考えられる場合に気をつけなくてはなりません。
んなこと、「アッタリマエだのクラッカー(古~っ!)」なんですけれどね。

ただいま仕事で悶々としています。(あまり詳しく話せないけれど...)
ったくどーにも、こーにも.....
HTMLエンコーディングは平たくいえば文字列変換。
staticメソッドですよねっ!

投稿者 megu : 22:54 | コメント (4)

Java Hands-On Lab at wakhok-Tokyo  レポート
2005年08月09日

半年以上前にメモしたものが、なぜか今ごろポロリと出てきました。
せっかくですので、エントリーしておくことにしました。
そういえば.....あれ以来、こういったツールには触れていません~涙。

Java Hands-On Lab at wakhok-Tokyo  レポート
Ease of Development

1.はじめに
EoD(Ease of Development)をテーマとしたHans-On形式のセミナーに参加してきまし
た。
基調講演のあと、各社IDEツールで実際にEoDに触れるセミナーがありました。
(1)Oracle JDeveloper 10g
(2)IBM WebSphere Studio V5.1.2
(3)BEA WebLogic Workshop
(4)Java Studio Creator

このうち、私が実際に触れてきたのはIBM WebSphere Studio V5.1.2です。
とても簡単な操作でWebアプリを構築できるということを体験してきました。
(実際、Javaのコードを作成することはありませんでした。)

2.EoD
昨年6月、サンフランシスコで開催されたJavaOneで、EoD(Ease of Development...
開発の容易性)という言葉が登場しました。
プロフェッショナル向けとの印象が強いJavaの敷居を下げることで、開発者を増やそ
うというのが目的です。

EoDを具現化する新たな技術仕様として、JavaServer Faces(JSF)や、Service Data
Object(SDO)があげられます。

また、今年の夏リリースされたTiger(JDK5.0)も大きな要素と考えられます。
J2SEはそれまで1.1、1.2..とバージョンをあげてきたのですが、今回は1.4から5.0へ
変わりました。それだけ大きな変革があったということです。Tigerでは、大幅な言
語仕様の改訂がなされ、開発者が書かなければならないプログラムコード量を大幅に
減らすことができるそうです。
(ダウンロードして使ってみてはいるのですが、実際その部分にはまだ触れていない
のです。今後の課題です。といっても易しくなっているということなので難しくはな
いでしょう...。)

3.JavaServer Faces(JSF)
見栄えや操作性のよいクライアント画面を開発しやすくする新技術で、今年3月に最
終仕様が発表されました。MVCに準拠したUI構築フレームワークです。
従来対応困難といわれていた、操作しやすいユーザーインタフェースをWebブラウザ上
で実現することができます。しかもEase of Developmentです。
豊富なUIコンポーネントを提供することによって、簡単な開発を実現します。
また、独自のUIコンポーネントの開発も可能です。
<JavaServer Facesが提供する機能>
・UIコンポーネント
・イベントハンドラとアクション
・バリデーション(妥当性検証)
・ステート管理
・画面遷移
・カスタムUI、レンダラー、バリデーター

※参考サイト
SUN
http://java.sun.com/j2ee/javaserverfaces/
非公式サイト(JSFCentral)
http://www.jsfcentral.com/

4.Service Data Object(SDO)
多様なデータソースへのアクセスを統一するための仕様。
(IBMとBEAがJSR-235として共同で標準化を推進中だそうです。)

下記のような様々な形態のデータソースへのアクセスは従来ならそれぞれ記述しなけ
ればならなかったのですが、SDO/API上で開発することによって、APIはひとつに統一
されます。
・RDBアクセス(JDBC)
・EJB
・Webサービス


すべて Service Data Object

SDOの特徴
・レザルトセットへのアクセスに接続(Connection)は必要ない。
・1オブジェクト=1 Data Graph

※現時点では分散トランザクション・サポートは未定
分散トランザクション...複数のデータベースに対してコミットすること
(2フェースコミット)

※参考サイト
JSR-235
http://jcp.org/en/jsr/detail?id=235

5.開発ツールにおけるEoD(IBM WebSphere Studio V5.1.2)
では、以上のことを「実際にどううやって開発するのか?」ということで
IBM WebSphere Studioを用いた実習(ハンズオン)に参加してきました。

IBM WebSphere Studioでは、JSFを独自拡張しJSFカスタムタグからJavaScriptを
含むHTMLを生成し、Webブラウザでリッチクライアントを実現しています。
例えば下記の入力支援機能があります。
・指定桁入力によるカーソルの自動移動
・改行キーでのフィールド移動
・入力中の数値のカンマ編集
・IMEの自動ON/OFF(IEで確認。Mozillaでは機能しませんでした。)
・日付などのマスク入力


※ペットショップというWebサイトを作成しましたが、ノーコーディングで
実現できました。

データベースから値をとってくる部分は、一覧表示されたテーブルから検索対象を
選択するだけ。結合もマウスで指定します。
画面はドラッグアンドドロップですべて作ることができました。
タイプインしたのは、タイトルや名称を指定するところぐらいです。

※参考サイト
Websphere
http://www-6.ibm.com/jp/software/websphere/developer/

(感想)
EoDを用いて、とても簡単にWebアプリを作成することができましたが、実際の業務
ではこうは行かないと思います。JSPソースをあれこれ編集することになるのでは
ないでしょうか?
どこまでこのツールを活かせるか...そこがネックになるのではないかと思います。
また、コードが不要になった分、それぞれのIDEに従った手順を覚えなくてはなら
なくなると思います。たとえば常にWebSphereばかり使って開発するならばよいかも
しれませんが、私たちにとってはあまり利点がないかもしれないです。

また、「EoDは従来のソフト開発者から仕事を取り上げてしまうものでは?」という
のが私の率直な感想です。
(VisualBasicの出現で大量のサンデープログラマが出現し、世の中のソフトの単価
が下がってしまったように....。)
できれば、こういったツールを使う立場ではなくて、ツール(フレームワーク)を開
発する側の立場になりたいものですね。

投稿者 megu : 17:54 | コメント (10)

JavaServer Faces
2004年11月02日

今日もセミナーへ行ってきました。
IBMWebsphereを使ったハンズオンで
JavaServer Facesを利用したWebアプリの構築でした。
オペレーション自体は簡単すぎてなんだか「イヤ」だったのですが(笑)。
いろいろ得るところがありました。
昨日のMozillaの直後でしたので、IEでしか動かない機能に疑問をもったり....。
これを機会にJSFのことをいろいろ知りたい、使ってみたい!このサーバでも動かしてみたいと思いました。
#そういえば最近JBossたちあげていないわ。

投稿者 megu : 18:20 | コメント (0)

最近のトラックバック
2004年10月29日
ますます重たくなるし、ちっともオススメじゃないのだけれど...
サイドバーの最近のトラックバックを変更しました。
ちっとも暫定版です。
(はてなアンテナも暫定版のまま、突っ走っているけれど。)

最近トラバされた順に、最大5件のエントリーについて表示するようにしました。

本当はテンプレートだけで実現したかったのだけれど....
プラグインを入れるくらいなら自分でやりたい。
そこで、「私にもできる...」といったら、JSP@Tomcat5.5です。

下記クエリをJSPで実行したものをLynxで読み込んでサイドバーに取り込んでいます。

(1)最近トラックバックされたエントリーをトラックバック日付の降順にmax5件検索するクエリ
    select  trackback_title
            ,trackback_id
            ,trackback_url
    from    mt_trackback    tb
            ,mt_tbping      tbping
    where   trackback_id =   tbping_tb_id
    and     tbping_created_on =
            (
            select  max(tbping_created_on)
            from    mt_tbping in_tbping
            where   in_tbping.tbping_tb_id  =   tbping.tbping_tb_id 
            )
    order by tbping_created_on desc
    limit 5;
(2)それぞれのエントリに対するトラックバックを求めるクエリ
    select  tbping_title
            ,tbping_blog_name
            ,tbping_source_url
            ,to_char(tbping_created_on,'yyyy/mm/dd') as tbping_created_on
    from    mt_tbping
    where   tbping_tb_id    =   (1)で求めたtracback_id
order by tbping_created_on desc

JSPのソース

投稿者 megu : 20:51 | コメント (0)

知らぬがホトケ
2004年10月21日

私、すっとぼけていました。

PostgreSQLをインストールしたときに、
configureのオプションに--with-javaって指定していたんです。
なので、/usr/local/pgsql/share/javaの下にpostgresql.jar(jdbcドライバ)が作られていました。

なのに、Tomcat5.5でDBCPをやってみたときにpg74.215.jdbc3.jarをダウンロードしてきちゃいました。

あぁお馬鹿さん。

ほかにも大ボケはたくさん言ったりやったりしています。

GNU make なんですが、Fedora(Redhat系)ではgmakeとmakeの実体はおんなじでした(恥)。

lrwxrwxrwx 1 root root 4 6月 2 23:54 /usr/bin/gmake -> make

ただのシンボリックリンクであります。

『いちいちgmakeとやらなくてもよかったんだぁ....』

#えっらそ~に、『※注意です。GNU makeを使います。』なんて書いてたんですよ。
(FreeBSDな方にはあたっているからいいいかも?でも、Fedoraって書いてるじゃん>自分)


「知らぬが仏」といいますが、「知っちゃったら恥ずかしいこと」がまだまだありそうで怖いです(泣)。

投稿者 megu : 18:47 | コメント (0)

カテゴリー別エントリ一覧の出力順指定
2004年10月02日
最近、たまに自分のサイト内をおさらいしたいことも出てきました。
そんな時、エントリー一覧は、カテゴリ別に表示されたほうがよいのです。

少し前に作ったTomcat版のエントリー一覧ですが(サイドバーにリンクをつけました...まだ試験運用版なので、正式ではないのです)、カテゴリの表示順に特に決まりがなかったので気になっていました。
今さっき、やっと、やっと....修正しました。

この並び順のソートの仕方って、最近のコメントのorder順のときにそっくりです。
ひとつだけ、さらに厄介になっているのは、

mt_entry(エントリーの中身の入っているテーブル)

mt_category(カテゴリの内容が入っているテーブル)
のほかに、

エントリーとカテゴリをつなげるための
mt_placemnetというテーブルが存在することです。

mt_entryとmt_categoryは直接結合できないんです。

どうも、entry_category_idにはNULLが登録されているようです。
ひとつのエントリーに複数のカテゴリを指定するために、mt_placementが追加されたのでしょうか?
そしてentry_category_idは不要になってしまったのでしょうか?
(なぜ、使われなくなった列を残してあるのかな?)

っというのは、置いておいて....

エントリーとカテゴリを結合させるためには、
entry_id と mt_placementのplacement_entry_id → category_id と mt_placementのplacement_category_id
を結合する必要があります。

それでもって、ひとつのカテゴリに属するエントリーのうち、登録日付が新しいものが含まれるカテゴリを優先して表示しなければならないんです。

っというワケで、↓のようなクエリに落ち着きました。(カテゴリをエントリ登録日時の降順で求めるクエリ)
select   category_label
        ,category_id
from    mt_category
        ,mt_entry       
        ,mt_placement   main_placement
where   1 = 1
    and entry_id    =   placement_entry_id
    and placement_category_id = category_id
    and entry_created_on =
        (   
            select  max(entry_created_on)
            from    mt_entry
                    ,mt_placement sub_placement
            where   1 = 1
            and     entry_id  = sub_placement.placement_entry_id
            and     sub_placement.placement_category_id 
                        = main_placement.placement_category_id
        )
order by entry_created_on desc
※「entry_created_onがもしまったく同じ値のエントリーが複数存在したら...」と懸念したけれども、ありえないのでよしとします。

上記クエリを入れ込んで検索したのが、現在のTomcat版エントリー一覧です。
リンク先がJSPでエントリー内容を表示しているものになっていますが、blog内の静的なアーカイブへリンクしようかなとも思ってしまいます。

jsp全体のソースはこちらにあります。(加工なしのそのまんまです。)

カテゴリを選択したら、そのカテゴリに属するエントリーの中身じゃなくて、まずはエントリーの一覧が出るようにもしたいな。

投稿者 megu : 01:55 | コメント (0)

Struts1.2.4のサンプル
2004年09月27日

Struts1.2.4のValidateのサンプルですが、日本語も表示されて(Japaneseをクリックしてくださいね)、データ型チェックフォームでも、日付は日本の標準書式yyyy/mm/ddでチェックされるのだけれど.....(すばらしいっ!!)

ただ...肝心の日本語の入力が駄目なんです(泣)。

#たとえば名前欄に「めぐ」と入力すると一発でノックアウトです~。

まだ、素のままじゃ使えないかな?
どこかでエンコーディングを指定してあげて、正しくユニコード化してあげないと駄目かな。


あと、Struts1.2.2 and Tomcat5.5.0 上で発生していた、

>jspで余計なパッケージのimport文があると、
>「生成されたサーブレットのエラーです:
>The import java.sql is never used」 ←(例)
>なぁんてエラーになってしまいます。

という件については、Tomcat5.5.2になってから治っているようです。

投稿者 megu : 12:29 | コメント (7)

Tomcat5.5.2
2004年09月17日

っというワケで、Tomcat5.5.2に入れ替えちゃいました。

ここからダウンロードしてきて、解凍して、
$TOMCAT_HOMEを、$HOME/jakarta-tomcat-5.5.0から$HOME/jakarta-tomcat-5.5.2に変更しました。

(もとのディレクトリはそのままおいてあります。すぐに戻せるように...。
私って貧乏症なんでしょうか?こうやって、なんでも取っておくのでディレクトリが増殖していっちゃいます。
そのうちお掃除しなくちゃ。)

インストールはTomcat5.5を入れてみたと同じです。
(1).bash_profileの変更
export TOMCAT_HOME=$HOME/jakarta-tomcat-5.5.2 ←5.5.0だった部分
(2)common/libの下に必要なjarファイルを置いて(jdbc、dbcp関連)、
(3)conf/server.xmlのポートを変更
(4)conf/web.xmlのlistingのデフォルトを変更
(5)bin/setclasspath.shを変更(Tomcat5.5を動かしてみる参照)
CLASSPATH="$CLASSPATH":"$JAVA_HOME"/lib/tools.jar
CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/common/lib/jsp-api.jar
それと、もうひとつ。実は、common/lib/jsp-api.jarへのCLASSPATHの追加もここでしています。(下の行)
NoClassDefFoundErrorになってしまったので...。まったくもって原因がわからないのです。
私は仕事ではTomcatを使っていないのですが、職場のTomcat使い(笑)に聞いたならWindowsであれば自動的にパスが通るのですって?
っというか、デフォルト設定で、なぜこんなところでエラーになるのだろう?

エラー画面↓
tomcaterror.jpg

とりあえず、今は無理くりCLASSPATH設定で走っています。

次は「Tomcat5.5でSSI」の予定です。

投稿者 megu : 13:00 | コメント (3)

Tomcat5.5でMovableTypeのエントリーの表示
2004年09月16日
先日のサンプルJSPをもう少しだけバージョンアップしました。

とても簡単でシンプルすぎるくらいシンプルなのですが、
エントリー一覧から、エントリーの内容を表示するものです。

エントリー一覧

リンクをクリックすると、さらにJSPでエントリーの内容を表示するようにしてみました。
jspの構成は2つからなります。

entry_list.jsp...エントリーの一覧を表示するもの。
entry.jsp...ひとつのエントリーの内容を表示するもの。

entry.jspには引数としてentry_idを与えます。パラメタ名は"id"です。


(1)entry_list.jsp
<% response.setContentType("text/html;charset=UTF-8"); %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<%@ page pageEncoding="euc-jp" %>

<sql:query var="rs" dataSource="jdbc/postgres">
    select  entry_id,entry_title
    from    mt_entry
    where   entry_status = 2
    order by entry_created_on desc
</sql:query>

<html>
<head>
    <title>Entries</title>
    <link rel="stylesheet" href="http://blog.kiyo.com/styles-site.css" type=
"text/css" />
</head>
<body>
    <div id="container">
        <div id="banner">
        <h1><a href="http://blog.kiyo.com/">megu's blog</a></h1>
        </div>
        <div class="content">
            <div class="contenttitle">
                Entry Titles
            </div>
            <c:forEach var="row" items="${rs.rows}">
                <html:link action="entry.jsp?id=${row.entry_id}">
                   ${row.entry_title}</html:link><br />
            </c:forEach>
        </div>
    </div>
</body>
</html>
エントリーリストを表示するjspです。
とりあえずは、エントリーのタイトルだけを、登録日の降順に表示しています。
クエリは

select entry_id,entry_title
from mt_entry
where entry_status = 2
order by entry_created_on desc

の部分です。検索条件の entry_status = 2というのは下書きモードのものを除いています。

リンク部分は、htmlタグを用いています。
<html:link action="entry.jsp?id=${row.entry_id}">
の部分です。
とび先は、entry.jsp、idにqueryから取得したentry_idを指定しています。


(2)entry.jsp
% response.setContentType("text/html;charset=UTF-8"); %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<%@ page pageEncoding="euc-jp" %>

<sql:query var="q_entry" dataSource="jdbc/postgres">
    select  entry_title
            ,case
                when entry_convert_breaks = '0' then
                    entry_text||entry_text_more
                else
                    replace(entry_text ,'\n','<br />\n')
                    ||
                    replace(entry_text_more , '\n','<br />\n')
            end as entry_text
    from    mt_entry
    where   entry_id  =  ?
    <sql:param value="${param['id']}" />
</sql:query>

<html>
<head>
    <title>entry</title>
    <link rel="stylesheet" href="http://blog.kiyo.com/styles-site.css" type=
"text/css" />
</head>
<body>
    <c:forEach var="row" items="${q_entry.rows}">
    <div id="container">
        <div id="banner">
        <h1><a href="http://blog.kiyo.com/">megu's blog</a></h1>
        </div>
    <html:link action="entry_list.jsp">Back</html:link>
        <div class="content">
            <div class="contenttitle">
                ${row.entry_title} <br />
            </div>
                ${row.entry_text} <br />
        </div>
    <html:link action="entry_list.jsp">Back</html:link>
    </div>
    </c:forEach>
</body>
</html>
上はひとつのエントリーの内容を表示するjspです。
ちょっぴり工夫(?)したのは、Convert Line Breaksの指定。
これが指定されている場合は、改行コードをbrタグに置き換えないといけないので。
でも、指定されていない場合はそのままの表示です。
この対応は、クエリ上でやってしまうことにしました。caseを使いました。
entry_convert_breaksが'0'の場合はそのまま
'1'の場合は、改行コードを変換しています。

また、バインド変数の指定ですが、
<sql:param value="${param['id']}" />
こうやって指定します。
(?が出てきた順に割り当てられます。)

※実は、クエリが1行しか値を返さないときの、値のとり方がわかっていないのです(恥)。
なので、forEach使っちゃっていますが、もっと良い方法がみつかったらまた更新することにします。


本当は....

MTのテンプレートをまだまだ使いこなせない私は(使いこなせないどころかちっともわかっていない)、自分でもできそうなsqlタグでのアクセスが楽しくてたまりません。
これなら、いろいろできそうです。
テーブル構成さえわかれば、条件も好き勝手に検索できるし。更新もできます。

でも、本来の目的からははずれちゃっていますね(笑)。
そもそも、MTを使っているのだから.....

このエントリーの目的は、Tomcat5.5とコネクションプール、それからタグライブラリの使い方のメモであって、エントリーを表示するのが目的ではないはず....。でした。

投稿者 megu : 19:16 | コメント (0)

Tomcat5.5 PostgreSQLでDBCP
2004年09月15日
Tomcat5.5のサンプルを使って、MovableTypeのコンテンツを登録してあるPostgreSQLにアクセスしてみることにしました。

参考にしたのは以下のサイトです。
http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jndi-datasource-examples-howto.html

※設定についての説明がTomcat5.5のコンフィギュレーションファイルと異なる部分があった部分と、自分の環境にあわせた部分をメモしておきます。

上記サイトではPostgreSQLに関してはテストはしていないと書いてありますが、問題なく繋がりました。
#ただアクセスして結果を表示するところまでの確認です。
(ConnectionPoolの内部の動作確認(アクセス数とConnection数の確認など)や性能の調査まではしていません。)
(環境)
Fedora Core1 の1ユーザー下にJDK5.0とTomcat5.5をインストール済。
今現在インストールされているもの。
(表示はabc順)
apache-ant-1.6.2
commons-collections-3.1
commons-dbcp-1.2.1
commons-pool-1.2
jakarta-struts-1.2.2
jakarta-taglibs-standard-1.1.1
jakarta-tomcat-5.5.0
jdk1.5.0
pg74.215.jdbc3.jar

※上記のうち、commons-ではじまる3つは今回のDBCPを使うためにダウンロードしきした。
また、JSTLタグ(SQLなど)を使うためにjakarta-taglibs-standard-1.1.1をダウンロードしました。

I.用意

1)JDBC(PostgreSQL7.4用の最新)
下記サイトからダウンロードしてきました。
$wget http://jdbc.postgresql.org/download/pg74.215.jdbc3.jar

こちらは最初からjar形式ですので、そのまま$CATALINA_HOME/common/libの下におきます。
ただ、パスがうまく通らなかったので(私だけ?)、
$CATALINA_HOME/conf/setclasspas.shを修正して無理やりPATHを通しました。
(Tomcat5.5を動かしてみる参照。)


2)DBCP(コネクションプール)を使うには下記の3つのコンポーネントが必要になります。
Jakarta-Commons DBCP
Jakarta-Commons Collections
Jakarta-Commons Pool

私はそれぞれ以下のサイトからダウンロードしました。
http://sunsite.tus.ac.jp/pub/apache/jakarta/commons/dbcp/binaries/commons-dbcp-1.2.1.tar.gz
http://sunsite.tus.ac.jp/pub/apache/jakarta/commons/collections/binaries/commons-collections-3.1.tar.gz
http://sunsite.tus.ac.jp/pub/apache/jakarta/commons/pool/binaries/commons-pool-1.2.tar.gz

tar xvfz で解凍後、jarファイルにCLASSPATHを通しました。
※JDBCと同様のセッティングをしました。
ここでもなぜか$CATALINA_HOME/common/libに置くだけでは駄目。
自動的にjarファイルにclasspathを通すにはどうすればいいのだろう?(だれか教えて悲願モード)



3)サンプルではSQLタグ(これ簡単でわかりやすくて面白い)と、COREタグを使っていますが、これらを利用するために、Jakarta Taglib Standard 1.1をダウンロードしました。
http://www.meisei-u.ac.jp/mirror/apache/dist/jakarta/taglibs/standard/jakarta-taglibs-standard-current.tar.gz

tar xvfz で解凍後、jarファイルをアプリ(今回はDBTtestという名前のディレクトリ)の下のWEB-INF/libの下に置きます。

II.PostgreSQLの設定
PostgreSQLのデフォルトの設定は、UNIXドメインソケット経由のアクセスになっています。
JDBCからアクセスするためには、TCP/IP経由の接続を可能にしなくてはなりません。

/usr/local/pgsql/data/postgresql.confのtcpip_socketの部分を下記のように修正します。

tcpip_socket = true #もともとあるのでコメントをはずすだけ。

III.Tomcatの設定を行う
1)server.xml
jakartaの説明サイトには、server.xmを修正するように記述してあります。
私も最初HOSTタグの中に、Contextタグを置いて、DatabaseのResoureNameを指定したのですが
実行時にResourceNameを見つけられずに接続できませんでした。

$CATALINA_HOME/confの下をよーく見ると(見なくても?笑)、context.xmlというファイルがあります。
「あっ、ここに設定するのかしら?」
と思って開いてみたら、

<Context>
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <WatchedResource>META-INF/context.xml</WatchedResource>
</Context>

っとなっていました。
っというわけで、META-INF/context.xmlに記述することにしました。

META-INF/context.xmlの内容
<Context path="/DBTest" docBase="DBTest"
                        debug="5" reloadable="true" crossContext="true">
        <Logger className="org.apache.catalina.logger.FileLogger"
                prefix="localhost_DBTest_log." suffix=".txt"
                timestamp="true"/>

        <Resource name="jdbc/postgres" auth="Container"
        type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
        url="jdbc:postgresql://127.0.0.1:5432/blog"
        username="scott" password="tiger" maxActive="20" maxIdle="10" maxWait="-1"/>
</Context>

※上記設定は下記の場合を想定しています。
Path:DBTest
postgreSQLのポート:5432
データベース名:blog
ユーザー:scott
パスワード:tiger

2)web.xmlの設定
下記内容を追加します。(こちらはjakartaのサイトのサンプル通りです。)
<resource-ref>
    <description>postgreSQL Datasource example</description>
    <res-ref-name>jdbc/postgres</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

IV.いよいよJSP

サンプルのまんまじゃつまらないので、このブログのEntryを一覧表示してみました。
ソースは下記の通りです。
<% response.setContentType("text/html;charset=UTF-8"); %>
<%@ taglib uri="/WEB-INF/sql.tld" prefix="sql" %>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<%@ page pageEncoding="euc-jp" %>

<sql:query var="rs" dataSource="jdbc/postgres">
    select  entry_title
    from    mt_entry
    order by entry_id
</sql:query>

<html>
<head>
    <title>Entries</title>
    <link rel="stylesheet" href="http://blog.kiyo.com/styles-site.css" type="tex
t/css" />
</head>
<body>
    <div id="container">
        <div id="banner">
        <h1><a href="http://blog.kiyo.com/">megu's blog</a></h1>
        </div>

        <div class="content">
            <div class="contenttitle">
                Entry Titles
            </div>
            <c:forEach var="row" items="${rs.rows}">
                ${row.entry_title} <br />
            </c:forEach>
        </div>
    </div>
</body>
</html>

設定さえできれば、検索はすっごく簡単。
SQLタグってカンタン便利ですね!

クエリを変数として定義するのではなくて、そのまま記述できるというのがいいです。
結果の取得方法も簡単。
面倒なメソッドの記述が一切不要になっています。
これでStatementもResultSetも自動的に制御されちゃうのでしょうか。

MVCできちんと作るのも業務としてはいいかもしれないけれど、ちょこっとりスト出力くらいならこれがわかりやすくていいかも。
(なんとなく、ColdFusionのCFQUERYタグの使い方に似ているようです。)

Tomcat5.5が立ち上がっているときは上記設定のサイトの実行結果を実際にご覧いただけます。
http://www.kiyo.com:8280/DBTest/test.jsp
※実際にこのblogに登録されているエントリーの一覧を動的にご覧いただけます。
 エントリーを追加しても、再構築の必要はもちろんありません(笑)。

投稿者 megu : 07:43 | コメント (0)

Tomcat5.5を動かしてみる
2004年09月09日

Tomcat5.5を少しさわってみました。
PostgreSQLとの連結はうまく行きそうですが、他の部分でまだちょっともたついています。

なにせなかなか時間がとれないのがつらいです。
#夜中の作業なのでどんどん睡眠時間がなくなってしまう~っ!(ひとりごとモード)

キーワード=Tomcat5.5での検索によるアクセスは、私にとって異例のアクセス数だし、
『何か書かなくては...』
とも感じていて、あまり役には立たないかもしれないけれど、メモ書きを残しておきます。

(1)やっぱり日本語がうまくいかない....

jsp中、日本語で書いた文字がすべて化けてしまいます。(変数は大丈夫)

JSPソースはEUC-JPで書いているので、JSP→Servlet生成時にUTF-8へうまく変換できていないのだと思います。


pageEncoding属性を指定してみるもエラーになってしまいます。
<%@ page pageEncoding="charset=euc-jp" %>

HTTPステータス 500 -
type 例外レポート
メッセージ
説明 The server encountered an internal error () that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException: サポートされていないエンコーディングです: charset=EUC-JP
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:50)

「私、なにかイケナイことしたかしら...?」と思い、
euc_jp
EUC-JP
EUC_JP
などといろいろ試してみましたが、すべて駄目。

....っというのは、あとで気付いたのですが、私のオオボケでした(苦笑)。
× <%@ page pageEncoding="charset=euc-jp" %>
○ <%@ page pageEncoding="euc-jp" %>

まったくなにをやってるんだか...
#やっぱり寝不足だわ。

jsperr.png

でも、ボタンのところ....「結果」と表示したかったのに、上手く変換されていません。

う~~ん

その他の上手く表示されている日本語の部分はプロパティファイル(ApplicationResource.properties)を用いての表示です。
こちらは表示するエンコーディング(iso-2022-jp)にあわせてあるので文字化けしません。

※入力文字列の日本語処理についてはこれから...。

(2)jdbcの設定とCLASSPATHの設定

→$CATALINA_HOME/common/libの下にpg74.215.jdbc3.jarを置いてみたけれど、自動的にPATHは設定されなかったです。

$CATALINA_HOME/bin/setclasspath.shを下記のように修正しました。

(43行目付近)
CLASSPATH="$JAVA_HOME"/lib/tools.jar

CLASSPATH="$CLASSPATH":"$JAVA_HOME"/lib/tools.jar
とする。

※setclasspath.shにてCLASSPATHがリセットされてしまうので、
ユーザーの環境変数の$CLASSPATHを無理やり繋げているだけです。

※jdbcについては.bash_profileにて下記のようにCLASSPATHを設定

export  CLASSPATH=$CLASSPATH:$CATALINA_HOME/common/lib/pg74.215.jdbc3.jar

(3)その他メモ
jspで余計なパッケージのimport文があると、
「生成されたサーブレットのエラーです:
The import java.sql is never used」 ←(例)
なぁんてエラーになってしまいます。

『大は小を兼ねる』
だから、
「まぁまぁ、、、いいじゃないの、そのくらい....」
っと言いたいところですが....

参照もしていないものを宣言しちゃうのもなんなので仕方ないでしょう。
これ、以前の環境ではエラーにならなかったよーなきがするのだけれど....気のせい?

#これ、Struts(1.2.2)のサンプルでも同じ現象が出ています。
#Struts Examples のUpload example(/struts-examples/upload/upload.do)がエラーになります。

(追記)
jspから生成されたらしきjavaソースをみつけたので日本語部分の内容を確かめてみました。

($CATALINA_HOME/work/Catalina/localhost/***/org/apache/jsp/struts内にありました。)

すると....JSPではEUCだった日本語はutf-8へきちんと変換されているのです。
↓はutf-8で表示したもの。結果ボタンの部分です。


private boolean _jspx_meth_HTML_submit_0
(javax.servlet.jsp.tagext.JspTag _jspx_th_HTML_form_0, PageContext _jspx_page_context)
throws Throwable {
PageContext pageContext = _jspx_page_context;
JspWriter out = _jspx_page_context.getOut();
// HTML:submit
org.apache.struts.taglib.html.SubmitTag _jspx_th_HTML_submit_0
= (org.apache.struts.taglib.html.SubmitTag)
_jspx_tagPool_HTML_submit_value_property_nobody.get(org.apache.struts.taglib.html.SubmitTag.class);
_jspx_th_HTML_submit_0.setPageContext(_jspx_page_context);
_jspx_th_HTML_submit_0.setParent((javax.servlet.jsp.tagext.Tag) _jspx_th_HTML_form_0);
_jspx_th_HTML_submit_0.setProperty("enter");
_jspx_th_HTML_submit_0.setValue("結果");
int _jspx_eval_HTML_submit_0 = _jspx_th_HTML_submit_0.doStartTag();
if (_jspx_th_HTML_submit_0.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
return true;
_jspx_tagPool_HTML_submit_value_property_nobody.reuse(_jspx_th_HTML_submit_0);
return false;
}
※表示幅の関係で途中改行を挿入した部分があります。


.....っということは、表示に至るまでのエンコーディングが悪いということ?
もしかしたら、サイト全体をutf-8で表示することにしちゃえばいいのかも??

ごめんなさい。もう少し試行錯誤して考えてみます。

思えば私って、なにをやっても何を使っても同じようなことばかり悩んでいるみたい。
MTでも確か文字化け文字化けって騒いでいた記憶があります(^^;
それで、utf-8に落ち着いたんですが....。

P.S.
ひどいソースで作業しているので、公開できずごめんなさい。
人様にお見せできるようなシロモノができたあかつきには載せますので....。

投稿者 megu : 02:32 | コメント (0)

Tomcat5.5を入れてみた
2004年09月05日
Tomcat5.5がリリースされました。

とりあえずインストールしてみることに。

同時にTiger(JDK5.0)も入手。

今までのJavaの環境はそのまま残しておくことにして、あらたにtigerというユーザーを作り、そこで作業することにしました。

(1)Tiger(JDK1.5 改め JDK5.0)をダウンロード
J2SE 5.0をダウンロード
http://java.sun.com/j2se/1.5.0/ja/download.html
こちらのサイトからダウンロードできます。

(2)実行(bin形式のものをダウンロードした場合)
$ ./jdk-1_5_0-rc-linux-i586.bin
実行するだけで展開されます。途中、ライセンスの確認入力があります。確認できたらyesと答えると続行されます。

(3)JAVA_HOMEの設定と、PATHの設定

.bash_profileに下記を追加(bashの場合)
#For    jdk1.5.0
export  JAVA_HOME=/home/tiger/jdk1.5.0
export  PATH=$PATH:$JAVA_HOME/bin
※/home/tiger はユーザーディレクトリ。その直下にjdk1.5.0を展開しました。

.bash_profileを保存したら、
$ source .bash_profile
とやってから、
$ java
と打ち込んでみて、パスが通っていることを確認します。

$ java
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
....以下略

のようにjavaが動けばOK
駄目だったら、環境を確認してくださいねっ。

(4)Tomcat5.5をダウンロード
$ wget http://www.meisei-u.ac.jp/mirror/apache/dist/jakarta/tomcat-5/v5.5.0/bin/jakarta-tomcat-5.5.0.tar.gz

(5)展開
$ tar xvfz jakarta-tomcat-5.5.0.tar.gz

(6)TOMACAT_HOME,CATALINA_HOMEの設定
.bash_profileに下記を追加
#For    TOMCAT
export  TOMCAT_HOME=$HOME/jakarta-tomcat-5.5.0
export  CATALINA_HOME=$TOMCAT_HOME
(7)起動前の設定
$ source .bash_profile
$ cd $CATALINA_HOME/conf

1)server.xmlの修正
$ vi server.xml

server.xmlの83行目付近。私は、Portを8080から8280に修正、あとはデフォルトのままです。
<Connector port="8280"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443" acceptCount="100"
           debug="0" connectionTimeout="20000"
           disableUploadTimeout="true" />

2)web.xmlの修正
70行目付近、listingsのデフォルトがtrueになっているので、falseに修正します。
<init-param>
    <param-name>listings</param-name>
    <param-value>false</param-value>
</init-param>

(8)起動してみる。
$ $CATALINA_HOME/bin/startup.sh
Using CATALINA_BASE:   /home/tiger/jakarta-tomcat-5.5.0
Using CATALINA_HOME:   /home/tiger/jakarta-tomcat-5.5.0
Using CATALINA_TMPDIR: /home/tiger/jakarta-tomcat-5.5.0/temp
Using JAVA_HOME:       /home/tiger/jdk1.5.0

(9)Webブラウザから確認する。
http://www.kiyo.com:8280/
Tomcatのメイン画面が表示されれればOK。

(10)サンプルを動かしてみました。
「っく~!!日本語が化けてしまう~!!」

servletのサンプルRequest Parametersで、日本語を入力すると見事に処理されません。
Tomcat5.0.16では大丈夫だったのですが。

Tigerも影響しているのでしょうか?
ちょっと中身を見る時間が必要かもしれません。

(11)Tomcatをシャットダウンする。
$ $CATALINA_HOME/bin/shutdown.sh

しばらく待つと終了します。
ログを確認するには、
$CATALINA_HOME/logs/catalina.out を参照。

────────────────────────────
(追記)
Tomcat5.5関連で、検索サイトからアクセスの多さにビックリしています。
たしかに"Tomcat5.5"でググると、日本語のサイトはここと、もうひとつくらいしかヒットしませんね....(なぜだろう?もっとあってもよさそうなのに。)

#せっかくお越しいただいたのに、「インストールしました」っていう内容しか書いていなくてごめんなさい。

日本語が化ける件については、Responseのヘッダにエンコーディングをちゃんと指定すればちゃんと表示されるはずです。

じゃ、
「Tomcat5.5って何よ!」
「Tomcat5.0とは何が違うわけ?」
ということに関しましては、とりあえずリンクを設けておきます。

jacarta.apache.orgのChangeLog
http://jakarta.apache.org/tomcat/tomcat-5.5-doc/changelog.html


※翻訳サービスにかけてみました。
※かえってわかりにくいけれど、笑えます...。Tomcatは雄ネコちゃんであります。antはアリだよなぁ~やっぱり。
changelogの日本語訳


も少し要約されていてわかりやすいと思った説明
http://www.jaxmagazine.com/itr/news/psecom,id,17504,nodeid,146.html

大きな変更追加点って、このサイトにも出ているけれど

(1)デザインおよびテストはJ2SE5.0上で動作するということ。
(2)EclipseJDTがバンドルされたので、Tomcat実行時にはJREのみでOKということ。

なのでしょうか。

投稿者 megu : 12:53 | コメント (0)