2009년 10월 31일 토요일

iReport (JasperReport基盤)

#この記事も個人BLOGネタから移行(せっかくなので最新版を入れてみた)
#以前は jasperreports2.0.1とiReport2.0.1を使ってみた。
#TechDayは金曜日といいつつも一日遅れでm(_ _)m


この記事では最新版 JasperReports3.0.0とiReport2.0.5 を試しました。
iReportにはJasperReports2.0.5が含まれているので特にJasperReports3.0.0を個別に入手する必要はありません。

最近ではOpenSourceが企業で使われることも増えていると思いますが、http://sourceforge.net/でも非常に人気(2008年5月24日現在 rank22)を博している帳票生成エンジンとそのデザインツールについて書いてみました。
日本市場ではウィングアークの製品がポピュラーですがここまで無償のソフトウェアでできてしまうのではかなり驚きです。
ちなみに弊社の101NEOにもこのエンジンを利用した機能をベータとして実装しています。
この機能使って出力した請求書のサンプル。

それではJasperReportsとiReportの入手方法から簡単な使い方まで一気にご説明します!

JasperReportsとは

 pure javaで書かれたオープンソースの帳票作成ツール/エンジン

iReportとは

 JasperReportsで作成する帳票(レポート)プログラムのデザイン・ビルダーツール
 GUIのツールで帳票のデザインや表示項目の属性を設定できる。
 デザインと属性の設定をしては実行(テスト)を繰り返して帳票を作成する。
 実行するときに*.javaが自動生成されてコンパイル・実行される。
 出力できるフォーマットは様々でPDF、XLS、HTML、CSVなど

これらのソフトウェアを入手するためにまずは以下のサイトに行ってユーザ登録を行いましょう。
http://www.jasperforge.org/




◆事前準備(このメール部分は昨年の時点の情報なので変更があるかもしれません)
 ■jasperforgeへのユーザ登録。(無償)

  ※登録すると以下のメールが送られてくる。

--------------------------------------------------------------------------
  件名:User Registration
  内容:
  Welcome XXXXXX,
  Your JasperForge.org membership has been activated. Your account details are as follows:
  Email : XXXXXX@gmail.com
  User Name : XXXXXX
  Here are some tips to ensure you get the most out of JasperForge.org.
  *** 以降、省略 ***
--------------------------------------------------------------------------

 ■ダウンロード
  ・登録したユーザIDで以下のサイトにログイン
  ・JasperReportsとiReportは別々にダウンロードページがあるのでそれぞれ入手。
   左上の「Downloads」タブをクリックするとJasperForge.org Download Centerの
   ページが表示される。



  ・JasperReports3.0.0をクリックして表示された画面の一部



jasperreports-3.0.0.jar を右クリックメニューから保存
サイズ:約2MB

  ・iReport 2.0.5をクリックして表示された画面の一部



iReport-2.0.5-windows-installer.exe を右クリックメニューから保存
サイズ:約47.7MB

◆iReportのインストール
 iReport-2.0.5-windows-installer.exe 起動するとインストールウィザードが立ち上がるので、メッセージに従って画面を進めるだけ。
 必要ディスク容量:65.8MB









◆iReport 2.0.5の起動


デスクトップに出来たショートカットアイコンかスタートメニューから起動。
起動画面は2.0.1の時のハイビスカスのほうがよかったなぁ。。





◆初期画面



iReportの初期設定



◆オプション->設定->「コンパイラ」タブ

コンパイルオプションを設定
「レポートディレクトリをコンパイルに使用」にチェックをした。
初期ではデフォルトコンパイルディレクトリがiReportのホームになっていてテスト実行するたびに*.javaファイルが出力されていくので各レポートディレクトリでコンパイルされるようにした。

◆オプション->設定->「外部プログラム」タブ


テスト実行時に表示するファイルのタイプに応じて起動するアプリケーションを設定しておく。

◆オプション->クラスパス


 ■Oracle接続用にJDBCドライバを設定(ojdbc14.jar)
 ■JasperReports3.0.0(jasperreports-3.0.0.jar)はここで指定しても良いがiReportのlibフォルダでも良いようだ。
  C:\Program Files\JasperSoft\iReport-2.0.5\lib

※以前は日本語フォント用にiTextの日本語フォント(iTextAsian.jar)が必要だったが
 このバージョンでは必要なかった。

◆データソースの設定
 ■データ->接続/データソースの「新規」で作成
  ウィザードでOracleのJDBC接続を作成
  ※ちなみにここで使用しているOracleはExpress Editionといって無償版です。




レポートの作成


それでは実際にレポートを作成してみましょう。

ファイル->レポートウィザードからちょちょいのちょいという感じで
データベースから取り出したデータをPDFレポート出力するアプリケーションが
出来てしまいました。

まずはテンプレートの選択。無しでもOK。

接続先データソース(画像の例ではOracleのデモテーブルSCOTT)を選択。
Design qu... とあるボタンをクリックしたらSQLデザイナーみたいな画面が表示される。
スキーマSCOTTを選択するとSCOTTにあるテーブルが一覧表示される。
レポート出力したい対象のテーブルを選択してドラッグ&ドロップ。
参照整合性制約が張ってあるテーブルは勝手にJOINされる。
制約がない場合でもJOINしたいテーブルに同じ名前のカラムがある場合はカラムをドラッグしてJOIN対象テーブルにドラッグするとリレーションの線が引かれる。
取得したいカラムをチェックボックスで選択。

ウィザードを次に進めると自動的にSQLクエリ文が生成される。
ちょっとデータの並び順を変えたい場合など自動生成されたクエリ文にORDER BY句を追加して変更もできる。
GROUP BYはウィザードメニューでできるようだ。





次にレイアウトの指定。


指定はここまで最後に「ポチッ」と完了ボタンを押すと出来上がり。



ツールのアイコンメニューの右端にある「実行(有効な接続)」を「ポチッ」と押してテスト。





生成された帳票はiReport JasperViewerで表示される。
左上の保存アイコンをクリックして保存する際に好きなデータフォーマットで保存が可能だ。



iReportで作ると以下のファイルが生成される。
ファイル名.jrxml ・・・テンプレートJRXMLファイル
ファイル名.jasper ・・・コンパイル済みテンプレート、jasperファイル
※上記のファイルをアプリで操作するためのclassがjasperreportsにはたくさん用意されているのでそれらを使うことでWebアプリケーションなどで非常に簡単にPDF出力する帳票アプリケーションが作成できる。

帳票ツールにかけるコストを下げたいユーザにとっては魅力あるOSSだと思います!

java web start 簡単jvm cache viewer


JRE5.0になってから、JWSの Javaアプリケーションキャッシュビューア のショートカットが自動的に作成されなくなりました。
起動す るためには、JRE5.0の場合、JRE/JDK の bin/javaws.exe を実行しますが、JRE6.0の場合は JRE/JDK の bin/javaws.exe だけでは起動できないみたいです。(引数を指定しないとダメ・・でも引数には便利なものもありますね。)
以下のリンクを使用すると、出すことができるみたいです。



こんなのあるの・・・知らなかった。手軽でいいですね、これ。
興味本位に このjnlpのファイルの中を見てみると

<?xml version="1.0" encoding="utf-8"?>
<!-- Jump specific JNL file for launching the player -->
<player/>

う、 これだけですか・・・。そんな仕様があったとわ。

exewrap change from jar file to .exe

exewrap

exewrap は実行可能 JAR ファイルから EXE ファイルを生成するツールです。 Windows 環境で Java アプリケーションをより簡単に起動できるようにします。 JETGCJ のようにネイティブコードにコンパイルするツールではありません。 JSmoothlaunch4j と同じように Java アプリケーションの起動を助けるツールです。


特徴
  • JAR ファイルを EXE ファイル内に含めることができます。
  • タスクマネージャに java.exe ではなく EXE ファイル名が表示されます。
  • スプラッシュスクリーン表示に対応しています。
  • Pack200アーカイブ形式でJARファイルを圧縮するため、ファイルサイズが半分程度に小さくなります。
  • 一時ファイルを出力しません。クラスファイルや画像リソースなどは、すべて EXE ファイルから直接メモリにロードされます。
  • 生成される EXE ファイルのサイズは、JAR ファイルのサイズ + 30 KB と軽量です。
  • Windows サービス(NTサービス)を作成することもできます。
JSmooth や launch4j など素晴らしいラッパーがすでに存在しているにもかかわらず、 なぜ新しいラッパーを自作したのか。それは JSmooth, launch4j それぞれに、 少しだけ満足できない部分があったからです。 GUI インターフェースを備え とても使いやすい JSmooth ですが 出力される EXEファイルサイズが +380KB 以上と非常に大きいのが不満でした。 また、タスクマネージャに java.exe/javaw.exe が表示されるためプロセスを判断するのが困難です。 launch4j の出力する EXEファイルサイズは +20KB と非常に小さいのですが、 残念ながら launch4j も java.exe/javaw.exe を使用します。 launch4j では、オプション設定でプロセス名を EXEファイル名にすることができるようになっていますが、 実は、これ java.exe/javaw.exe をテンポラリに EXEファイル名で別名コピーしてから起動しているんですね。 一時ファイルを吐き出してしまうのも、なんとなく嫌だったのです。
ライセンス (exewrap は BSD ライクなライセンスを採用しています。)
Copyright (C) 2005-2008 HIRUKAWA Ryo. All rights reserved.

ソースコード形式であれバイナリ形式であれ、変更の有無に関わらず、 以下の条件を満たす限りにおいて、再配布および使用を許可します:

1. ソースコード形式で再配布する場合、上記著作権表示、 本条件書および下記責任限定規定を必ず含めてください。

2. バイナリ形式で再配布する場合、上記著作権表示、本条件書および下記責任限定規定を、 配布物とともに提供される文書 および/または 他の資料に必ず含めてください。

本ソフトウェアの実行により生成されたファイルの利用および配布について一切の制限を行いません。上記著作権表示、本条件書、下記責任限定規定を含まずに、本ソフトウェアの実行により生成されたファイルを完全に自由に利用および配布することができます。

本ソフトウェアは HIRUKAWA Ryo によって、"現状のまま" 提供されるものとします。本ソフトウェアについては、明示黙示を問わず、商用品として通常そなえるべき品質をそなえているとの保証も、特定の目的に適合す るとの保証を含め、何の保証もなされません。事由のいかんを問わず、損害発生の原因いかんを問わず、且つ、責任の根拠が契約であるか厳格責任であるか (過失その他) 不法行為であるかを問わず、HIRUKAWA Ryo も寄与者も、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用から発生した直接損害、間接損害、偶発的な損害、 特別損害、懲罰的損害または結果損害のいずれに対しても (代替品または サービスの提供; 使用機会、データまたは利益の損失の補償;または、業務の中断に対する補償を含め) 責任をいっさい負いません。

OSCashe (フィルタキャッシュ、フラグメントキャッシュ、データキャッシュ)

http://www.opensymphony.com/oscache/

1. フィルターキャッシング

 フィルターキャッシングは、動的コンテンツと静的コンテンツ(PDFや画像ファイルなど)をキャッシングするのに使われます。

  動的コンテンツでは、特定のJSPやサーブレットの結果をまるごとキャッシングしたい場合などに使用されます。静的コンテンツでは、ファイルをメモリに キャッシングさせることにより、HDDへのアクセスをなくし、高速にファイルをロードすることができます。これはApacheなどにもある機能で、大きい ファイルがある場合や、アクセス数が非常に多い場合に有効です。

 サンプルでは、静的コンテンツのキャッシングを使用しています。全てのgifファイルをメモリにキャッシュさせる設定を行い、「profile.gif」という画像をキャッシングしています。

 以下にソースと実装方法を記述します。

「web.xml」の一部
<filter>
    <filter-name>CacheFilter</filter-name>
    <filter-class>
        com.opensymphony.oscache.web.filter.CacheFilter
    </filter-class>
    <init-param>
        <param-name>time</param-name>
        <param-value>3600</param-value>
    </init-param>
    <init-param>
        <param-name>scope</param-name>
        <param-value>application</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>CacheFilter</filter-name>
    <url-pattern>*.gif</url-pattern>
</filter-mapping>

 上記の設定により、1時間(3600秒)の間、applicationのスコープで全てのgifファイルをキャッシングすることができます。この方法ではcom.opensymphony.oscache.web.filter.CacheFilterというフィルタークラスを使用します。

 また、ここでは静的コンテンツの例を取り上げましたが、動的コンテンツをキャッシングする場合には、url-patternに特定のJSPやサーブレットのURLを入力すればOKです。

  ただしその場合、パフォーマンス改善としては非常に有効ですが、そのコンテンツの項目全てがキャッシングされてしまうため、一部の情報は最新のものを表示 したい場合などには向きません。このサンプルでは、全体をキャッシングするページはないため使用していませんが、画面の仕様によっては非常に有効な使い方 となります。

 サンプルアプリケーションを動作させる方は、下の値をカスタマイズしてキャッシングの動作を確認してみて下さい。

上記「web.xml」のカスタマイズ項目
timeキャッシュされる期間を秒で設定
scopeキャッシュが有効なscopeをsession/applicationの何れかで設定
url-patternキャッシュ対象のコンテンツのURLパターンを設定

2. フラグメントキャッシュ

 OSCacheのカスタムタグを使用すれば、JSPの特定の部分をキャッシングすることができます。サンプルでは、「現在の日時」をJSP内のコードで生成しており、これを毎回生成しないようにキャッシングする実装をしています。

 以下にソースと実装方法を記述します。「web.xml」に、OSCacheのカスタムタグを使用できるように設定します。

「web.xml」の一部
<jsp-config>
    <taglib>
        <taglib-uri>http://www.opensymphony.com/oscache</taglib-uri>
        <taglib-location>/WEB-INF/oscache.tld</taglib-location>
    </taglib>
</jsp-config>

 次に、キャッシングしたいJSPの箇所をOSCacheのタグで囲みます。

例文
<cache:cache time="60">
    ・・・ jsp content ****
</cache:cache>

 ここでは、60秒(1分)間キャッシングするという設定をしています。

 しかし、「新しく"分"の単位が切り替わる度にキャッシュを破棄したい」という様な場合には不向きです。この場合にはtime属性ではなく、cron属性にcron式を設定します。これはUNIXのスケジューラとして利用されている「cron」の設定方法と同じ様に、キャッシュの期間を設定することができる大変強力で便利なものです。詳細は、OpenSymphonyのサイトを参照して下さい。

 上記の例文をcron式で記述したのが下記になります。

「profile.jsp」のソース一部
<%@taglib prefix="cache" uri="/WEB-INF/oscache.tld" %>
・・・・・・・・・・
    <cache:cache cron="* * * * *">
        現在の日時:<%= new java.text.SimpleDateFormat(
"yyyy/MM/dd hh:mm").format(new java.util.Date()) %><br>
    </cache:cache>

 サンプルアプリケーションを動作させる方は、下の値をカスタマイズしてキャッシングの動作を確認してみて下さい。

上記cacheタグの属性のカスタマイズ項目
timeキャッシュされる期間を秒で設定します
cronキャッシュされる期間をcron式で設定します

3.データキャッシュ

 DBから取得した情報などをキャッシングするには、JSPではなくサーブレットで処理する必要があります。com.opensymphony.oscache.base.Cacheクラスを利用して実装することが可能です。サンプルでは、Profileというデータクラスを生成しそのインスタンスをキャッシングしています。

 以下にソースと実装方法を記述します。

「OSCacheSampleServlet.java」のソース一部
public static final String
    PROFILE_CACHE_KEY = "profile_cache_key";
public static final String
    CACHE_OBJECT_KEY = "__oscache_cache"; //cache.propertiesに定義

/**
 * @param req
 * @param res
 * @throws ServletException
 * @throws IOException
 */
public void service(HttpServletRequest req, HttpServletResponse res) 
    throws ServletException, IOException{
    
    Cache cache = (Cache)getServletContext()
                      .getAttribute(CACHE_OBJECT_KEY);

    Profile profile = null;
    try{ //キャッシュからプロフィールを取得
        profile = (Profile)cache.getFromCache(PROFILE_CACHE_KEY,30);
    }catch(NeedsRefreshException nre){
        //キャッシュに存在しない or キャッシュの期限切れ
        profile = new Profile();
        profile.setName       ("山田 太郎"             );
        profile.setAge          ("18"                     );
        profile.setComment  ("はじめまして"           );
        profile.setCacheDate(new SimpleDateFormat(
            "yyyy/MM/dd hh:mm:ss").format(new Date()));
        //キャッシュに登録
        cache.putInCache    (PROFILE_CACHE_KEY,profile);
    }

    req.setAttribute("profile",profile);
req.getRequestDispatcher( "profile.jsp" ).forward(req,res);

}

 CacheクラスはOSCacheのキャッシュシステムそのものを表現したクラスです。この クラスを利用して、キャッシュシステムにオブジェクトを格納したり、取り出したりすることができます。このクラスのインスタンスはサーブレットコンテキス トに格納され、そのキー名は「oscached.properties」に記述されているcache.key(デフォルトでは"__oscache_cache")となります。

 キャッシュに格納されたオブジェクトを取り出すには、

getFromCache(key名,キャッシュの期間(/秒))

 逆に格納するには

putInCache(key名,キャッシュ対象Object)

 を使用します。上記処理では、30秒でキャッシュが破棄されることになります。

 getFromCache()を実行する場合は、NeedsRefreshExceptionがthrowされる可能性があります。これはcacheが存在しない場合やキャッシュの有効期限切れの場合にthrowされる例外ですので、必ずそれを想定して例外処理を実装して下さい。

 サンプルではその例外をcatchすると、新しいオブジェクトを生成しています。ここは通常のシステムであればDBからの取得処理になることが多いはずです。

 サンプルアプリケーションを動作させる方は、下の値をカスタマイズしてキャッシングの動作を確認してみて下さい。

上記cacheタグの属性のカスタマイズ項目
getFromCachの第二引数キャッシュされる期間を秒で設定します

oscached.propertiesの設定方法

 ここまでは、特に「oscache.properties」の設定について触れていませんでした。サンプルやテストで動作させる程度であれば特に初期設定でも問題有りませんが、状況に応じて独自の設定をすることが望ましいのは言うまでもありません。

 ここでは、主なプロパティを一覧で紹介したいと思います。

「oscached.properites」の主なプロパティ
プロパティ名説明
cache.memoryメモリにキャッシュするか?(falseならHDにキャッシュ)
cache.keyサーブレットコンテキストに格納されているCacheオブジェクトのキー名
cache.capacityキャッシュのサイズ
cache.pathキャッシュが保存されるディレクトリパス
cache.unlimited.diskディスクへのキャッシングを無制限に行うか?(falseなら行わない)

まとめ

 今回はOSCacheを用いたWEBコンテンツのキャッシングについて紹介しました。しかし、「キャッシングの有効性は理解したが、実務のどの場面で使用したらいいか分からない。」といった方も多いのではないでしょうか?

  まず、Webのパフォーマンスチューニング全般に言えることですが、最初にしなければいけないことは、どのページを表示する時/どの処理を行う時に遅い と、ユーザが不満を持っているかを調べることです。これを行わずに、闇雲にキャッシング処理を入れたところで自己満足で終わってしまいます。

 そして、その処理やページの一部分をキャッシングしても問題ないかを考えてみて下さい。

  例えば、非常に複雑なSQLで統計情報を取得し、CVSでダウンロードするような処理があったとします。これを、「その時点での最新の統計」ではなく、 「10分ごとに最新になる統計」という仕様にして、「データキャッシュ」または「フィルターキャッシュ」を利用し、10分間キャッシングすることができれ ば、WEBサーバーとデータベースサーバーの負荷が軽減されるはずです。

 他にも、非常にアクセスが多い人気サイトなどの場合、日記の様な コンテンツの更新をすると、「更新を受け付けました。更新が反映されるまでには数分程度かかります。」などと表示して、キャッシュを使っている例も見受け られます。こういったものも、「データキャッシュ」を使えば実装することが可能です。

 以上、長くなりましたが、OSCacheはOpenSymphonyのサイト(英語)以外ではあまりドキュメントが存在しないため、この記事がこれから使ってみようという方のお役に立てば幸いです。

参考資料

  1. opensymphony oscache

OSCacheのキャッシングでWebアプリケーションのパフォーマンスを向上する

http://codezine.jp/article/detail/296


はじめに

 多数のクライアントからのリクエストを処理しなければならないWEBシステムでは、パフォーマンスの問題が出てくることが珍しくありません。

  パフォーマンスの問題を解決する技術の一つとして「キャッシング」技術があります。これは動的コンテンツの生成結果をメモリにキャッシュ(一定期間保存) し、その間に受けたリクエストに対してはキャッシュの値を返すことにより、生成の処理数を減らすことができるというものです。また静的コンテンツでも、 PDFや画像ファイルなど比較的大きいファイルをHDDではなくメモリにキャッシュすることにより、ファイルロードを高速化することができます。

  他のパフォーマンスの問題解決方法と比べて大きなメリットは、ビジネスロジックの修正を最小限に抑えることができ、デグレーションを防ぐことができるとこ ろです。ただし、キャッシュされている間は古い情報がレスポンスとして渡されることになり、常に最新の情報を必要とする場面には向いていないことに注意し なければなりません。

 本稿では、J2EEキャッシングフレームワーク「OSCache」を使ったWEBコンテンツのキャッシング方法を、サンプルを用いて紹介します。

対象読者

 JavaのWebプログラミングを行ったことがある、もしくは、JavaのWebプログラミングに興味のある方を対象としています。

必要な環境

 サンプルアプリケーションは、J2SE Development Kit 5.0 Update 6、Tomcat5.5.12にて動作確認をしています。環境についての詳細や設定方法については、「サーバサイド技術の学び舎 - WINGS」にある「サーバサイド環境構築設定」を参照してください。

OSCacheとは

 「OSCache」は、OpenSymphonyのプロジェクトとして開発が進められているJ2EEのキャッシングフレームワークです。高機能で様々な形のキャッシングを行うことができ、OpenSymphonyのサイトから入手することができます。

 他にもよくJava-WEBで使われているキャッシングライブラリとして、EHCacheJBoss Cacheなどいろいろありますが、、大規模なシステムで使われるクラスタリングのサポートや、現在でも安定して開発が進められていること、そしてなにより使いやすさの観点から、今回はこのOSCacheライブラリを紹介したいと思います。

 OSCacheには複数のキャッシュの種類があります。主に使う場面を含めて、以下の表にまとめました。

キャッシュの種類
種類概要使う場面(例)
フィルターキャッシュ指定されたURLパターンのリソースをキャッシングJSP、GIFなどURL単位でキャッシングしたい場合
フラグメントキャッシュページの一部分をキャッシングJSPの一部分をキャッシングしたい場合
データキャッシュ任意のオブジェクトをキャッシングJSP以外のビジネスロジックなどでオブジェクトをキャッシングしたい場合

 全てのキャッシュに関して、以下のファイルが必要になります。配置場所を参考にして、適切な場所に配置して下さい。

動作に必要なファイル
ファイル名ファイルの種類配置場所
oscache-x.x.x.jarJARファイルクラスパスに内包
oscache.propertiesキャッシュ動作設定ファイルクラスパスに内包
oscache.tldカスタムタグ設定ファイルWEB-INF配下など

サンプルアプリケーションの概要

 サンプルアプリケーションはユーザーのプロフィールを表示するものです。概要は次の通りです。

画面遷移図
画面遷移図
  1. 「index.html」からリンクをクリックすることにより、サーブレットが動き「profile.jsp」が表示されます。
  2. 「profile.jsp」から[最新表示]ボタンをクリックすることにより、サーブレットが動き「profile.jsp」が再表示されます。
  3. 「profile.jsp」から[戻る]ボタンをクリックすることにより、「index.html」の画面に戻ります。

 サンプルには以下のファイルが含まれています。

サンプルの主要ファイル
ファイル名説明
index.html トップページ
profile.jspプロフィール表示画面
OSCacheSampleServlet.javaプロフィール表示画面での処理を行うサーブレット
Profile.javaプロフィールを表現するデータオブジェクト
oscache.propertiesOSCacheの設定ファイル
web.xmlサーブレット、フィルター、カスタムタグなどの設定ファイル

サンプルのキャッシング処理

 「profile.jsp」では大きく3つの表示情報が存在し、それぞれを別の方法でキャッシングしています。

3種類のキャッシング処理
3種類のキャッシング処理

ehcache

http://ehcache.nadai.jp/features.html


Java Runtime Environment (JRE) のキャッシュを消去する

         Java Runtime Environment (JRE) のキャッシュを消去する


このトピックは、次の製品に当てはまります。:
  • プラットフォーム: Windows 98 , Windows ME , Windows 2000 , Windows XP
  • ブラウザ: All Browsers
  • Java バージョン: 1.4.2_xx , 1.5.0 , 6.0

Java Plug-in のキャッシュを消去して、最新バージョンの Java アプリケーションやアプレットがロードされるようにします。

6.0 1.5.0
Java Plug-in のキャッシュを消去するには、次の手順に従います。
  1. 「スタート」 - 「コントロールパネル」の順にクリックします。

  2. コントロールパネルで Java のアイコンをダブルクリックします。
    「Java コントロールパネル」が表示されます。
「Java コントロールパネル」
  1. 「基本」タブで、「インターネット一時ファイル」の「設定」をクリックします。
    「一時ファイルの設定」ダイアログボックスが表示されます。
「一時ファイルの設定」ダイアログボックス
  1. 「ファイルの削除」をクリックします。
    「一時ファイルの削除」ダイアログボックスが表示されます。
「一時ファイルの削除」ダイアログボックス
    キャッシュを消去するオプションには、次の 3 つあります。
    1. ファイルの削除
    2. アプリケーションの表示
    3. アプレットの表示
  1. 「一時ファイルの削除」ダイアログボックスで、「了解」をクリックします。
    注: これにより、ダウンロードしたすべてのアプリケーションとアプレットがキャッシュから削除されます。

  2. 「一時ファイルの設定」ダイアログボックスで、「了解」をクリックします。
    注: 特定のアプリケーションやアプレットをキャッシュから削除する場合は、「アプリケーションの表示」または「アプレットの表示」のチェックボックスをオンにします。

1.4.2
Java Plug-in のキャッシュを消去するには、次の手順に従います。
  1. 「スタート」 - 「設定」 - 「コントロールパネル」の順にクリックします。
  2. コントロールパネルで Java Plug-in アイコンをダブルクリックします。
    「Java Plug-in コントロールパネル」が表示されます。
  3. 「キャッシュ」タブをクリックします。
  4. 「クリア」ボタンをクリックします。
    確認メッセージが表示されます。
  5. 「はい」をクリックします。
  6. 「適用」をクリックします。
関連トピック: Web ブラウザのキャッシュを消去する

Ymirとは

Ymirとは

2009-08-27 11:47:05
Ymir(ユミル)は、フィルタ指向のシンプルなWebアプリケーション構築フレームワークです。

元々はYmirはKvasir/SoraやTuigwaaにおいてWebアプリケーション的なプラグインを作成するためのフレームワークとして作成されましたが、組み込み用としてだけでなくStrutsのような単独のWebアプリケーション構築フレームワークとしても利用可能です。

Ymirの特徴は以下のとおりです。

フィルタ指向
デフォルトのビューテンプレートはZPT(Zope Page Template)
コンポーネント管理機構としてSeasar2.4を内蔵
Seasar2.4のHOT deployに対応
リクエスト駆動の自動生成機能
フィルタ指向

Webサーバの基本的な機能は、Webブラウザからのリクエストに応じてコンテンツを返すことです。

JavaのServletAPIを使ったWebアプリケーションでは、リクエストされたURIに対応するコンテンツをサーブレットがレスポンスとして返します。

コンテンツが静的なものであれば、サーブレットは単にURIに対応するファイルの内容をそのままレスポンスとして返します。例えばTomcatでHTMLコンテンツをリクエストした場合は、DefaultServletがリクエストに対応するHTMLファイルの内容を返します。

コンテンツが動的なものであれば、サーブレットはURIに対応するファイルの内容をレンダリングして結果をレスポンスとして返します。例えばTomcatでJSPコンテンツをリクエストした場合は、JspServletがリクエストに対応するJSPファイルの内容をレンダリングして、結果であるHTML等のコンテンツを返します。

ところでJSPやVelocityなどのページテンプレートを使って動的なコンテンツを生成させる場合、テンプレートをレンダリングするために必要なオブジェクトを予めHttpServletRequestの属性等として用意しておく必要があるケースがあります。

例えばStruts+JSPで構築されたWebアプリケーションの場合、JSPをレンダリングするために必要な前処理はStrutsのActionクラスの中で行ないます。

Ymirではページテンプレートのための前処理をより透過的に行なえるよう、サーブレットの処理をサーブレットフィルタでフックする形でJavaオブジェクトのメソッドを呼び出せるようにしています。

具体的には、

リクエストを受け取る
サーブレットがページテンプレートをレンダリングしてレスポンスを作成する
レスポンスを返す
という処理の流れの中で、2.の直前にJavaオブジェクトのメソッドを呼び出せるようになっています。すなわち、処理の流れは

リクエストを受け取る
リクエストされたURIに対応するJavaオブジェクトのメソッドを呼び出す
サーブレットがページテンプレートをレンダリングしてレスポンスを作成する
レスポンスを返す
のようになります。

Ymirがリクエストを受け取ってからレスポンスを返すまでの処理の詳細については、Ymirの処理フローを参照して下さい。

デフォルトのビューテンプレートはZPT

Ymirの中心的な処理は、MVCアーキテクチャで言うところのコントローラの処理です。ビューの処理、すなわちビューテンプレートをレンダリングして最終的なレスポンス(通常はHTML)を作成する処理については、サーブレットとして動作するテンプレートエンジンによって行なわれます。

YmirはStrutsと同様にさまざまなテンプレートエンジンと組み合わせて利用できるようになっていますが、デフォルトのテンプレートエンジンとしてZPT(Zope Page Template)エンジンを内包しています。

ZPTはPythonで書かれたWebアプリケーションサーバZopeで用いられているテンプレート形式です。ZPTの特徴は次のとおりです。

HTMLを壊さない形でレンダリング命令を埋め込めるため、WebアプリケーションサーバにデプロイしなくともWebブラウザでHTMLのデザインを確認できる
命令体系がシンプルである
複数画面のデザインを統一させたり繰り返し利用されるHTML部品を定義したりするためのマクロ機能を持っている
ZPTの詳細については「Zope Page Templates Reference」、「Zope Page Template リファレンス」、「Using Zope Page Templates」、「Page Template を使う」等を参照して下さい。また、Ymirで利用できるZPT記述の詳細については「ZPTテンプレート」を参照して下さい。

コンポーネント管理機構としてSeasar2.4を内蔵

YmirはDI+AOPコンテナであるSeasar2.4を内蔵しています。これによって、Webアプリケーションを構成するJavaオブジェクトのライフサイクル管理を簡単に行なうことができます。

Seasar2.4のHOT deployに対応

YmirはSeasar2.4のHOT deploy機能に対応しており、アプリケーションのソースコードに適用した変更が動作中のアプリケーションに即座に反映されます。これによってインタラクティブなアプリケーション開発が可能になります。

リクエスト駆動の自動生成機能

Ymirでは、ビューテンプレートとしてZPTを使った場合、ZPTテンプレートからさまざまなJavaクラスを自動生成することができます。

この自動生成処理は通常リクエスト駆動で行なわれます。すなわち、リクエストされたURIに対応するZPTテンプレートが新規に作成されたか更新されていた場合にテンプレートが解析され、解析結果に基づいてJavaクラスが生成されます。この機能によって、インクリメンタルかつインタラクティブにアプリケーションを開発することが可能になります。

自動生成機能の詳細については「自動生成機能」を参照して下さい。

SDLoader 쓸만한데...

*SDLoaderとは
開発およびデモ用に開発されたWebコンテナです。
特徴:
・Jar1つでWebアプリを起動できます。
・コンパクトで複雑なディレクトリ構造が不要なため、アプリケーションに組み込みやすくなっています。
・mainメソッドから、Webコンテナをインスタンス化できます。
・プログラマチックにアプリケーションを追加したり、web.xmlを変更したりできます。
・1つのアプリケーションに対して、ドキュメントルートを複数指定できます。

なお、SDLoaderはServletAPIをフル実装していません。(例えばUserPrincipalなどは未実装です)

*必要な環境
JRE1.5以上

*アーカイブの説明
SDLoaderには、次のアーカイブが用意されています。

libフォルダ以下には、各種SDLoaderのアーカイブが入っています。

lib/sdloader.jar・・・Servlet2.5のServetエンジンのみ。JSPは使用できません。
lib/sdloader-jsp20.jar・・・Servlet2.4+JSP2.0
lib/sdloader-jsp21.jar・・・Servlet2.5+JSP2.1

これらは、開発環境に入れて使う用途が主な目的のアーカイブです。推奨はsdloader-jsp21.jarです。

また、standaloneフォルダ下には、スタンドアロンで動かすためのファイルセットが入っています。

standalone/sdloader・・・Servlet2.5のServetエンジンのみ。JSPは使用できません。
standalone/sdloader-jsp20・・・Servlet2.4+JSP2.0
standalone/sdloader-jsp21・・・Servlet2.5+JSP2.1

各フォルダ下に入っているwebappsフォルダにwarファイルをいれ、batファイルで起動できます。
スタンドアロンの場合、起動後にタスクトレーにアイコンが表示されます。
アイコン右クリックから、shutdownを選ぶと停止します。

libフォルダとスタンドアロンの違いは、swt.jarが入っているかどうかの違いだけ、
基本機能には変わりがありません。

**使用方法
SDLoaderは、大きく分けて「開発利用」と「スタンドアロン利用」の2つの使い方があります。

**開発利用
開発に利用する場合、まずはじめに適当なJavaプロジェクトを作成します。
つぎに、SDLoaderのアーカイブをプロジェクト内におき、クラスパスを通します。
SDLoaderにはJavaEEのAPIが入っているため、クラスパスに通した時点で
JavaEEのAPIが利用できるようになります(つまりHttpServletやHttpServletRequestなどを
使ったコーディングができます)

eclipseの場合、クラスパスに通した後、jarファイルを右クリック->実行->Javaアプリケーションを選択します。
一覧からServlet25ProjectTemplateToolを選ぶと、WEB-INFやweb.xmlなどの雛形、
SDLoader起動のコードの雛形がプロジェクト内に出力されます。

雛形を作らなかった場合は、WEB-INFやweb.xmlを作成したあと、mainメソッドを持ったクラスを作成します。
mainクラスには、SDLoaderを起動するコードを書きます。
最低限必要なコードは、以下のようになります。

public static void main(String[] args){
  SDLoader sdLoader = new SDLoader(8080);
  WebAppContext webApp = new WebAppContext("/test","WebContent");
  sdLoader.addWebAppContext(webApp);
  sdLoader.start();
}


SDLoader sdLoader = new SDLoader(8080);
の部分は、Webコンテナのインスタンス化です。
SDLoaderの引数にポート番号を渡すことで、そのポートでSDLoaderを起動します。
SDLoader sdLoader = new SDLoader(true);
のようにして引数にtrueを渡すと、空いているポート番号を探して起動します。(自動ポート検出)

次の
  WebAppContext webApp = new WebAppContext("/test","WebContent");
の部分は、デプロイするWebアプリのインスタンス化です。
第一引数は、デプロイするアプリのコンテキストルートです。直接warファイルを指定することも出来ます。
第二引数は、ドキュメントルートディレクトリです。通常はWEB-INFが入っているフォルダを
指定します。

SDLoaderは通常のJavaプログラムとして動くため、ドキュメントルートを探す場合は、起動した
ディレクトリを基点に探します。
eclipseの場合、プロジェクトフォルダが起点になります。

従って、
HogeProject
 |-src
 |-WebContent
    |-WEB-INF
    |    |-lib
    |    |-classes
    |    |
    |    |-web.xml
    |
    |-index.jsp    

という構成の場合、「HogeProject」が起点になるため、ドキュメントルートとして
"WebContent"を指定します。

作成したwebAppを、
  sdLoader.addWebAppContext(webApp);
で、SDLoaderに追加します。
WepAppContextは、複数追加可能です。

最後に、
  sdLoader.start();
で、起動します。

起動後はブラウザからアクセスします。
なお、自動ポート検出で起動すると、SDLoaderの起動ポートはログからしか分かりません。
従って、sdLoader.start();のあとに、次のコードを書いておくと便利です。

  Broser.open("http://localhost:"+sdloader.getPort()+"/hoge/inde.html");

Browser.openは、引数にURLを入れるとそのURLをブラウザで開きます。上記コードで
アプリの開始画面URLを組み立てて渡すと、起動後にそのポートの開始画面を開くことが出来ます。

**スタンドアロン利用
スタンドアロンの場合は、特に設定する項目はありません。

webapps
lib/sdloader-jspXX.jar
sdloader-jspXX.bat
sdloader-jspXX.exe

のファイル配置にし、batファイルもしくはexeから起動できます。

webapps以下には、
・warファイル
・ディレクトリ
・ROOTディレクトリ
・コンテキストXMLファイル
の4つが配置できます。

warファイルを置くとその場でwarが展開され、warファイル名がコンテキストパスになります。
warファイルを交換したい場合は、展開されたディレクトリを削除してwarファイルを入れ替え、
再起動します。

ディレクトリの場合は、そのディレクトリがコンテキストパスになります。

ディレクトリの名前を「ROOT」とすると特殊フォルダとして扱われ、コンテキストパスが"/"になります。

コンテキストXMLファイルとは、
<Context path="/example" docBase="../../example/webContents"/>
のような形で記述したXMLファイルです。
これを配置すると、そのファイルに従ってコンテキストパスおよびドキュメントルートを設定できます。
pathはコンテキストパスの設定で、docBaseがドキュメントルートになります。
path省略可能で、省略すると、このファイル名がコンテキストパスとなります。
docBaseは、.(ドット)表記からはじめるとwebappsフォルダからの相対パス、それ以外は絶対パスとなります。

なお、どの配置に関しても、WEB-INFおよびweb.xmlがない場合でもエラーにはなりません(警告は出ます)
従って、単純にディレクトリを作成すれば、HTTPサーバとして利用することが出来ます。

2009년 10월 27일 화요일

m2eclipse 사용법


Eclipseのバージョンは3.4.2でWTPが最初から入っている「Eclipse IDE for Java EE Developers」を使っていますが、3.4.x系なら同じようにできると思います。Pleiadesを使って日本語化していますので、デフォルトの英語のままの方は適当に読み替えてください。

全体的にWebからダウンロードする作業が多いので結構時間がかかりますが、2回目以降はもっと早くなります。

まだ使い始めたばかりの拙い知識で書いているので、間違いやもっとよい方法がある場合はぜひぜひご指摘ください。

1. Mavenとは

MavenとはApache Software Foundationで開発されているJavaのソフトウェアプロジェクト管理ツールです。

Maven は Project Object Model (POM) という考え方に基づき、プロジェクトのビルド、テスト、ドキュメンテーション、成果物の配備など、プロジェクトのライフサイクル全体を管理します。プロジェクトのビルドツールである Ant とは異なり、Maven はプロジェクト管理ツールとして、プロジェクトに関する色々な情報を POM に集約し、POM の情報に基づきプロジェクト全体を管理します。

MavenとはMaven-TECHSCORE-

最近のJavaの開発ではデファクトスタンダードになりつつあるようです。

私自身Mavenを使い始めたのは結構最近です。というのも、EclipseやNetBeansのようなIDEを使っているとビルドやテストやパッケージ化などもサポートしてくれるためあまりMavenのよさがわからなかったことやpom.xmlを書くのが面倒くさかったりしたからです。しかし、ライブラリ管理やIDEを起動しなくてもビルドやテストを行うことができるなど多くのメリットがあることが実際に使ってみるとわかると思います。

ちなみにm2eclipseのデフォルトのローカルレポジトリは「C:\Documents and Settings\ユーザ名\.m2」になります。



2. m2eclipseのインストール

1. Eclipseを起動して、「ヘルプ」>「ソフトウェア更新」を選ぶ

2. 「使用可能なソフトウェア」タブを開く

3. 「サイトの追加」ボタンを押して、「http://m2eclipse.sonatype.org/update」を入力してOKを押す

4. 下記のようにインストールするものにチェックを入れた後に、「インストール」ボタンを押す

f:id:Kishi:20090228154917j:image

5. 後はウィザードに従って進めていくとインストール開始

6. インストール終了すると再起動を求めるダイアログが出てくるので、「はい」を選んで再起動する

これでm2eclipseのインストール作業は終了です。

再起動をすると以下の図のようにインデックスの更新が行われますが、ダウンロードを伴うので少し時間がかかります。インデックス更新の途中で中止したりして失敗するとこれから紹介するm2eclipseの機能が一部うまく動かないことがありますが、その場合はEclipseを再起動してインデックスの更新を再度行えばうまくいくかもしれません。

f:id:Kishi:20090228160252j:image


Mavenコンソールが表示されない場合、コンソールの右上の「コンソールを開く」を押して「Maven Console」を選択してください。

以下のような警告が出た場合、

f:id:Kishi:20090228161341j:image

eclipse.iniの一行目に

-vm
C:\Program Files\Java\jdk1.6.0_11\bin\javaw.exe

を追加してください。JVMの位置は自分の環境に合わせて変更してください。今回の紹介する内容ではこの作業は行わなくてもよいです。


ちなみにEclipseを起動するたびにインデックスの更新が行われます。初回よりも速くなりますが、インデックスの更新が行われるのがわずらわしい人は以下のように設定すると起動時に更新が行われなくなります。

1. 「ウィンドウ」>「設定」を選ぶ

2. 「Maven」を選択して、「始動時にレポジトリー・インデックス更新をダウンロード」のチェックを外して「OK」ボタンを押す

手動で更新を行う場合は、「設定」の「Maven」>「インストール」を開いて「ローカル・レポジトリー索引再作成」ボタンを押してください。



3. Mavenプロジェクトを作成

「ファイル」>「その他」を選択して、以下のように「Maven Project」のウィザードを開始してください。

f:id:Kishi:20090228163107j:image

今回はアーキタイプを使わずにプロジェクトを作成するので、一枚目のウィザードで「シンプルなプロジェクトの作成」にチェックを入れてください。

次のウィザードの必須部分である「グループ Id」に「test」、「アーティファクト Id」に「first-maven」と入力して「完了」ボタンを押すとプロジェクトが作成されます。

グループ Id(groupId)はプロジェクトを一意に識別する名前で、プロジェクトのルートパッケージ名を指定するのが一般的です。

アーティファクト Id(artifactId)はプロジェクトの成果物の名前です。JARやWARにつける名前を指定してください。

作られたフォルダ構成がMavenプロジェクトの一般的なフォルダ構成です。別のフォルダ構成でもMavenを使うことができるようですが、特別な理由がない限りはこの構成に従ったほうがよいです。

first-maven
├  pom.xml
├  target
└─src
    ├─main
    │  ├─java
    │  └─resource
    └─test
        ├─java
        └─resource
名前役割
pom.xmlプロジェクトの情報を持つファイル
target成果物を置くフォルダ
src/main/javaJavaのソースコード
src/main/testJavaのテストコード

特に重要なのはpom.xmlで、テキストエディタで開いてみると以下のような情報が現在書いてあります。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>first-maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

ここにプロジェクトの依存ライブラリやビルドの情報などを追記していくのがMavenプロジェクトの特徴です。



4. ライブラリの追加と削除

m2eclipseを使うとセントラルレポジトリに登録されているライブラリを簡単に追加することができます。

今回はCommons Langを追加してみます。

以下の図のようにプロジェクトの上で右クリックをして「Maven」>「依存関係の追加」を選択してください。

f:id:Kishi:20090228170028j:image

ダイアログの入力フォームに「commons-lang」と入力すると、インデックスの作成がうまくいっていれば、インクリメンタルにセントラルレポジトリに追加されているライブラリを検索できます。

ライブラリはデフォルトではもっとも最新のバージョンのものが選択されていますが、Commons Langは変わった名前のバージョンのものがひとつあるのでツリーを開いて以下のように2.4を選択してOKを押して下さい。

f:id:Kishi:20090228170628j:image

OKを押すとライブラリと依存ライブラリのダウンロードを開始します。ローカル・レポジトリーにすでにある場合は高速にライブラリの追加を行うことができます。

pom.xmlを開くと以下のようにdependencies要素が追加されていることがわかります。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>first-maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
  	<dependency>
  		<groupId>commons-lang</groupId>
  		<artifactId>commons-lang</artifactId>
  		<version>2.4</version>
  	</dependency>
  </dependencies>
</project>

Mavenではこのようにdependencies要素の中にdependency要素を追加していくことで依存ライブラリの管理を行います。

今回はフォームから検索して追加しましたが、pom.xmlに手動でdependency要素を追加しても依存ライブラリが自動的に追加されます。

依存ライブラリを削除する場合はpom.xmlをテキストエディタで開いてそのdependency要素の部分を消して保存するとOKです。

実際に作業をしてもらうとわかると思うのですが、これだけ簡単にライブラリの管理ができるのは画期的です。PerlCPANなどとは異なり、新しいライブラリを追加してもその影響範囲はプロジェクトに限定されるのもいいところだと思います。



5. アーキタイプでWicketの開発を始める

アーキタイプ(archetype)とは原型という意味で、Mavenではこれを使うことでフレームワークなどを利用したアプリケーションを作る際の最低限の構成を持ったプロジェクトを作成でき、開発の開始の時間的なコストを大幅に削減することができます。

「ファイル」>「新規」で「Maven Project」を選択してください。

「ファイル」>「その他」を選択して、以下のように「Maven Project」のウィザードを開始してください。

今回は一枚目のウィザードの「シンプルなプロジェクトの作成」にチェックを入れないでください

二枚目のウィザードで「カタログ」に「Nexus Indexer」を選択してフィルターに「wicket」と入力すると1つのアーキタイプに絞り込まれると思います。

f:id:Kishi:20090228174928j:image

「Show the last version of Archetype only」のチェックを外すと最新のライブラリのバージョン以外のアーキタイプを選択することができます。今回はバージョン1.3.5をのアーキタイプを選択して「次へ」を押してください。

f:id:Kishi:20090228175210j:image

最後のウィザードは「グループ Id」には「test.wicket」、「アーティファクト Id」には「first-wicket」、「パッケージ」には「test.wicket」を入力して「完了」ボタンを押してください。

これでWicketの最小限の設定とライブラリを持つプロジェクトが作成されました。

Javaコンパイラのバージョンが1.4になっている場合があるので、そのときはプロジェクトの上で右クリックして「プロパティ」を選択して、「Javaコンパイラー」のコンパイラ準拠レベルを変更してください。

m2eclipseでアーキタイプを使うことのデメリット

今回のwicket-quick-startの場合だとプロジェクト・ファセットの動的Webプロジェクトのバージョンが2.4で作られてしまいます。

Tomcatだと6以降のバージョンでないとこれに対応していないため、デプロイを行うことができません。開発環境によってはこの設定だと困るという人もいると思いますが、後から変更することもできないようです。コメントにて変更方法のご指摘がありました。


6. jettyをサーバとして起動

先ほど作成したwicket-quick-startのアーキタイプを利用したプロジェクトは動的ウェブプロジェクトとして作られているので、WTPで扱うことができます。Tomcatなどのサーバにプロジェクトを追加することができますが、Mavenでは自分でインストールする必要なしにJettyプラグインを用いることでサーバを利用することができますので、今回はこれを利用してみます。

メニューの「実行」>「実行の構成」を選択します。

左側の一覧の中から「Maven Build」の上でダブルクリックを押すと新規構成を追加することができます。

f:id:Kishi:20090228180728j:image

「名前」を「Jettyで実行」に変更してください。

次に「基底ディレクトリ」を、「ワークスペースの参照」で先ほどの「first-wicket」プロジェクトを選択してください。

「ゴール」を、「選択」を押して上部のフォームに「jetty」と入力してフィルタを実行してから「jetty - org.morbay.jetty:maven-jetty-plugin」の「run」を選択してください。

f:id:Kishi:20090228181158j:image

「実行」ボタンを押すと必要なプラグインのダウンロードが開始します。

ダウンロードが終了してJettyサーバが起動したら、ブラウザからhttp://localhost:8080/first-wicket/ にアクセスすると以下のようなWicketで生成されたページを見ることができます。

f:id:Kishi:20090228181726j:image



7. 結びに

今回はライブラリ管理についてしか触れていませんが、この点だけでもMavenを導入するメリットが十分あることがわかっていただけたのではないかと思いますのでぜひMavenを試してみてください。

ちなみにMaven2を扱った日本語の本では、2年前なので若干内容が古いかもしれませんが以下の本が入門書としてよいと思います。

Apache Maven 2.0入門 Java・オープンソース・ビルドツール
野瀬 直樹 横田 健彦
技術評論社 
売り上げランキング: 48734


おまけ:セントラルレポジトリにないライブラリを追加する方法

ActiveObjectsの場合

ActiveObjectsはdev.java.netで公開されていますが、ここの場合ですとMavenの公開方式にしたがっているレポジトリのため以下のようにrepositories要素を追加することですることでライブラリを追加することができます。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>first-maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <repositories>
      <repository>
        <id>maven2-repository.dev.java.net</id>
        <name>Java.net Repository for Maven</name>
        <url>http://download.java.net/maven/2/</url>
        <layout>default</layout>
      </repository>
  </repositories>
  <dependencies>
    <dependency>
      <groupId>net.java.dev.activeobjects</groupId>
      <artifactId>activeobjects</artifactId>
	  <version>0.8.2</version>
    </dependency>
  </dependencies>
</project>


Butterfly Persistenceの場合

Butterfly PersistenceはMaven形式のレポジトリを提供していません。こういうライブラリをMavenで扱う場合、ローカルレポジトリに手動でライブラリを追加することで対処します。

Mavenをインストールした状態で、Betterfly PersitenceのJARをダウンロードしてからコマンドプロンプトで以下のコマンドを実行してください。

mvn install:install-file -Dfile="C:/java/lib/jenkov-butterfly-persistence-5.0.0.jar(JARのパス)" -DgroupId=com.jenkov.butterfly -DartifactId=butterfly-persistence -Dversion=5.0.0 -Dpackaging=jar

ローカルレポジトリに登録した後は以下のようなdepencency要素をpom.xmlに追加すると依存ライブラリを追加できるようになります。

<dependency>
  <groupId>com.jenkov.butterfly</groupId>
  <artifactId>butterfly-persistence</artifactId>
  <version>5.0.0</version>
</dependency>