2005年7月アーカイブ

調布市花火大会

| コメント(2) | トラックバック(0)

土曜日に花火大会行ってきました。

新宿から京王線で京王稲田堤へ。
まだ昼3時半くらいだったけど、河川敷へ行って場所取り。
4時間ほどの待ち時間は屋台で買い物して、飲み食いしてました。

途中大きな揺れを感じながらも何事もなかったかのように花火大会が始まりました。
その模様はwikiに掲載しましたのでご覧ください。
暑くも寒くもない、ちょうどいい気温の中、きれいな花火大会が繰り広げられました。

さて、帰り道にビックリ!
先ほどの揺れは結構大きかったらしく、新宿駅で電車が止まってて立ち往生。。。
そういえば花火始まる前に福岡の友達から心配してメール来たなぁ。
ぜんぜん平気だったからこんなことになってるとは知らず・・・・。

現在、Spring + Struts + Hibernate の連携でBBSを作ろうと思ってるんですが、いろいろと設定が難しいっす。

●Daoについて

SpringのHibernateSupportクラスを継承したDaoを使ってるときのこと。

Bean定義ファイルに


    <bean
        id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
    >
        ~~
    </bean>


と記述して、XDocletにてDaoの定義ファイルを出力。

・・・

あれ? sessionFactory がないって言われた。。。

うーん、sessionFactoryは定義したし、Daoの設定はXDocletで出力できてるはずだし。。。
と、散々悩んだのですが、なんてこたぁない、

  Daoのプロパティ sessionFactory にどの Beanを抽入するのか設定してなかった。

というわけで、クラス定義の前に


    /**
     * @author ueshin
     * @spring.bean id = "categoryDao"
     * @spring.property name = "sessionFactory" ref = "sessionFactory"
     */


という感じで、Daoにも忘れずにプロパティ設定してあげましょう。。。。orz


●必須ライブラリ?

さて、Daoの設定も終わったし、さて、起動!・・・・?

なにやら見知らぬ ClassNotFoundException。

  javax/transaction/TransactionManager

が見当たらないらしい。
javaxってことはコアAPI?
javax.transactionっていうパッケージはあるけどそんなクラスないぞ?
アクセスログ表示Servletのときにこんなエラー出たっけ?

うーん、覚えがない。。。

っていうことは、Javaのインストールがうまくいってないのかなぁ。。。
あれ?でもやっぱしアクセスログ表示Servletはうまく動くぞ・・・?

などなど、いろいろと調べたんですが、結局、

  jta.jar というのがHibernateで(?)必要らしい。

アクセスログ表示Servlet作ったときには、わけもわからず追加してたみたい。。。

他にも、dom4j-1.6.jar、ehcache-1.1.jar、cglib-nodep-2.1.jar あたり(バージョンナンバーはその都度)も必要みたい。
気をつけましょう。。。orz


●Struts設定ファイルにて

Hibernateで、Foreignキー経由で関連するオブジェクトを芋づる式に引っ張ってこれるようにしていたときのこと。

・Strutsを使うので、struts-config.xmlに、


    <controller
        processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
    
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation"
                   value="/WEB-INF/applicationContext.xml" />
    </plug-in>


ってな感じで設定。

・Actionにて、大元となるオブジェクトをHibernate経由で取得。

・jspにForwardして、その後の処理を。

という流れで設定していったのですが、芋づるが、セッション切断のため、とってこれずとのこと。うーん。

調べてみると、リクエストごとにHibernateセッションを保持できる設定を発見。
web.xml に、


    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


を追加すれば、Spring設定ファイル、/WEB-INF/applicationContext.xmlを読み込んで、Hibernateセッションを管理してくれるとのこと。
これだ!と思って、設定してみたんですが、効果なし。。。うーん。

SpringAPIを探ってみると、

This context will automatically refer to the root WebApplicationContext (loaded by ContextLoaderListener/Servlet) as parent.

ContextLoaderListenerで読み込んだWebApplicationContextを自動的に参照する?
ということは、struts-config.xml での設定はどうなるんだべ?

どうやら、struts-config.xml での設定により、WebApplicationContextの設定を上書きして、2重ロードしていたっぽい。
で、Hibernateセッションも「リクエストごと」&「Struts処理内」の2つが読み込まれて、結果、Strutsで「芋づるの元」を読み込んだ時点でセッション破棄、その後はセッション切れてまっせ、というオチ。

では、回避方法は、というと、bean設定が空でもいいので、action-servlet.xml(StrutsのContextLoaderPlugInがデフォルトで読み込むBean設定ファイル)を設置してあげるのがいいみたい。
この場合、struts-config.xml は


    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/>


としましょう。
こうすれば、(何も設定してないけど、)action-servlet.xmlを読みにいってくれます。

applicationContext.xml を読み込むと、2重読み込みになり、action-servlet.xml がないと設定ファイルがないぞエラーとなるので、この方法が妥当かと。


うーん、やっぱし設定が慣れるまで大変そう。
でも、慣れれば後々強力なツールだろうから、がんばるべかねぇ。。。

先日、調子が悪かったノートPCを、OS再インストールしてみました。
それによって、悪かった調子は復旧し、快調な環境が復活したのでした。

さて、開発環境も復旧せねばと思って、JavaからEclipse、プラグインまでを一つずつインストール。
各種プラグインのインストールはうまくいったものの、Doclipse(XDoclet用プラグイン)のみがPreference すらエラーに。
会社のPCは同じバージョンのものをインストールしてあるはずなのにちゃんと動くし。
同梱されているソースコードも追いつつ、Plugin-Projectにしてみて変な記述がないか追いつつ。。。

特に変なところも見当たらず(というかソース追いきれなかった)、会社のと違いがないかをスキを見て(休憩中ですよ、あしからず)調べてみたところ、なんと、

  以前の環境で設定されていたDoclipse用の設定ファイル置き場が、
  設定は残っていたけどディレクトリがなかった。

から。

こんな単純なところでエラーになっているなんて。。。
ないならないで、デフォルトの設定に自動的に戻してくれるなりの処置をしておいてほしいなぁ。。。

なんとも無駄な時間をすごしてしまった数日間でした。。。しょんぼり。

みかログでやってたのでやってみた。

http://www.drakahige.com/CHECK/

各技能レベル評価一覧

以下の表は、技能レベル毎の得点と評価です。
各種技能 得点 評価
自己肯定スキル総合 50
対人スキル総合 50
ストレス対処スキル総合 60

ごく普通みたい。

Light Weight Java

| コメント(0) | トラックバック(0)

かなり以前から目をつけていた本だけど、必要ないだろうと思ってほっていました。
でも、最近モリモリ調査中のJava関連技術を追う中で、この本の一部も読みたくなったので、今度注文してみようと思います。

Light Weight JavaJSF/Hibernate/SpringによるフレLight Weight JavaJSF/Hibernate/Springによるフレ

著者:岡本隆史
出版社:毎日コミュニケーションズ
本体価格:3,200円
楽天ブックスで購入する楽天ブックスで購入する

Hibernateしてみる

| コメント(0) | トラックバック(0)

せっかくアクセスログを取れるようになったので、今度は表示することを考える。

今回の目的は、Hibernateを使ってみること。
というわけで、とりあえずセッションを記録しているテーブルをO/Rマッピング開始。
例によってマッピングファイルはXDocletで出力できるよう、「実践Spring FrameworkJ2EE開発を変えるDIコンテナのすべて」と「WEB+DB PRESS Vol.26」の「XDoclet中心生活案内 by きしだっち」を参考に(というかほぼ丸写し)。

とりあえず普通にServletで作ってみようと思ったけど、意外とSpringで普通のServletができないかも。
SpringMVCはやめて、WebApplicationContextUtils経由でBeanを取り出して利用。
Hibernateマッピングして、Daoを作って、(必要ならビジネスロジック作って、)といろんなステップありますなぁ。
今回はデータがリストで取り出せればいいので、Servletから直接Daoを取得することに。
#あくまでも練習用サンプルだし~~。

セッション一覧表示は比較的簡単にできました。
やっぱり(普通のコメントで恐縮ですが、)普通のオブジェクトとしてアクセスできるようになってやりやすいですな。


続いて、アクセス一覧も表示できるようになって、次にそれに紐付く各種データを表示するように修正していく。
ここで、Hibernateの関連機能を使おうと思ったんですが、意外とてこずってしまった。

○1対1対応 → アクセスログ(RequestUriなど)とアクセス情報(RemoteHostなど)を紐付ける
こちらは本に載っている通り設定、構築していくだけでほぼ完了。

○1対多対応 → アクセスログとヘッダ情報を紐付ける
問題はこちら。
一番の問題は、複合キーを使っているところ。
DB設計時に、アクセスIDとヘッダ番号を主キーとしてしまっていたのだ。
#ヘッダ番号を連番にして、アクセスIDを外部キーにして関連付けすべき?

複合キーを使ったときには、Hibernateへの対応のために様々な追加作業が発生するみたい。
また、この設定のときに、<composite-id>という設定をしないといけないんだけど、XDocletはどうやらこの辺には対応していない?みたいなので、ここだけ手書きになってしまった。
まぁ、今後、複合キーを利用せざるを得ない場面も登場するだろうからいい練習になったといえばなったけど。

あと、1対多関連のときに、取得した情報をソートするのが簡単な様で難しかった。
これには、Comparableを実装して、@hibernate.set sort = "natural" (XDoclet)で、getterの返り値の型を SortedSet にすればいいみたいですね。

ともあれ、アクセスログが見れるようになりました。
本番サーバーにアップしてみると、早くも800近くのアクセスが!と思ったけど、そのほとんどがロボット。。。
たま~~に検索エンジン経由で1~2ページ眺めて帰る人がいました。

見れるようになったけど、切ない・・・・。

引き続き、SpringFrameworkを調べています。

トランザクション周りもSpring管理にすべきか、とか、Hibernateでアクセスログ記録のテーブル群とどう紐付けるか、などなどを考えつつ、AccessLogFilter のバージョンアップを図っているのです。
ちなみに、一番初期がバージョン1.0、先日のSpring管理への移行で1.1とすることにしました。
上記2項目が完了した時点で、1.2でしょうか。

設定ファイルの管理を楽に、をテーマに、XDocletについても調べていまして、やっとBeanファイルとweb.xmlの自動生成ができるようになりました。
Antタスクを追加したant起動で自動生成になるので、とっても便利です。
構築するクラス群はXDocletタグを書くことで一括、その他の設定もXDocletのマージ機能を使うことで一気に生成が可能となりました。
#先のこの辺は世間的にはもう1~2年前の技術ですね。。。

J2SE5.0 になってからアノテーションというものが追加されているので、それらを利用すればXDocletの立場は危ういかも。
うちの先輩きしだっちは、アノテーションを利用して、「無設定Struts」たるものを作ってるし。
ほえ~~~。
#XDocletの設定などは、この人のWEB+DB PRESSの記事を大きく参考に、というかほぼそのまんま利用です。

ここ数年間Javaから遠ざかっていたので追いつくのが大変だ~~!

なんかWikiParserから離れていく一方。。。
もうしばらくはいろんな技術習得に時間をかけそう。
早くもWikiParserの開発日記ではなくなっているけど、ま、いっか。

2012年1月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

月別 アーカイブ

CLOCK

あわせて読みたい

あわせて読みたい

ブログ通信簿

Yahoo!天気情報

AdSense

フィードメーター

RSS feed meter for http://ueshin.happy-camper.st/

トラックフィード

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。
Powered by Movable Type 4.2-ja