今週のNews(06/01/30) [News]
○Product
- Eclipse SDK 3.1.2 released.(06/01/26)
http://www.eclipse.org/downloads/ - Hibernate 3.1.2(06/01/28)
OR mapping tool
http://www.hibernate.org/344.html - Hammurapi 4.0.1, 3.18.3
コード分析ツール
Hammurapi 以外の機能拡張もおこなわれ、コード分析以外の分野も含めた統合環境へ拡張されているようです。
いつの間にか機能もコンポーネント化され、ドキュメントも豊富になっている模様です。
ライセンスはコンポーネントごとに LGPL, GPL とわかれていますので、ご注意ください。
http://www.hammurapi.biz/hammurapi-biz/ef/xmenu/productguide.html - Luntbuild 1.3
ビルドツール
http://www.javaforge.com/proj/summary.do?proj_id=70
○一般
- 料金据え置きで通信速度を3倍に――ウィルコム
http://plusd.itmedia.co.jp/mobile/articles/0601/27/news051.html - 組織に変化を起こすための9つの原則
http://blogs.itmedia.co.jp/koji/2006/01/9_43f5.html?itmh060130 - 気になるのは「PHSの残すインフラ」
ドコモはPHSサービス終了を「2007年第三四半期」と発表されたようですが、その時期はモバイル版WiMAXの商用化と目される時期に重なるようです。次世代無線インフラは、PHSのインフラに近くマイクロセル向きであるため、現在のPHSのインフラを転用することを狙っているといるのではという考えは同感です。いずれにせよ、次の無線インフラを制することにより、現在の勢力図も大きく変わるのではと思ってます。各社の次の一手に期待しています。
http://www.itmedia.co.jp/enterprise/mobile/articles/0602/01/news023.html
○Articles
- Developing Ajax Applications That Preserve Standard Browser Functionality
http://dev2dev.bea.com/lpt/a/470
AJAX アプリケーション開発での back/forward button の利用に関して - ・Joe Walker(DWR author) on using AJAX with DWR
プレゼンテーションの映像
http://www.theserverside.com/news/thread.tss?thread_id=38726
- How DWR manages type conversions
- How security is addressed in DWR
- Where DWR is typically used
- How AJAX factors into accessible applications
- The impact of AJAX on the network bus - The AJAX Toolkit Framework (ATF) Project
http://www.eclipse.org/proposals/atf/
Eclipseコミュニティは、AJAX Toolkit Framework (ATF) プロジェクトの提案(IBMさん主導のようです。)を受け入れたようです。様々なAJAXプロジェクトのツールがモジュールとして提供されるようです。(Dojo, Zimbra, and OpenRico are mentioned specifically)。このフレームワークは大きく2つのコンポーネントから構成されることが提案されています。
- ATF Tools:JavaScript の編集、デバッグ、インスペクションをおこなう
- ATF Personality Framework:特定のAPIのサポートをおこなう
AJAX の機能自体は、フレームワーク、コンポーネントとして提供されつつありますので、どのような位置づけの開発環境として実現されるのか興味深いです。
J2EE design decisions [Java]
J2EE design decisions(written by Chris Richardson)
http://www.javaworld.com/javaworld/jw-01-2006/jw-0130-pojo_p.html
■概要
POJOs in Action(Manning Publications, January 2006) からの抜粋
「Patterns of Enterprise Application Architecture」の考え方をJ2EEの世界をベースに、より実装に近い観点で論述された記事と考えてもらうとわかり易いかもしれません。新規性に富んだ話は多くはなかったですが、よく纏まった記事かと思います。
■要約
最近 POJOs、ライトウェイトフレームワークの話題が賑わせていますが、盲目的にそれを利用することは、EJB で犯した問題を繰り返すことになると警告しています。どんな技術でも強みと弱みがあり、それを理解してデザインを決定することが重要であると述べています。
大きく3つの選択肢があると述べています。
- EJB2 style
- POJO と ライトウェイトフレームワークの組み合わせ
- EJB 3
この記事では、デザイン決定のための5つの観点を指摘しています。
Decision 1: Organizing the business logic
- オブジェクト指向のアプローチか(Domain Model pattern)
- 手続き型のアプローチか(Transaction Script pattern)
Decision 2: Encapsulating the business logic
- EJB session facade(Figure 4.)
- POJO facade(Figure 5.)
- Exposed Domain Model pattern(Figure 6.)
Decision 3: Accessing the database
- JDBC directly(良い選択ではない)
- 開発やメンテナンスは難しく、コストがよりかかる。
- SQLのポータビリティの観点で欠けている
- JDBCコードの記述は時間がかかり、エラーを起こしやすい - object/relational mapping frameworks (such as JDO and Hibernate)
- SQL mapping frameworks (such as iBATIS)
Decision 4: Handling concurrency in database transactions
- Isolated database transactions
- Optimistic locking
- テーブルにバージョンカラムを追加する方法が一般的
- JDO や hibernate のようなフレームワークは Optimistic locking の機能を提供 - Pessimistic locking
- 更新処理の最初に共有データをロックする方法
- JDO は設定オプションとして Pessimistic Locking の機能を提供
- Hibernate は locking object のためのプログラミング可能なAPIを提供
Decision 5: Handling concurrency in long transactions
Maven 1.x TIPS & References [BuildProcess]
maven 1.0.2 を再度利用してみようと考えています。今までの備忘録を整理しなおしてみました。
○TIPS
- ビルドした日時をつける
project.propertiesに以下行を追加
maven.xdoc.date=left
maven.xdoc.date.format = yyyy/MM/dd HH:mm z
- Pluginのダウンロードおよびインストール
以下のコマンドでプラグインをダウンロードすると、ローカルのリポジトリにプラグインが反映される。次回 maven コマンド実行時に更新されたバージョンのプラグインが利用可能
maven plugin:download -Dmaven.repo.remote=http://maven-plugins.sf.net -DartifactId=maven-findbugs-plugin -Dversion=0.8.2
- CVSのパスワードファイル .cvspass の生成の方法
maven -Dpassword=XXXXXXX changelog:create-cvspass
- FAQ
xdocs/faq.fml を記述して、(.xmlでないことに注意) project.xml に以下の行を追加することにより、site GOAL が実行されたときに、FAQページが生成される。
<report>maven-faq-plugin</report>
- 単一のコードのテスト
maven -Dtestcase=org.foo.bar.MyTest test:single
○References
・Maven
- Maven
http://maven.apache.org/ - Maven Frequently Asked Questions
http://wiki.astrogrid.org/bin/view/Astrogrid/MavenFAQ - codehaus.org の maven 関連のページ
http://wiki.codehaus.org/maven/FrontPage - Maven Mailing List
http://java2.5341.com/8.html - Maven Plugins
MavenのPluginの一覧です。
http://maven.apache.org/reference/plugins/plugins.html
http://docs.codehaus.org/display/MAVEN/Maven+Plugin+Matrix
・CruiseControl
- CruiseControlのホームページ
CruiseControlはMatin Fowler and Matthew Foemmel提唱のContinuous Integration に基づいた継続的なビルドプロセスを支援するためのフレームワークです。
http://cruisecontrol.sourceforge.net/ - CruiseControl
thoughworks の CruiseControl 関連のページです。不明な点はここで調べることが可能です。
http://confluence.public.thoughtworks.org/display/CC/Home
・ CheckStyle
- CheckStyle
Checkstyle は、プログラマがコーディング標準に従った Java コードを書くようにすることを支援する開発ツールです。
http://checkstyle.sourceforge.net/ - CheckStyle日本語訳
http://www003.upp.so-net.ne.jp/kaz-taka/checkstyle/3.5/index.html
・Jelly
- Jelly
http://jakarta.apache.org/commons/jelly/
Jellyは、Java・XMLベースのスクリプトエンジンです。maven の1.x スクリプトは jelly をベースに記述されています。2.x では変更されました - Jelly日本語訳
jakarta.jp による jelly の日本語訳のページです。
http://jakarta.jp/commons/jelly/
今週のJava関連News(06/01/23-) [JavaNews]
Products
- ProGuard Java Optimizer and Obfuscator 3.5 (06/01/24)
http://proguard.sourceforge.net/ - Eclipse Checkstyle Plug-in v4.1.0
http://eclipse-cs.sourceforge.net/ - Hibernate 3.1.1
http://www.hibernate.org/ - ・JUnit 4.0 RC2 (unofficial?)
http://people.csail.mit.edu/saff/junit4.0rc2.zip - iBATIS Java 2.1.7 released. - O/R Mapping tool - (06/01/21)
http://ibatis.apache.org/ -
Maven 2.0.2
→先日 2.0.2 が 公開されていましたが、1/25 時点では、2.0.1 に差し替えられています。なにか致命的な問題でも含まれていたのでしょうか?(念のため。proxy の cache を参照していないことは確認しています。)
→1/27時点では、2.0.2に戻っていました。特に明確な告知はないようです。???
http://maven.apache.org
REST
- REST入門
http://yohei-y.blogspot.com/2005/04/rest_23.html - Webの「正しい」アーキテクチャ
http://www.atmarkit.co.jp/fdotnet/opinion/yoshimatsu/onepoint05.html
RESTのポリシー
- Webサイトが保持していて、外部に公開される内容には、すべて(論理的な)URI(URL)が付いていなければならない。
- Webサイトへのアクセスは、HTTPのPUT(Create)、GET(Read)、POST(Update)、DELETE(Delete)で行い、それぞれ処理内容に合わせた結果が返されなければならない。
- Webサイトへアクセスした結果返されたものがリソースの表現(Representation)であり、ページからページへの遷移が状態の遷移(State Transfer)と見なされる。
Articles
- IBM離脱、Zimbra主動へ - ApacheのAJAX Toolkit Framework Project
http://pcweb.mycom.co.jp/news/2006/01/16/091.html - Call SOAP Web services with Ajax, Part 2: Extend the Web services client
AJAXを利用した ブラウザベースの SOAP Web Service client をどのように実装するかに関して
http://www-128.ibm.com/developerworks/webservices/library/ws-wsajax2/?ca=dgr-jw22SOAP-AJAX2 - EAの生みの親、ザックマン氏語る
http://www.itmedia.co.jp/enterprise/articles/0601/24/news003.html - ・BEA WebLogic Server 9.1 Documentation
http://edocs.beasys.co.jp/e-docs/wls/docs91/index.html - Using AJAX to Improve the Bandwidth Performance of Web Applications
http://webperformanceinc.com/library/reports/AjaxBandwidth/index.html
AJAX はネットワーク大域の利用を増加させるため、これをどのよう削減させるかは課題となっています。この記事では 50% 削減をゴールとして考えていましたが、いくつかの小リファクタリングと100行以下のコード改善により、アプリケーション全体のネットワーク大域の61%を減らすことができたようです。
パフォーマンスに影響を及ぼすポイントは、参考になりました。基本的な改善の手法は変更された必要な情報のみを送信することであり、AJAX だからといったも本質的なところはなんら変わりないかと思います。
(このレポート否定するわけではありませんが、)
しかしながら、生のJavaScript コードを修正して、60%改善できたと
いわれても、絶対値にはあまり意味が感じられませんね。
今後、AJAXの利用はライブラリやフレームワークを介して利用する動きがますます強くなるかと思われます。もちろん、ライブラリ、フレームワークも必要な情報のみを送信する方式が望ましいですが、その方式に近づけるためには、ライブラリ・フレームワークの上で動作する業務アプリケーションの動作を前提にした仕掛けが必要となります。汎用的なライブラリ・フレームワークでどこまでできるのか、また、細かい制御を考慮すればするほど、開発も複雑化することが推察されます。どこを落としどころにするかは難しそうですね。 - ・JSFのGUI開発本格化へ? - Sun Java Studio Creator 2いよいよリリース
http://pcweb.mycom.co.jp/news/2006/01/26/340.html
SJSC 2には、現在 GlassFish のコードネームで開発が進められている
「Sun Java System Application Server Platform Edition 8.1_02」
が同梱されています。SJSC 2 で利用できるJSF のバージョンは(ホームページを少し見た限りは)記載されていないようです。GlassFish に同梱されていた JSF は開発中の 1.2 であったため、1.2 の可能性が高いですが、SJSCは JSF に注力された開発環境であるにも関わらず、具体的な宣伝がなにも記載がないから 1.1 の可能性もあるかなと思ってます。(調査中)
Maven 2 [BuildProcess]
Draft
はじめに
- Maven2 がリリースされ、はや半年が過ぎようとしています。Maven1.x の開発に比べると、Maven2 の開発に注力されているようですので、リリース後早速移行を試みましたが、いくつかの問題が立ちふさがりなかなか移行できずにいます。
まずは、いったん整理して、Maven 1.x で稼動する環境を再構築する方向に方向転換しようと思います。体裁は構わず記録だけは整理だけしておこうと思います。
Mavenとは、Maven1.x からの変更点に関して
- Maven はプロジェクトマネージメントシステムです。
プロジェクトのビルドプロセス、結果レポートやドキュメントの集約を支援します。
○Maven1.0からの変更点:
http://maven.apache.org/maven2/maven1.html
- 速く、小さい
maven のコアモジュールは ant, jelly, xerces 等を使用せず、小さく、依存関係は疎になりました。 - ライフサイクルの規定
maven1.0 で使用していたゴールの前後処理である prereqs, preGoals and postGoals は不要になりました。
ビルドは、洗練された定義されたフェイズに基づきます。具体的には、通常のゴールの名前(compile, test, install)は使用されないことも意味します。 - 複数プロジェクトをハンドリングするための組み込みの仕組みを提供
プロジェクトに対する同一のゴールを使用し、結果を集約させることができます。 - SNAPSHOTをハンドリングする方法の向上
今までは、SNAPSHOTはディフォルトでは日ごとに1回だけアップデートすることをチェックしていました。今後は、ビルドごと、特定のインターバルごと、そして、無効にすることが可能です。 - プロパティファイルは使用しません
全てのプラグインの設定は、POMの中で設定されます。 - maven.xmlは使用しません
プラグインはより簡単にビルドし統合できます。そして、ビルドするためのスクリプトを書く唯一の手段となります。 - Jellyは使用しません。
プラグインは、主に Java で記述しますが、他のスクリプト言語を提供もされています。このリリースでは、jelly に良く似た XMLのシンタックスをサポートするスクリプトフレームワークである Marmalade を サポートします。Marmalade は ant task の統合をおこない、jelly との互換レイヤをもちます。 - リポジトリレイアウトの向上
maven2.0は、既存のそして向上したリポジトリレイアウトをサポートします。分割された構造によりよりいっそうリポジトリを理解しやすくなるでしょう。
○MOJOってなに?
http://blog.goo.ne.jp/ikkoan/e/faee35340ce18875ead57930d40698e0
- Maven2.0 では Plugin は Java もしくはスクリプト言語(現状 Marmalade というスクリプト言語のみ利用可能です。)で記述されます。Maven の Plugin は、基本的にコマンドオブジェクトです。Maven Plugin を生成するためには、Mojo interface を実装する Java Class(Maven のPOJOのことを指す) を作成します。 このインターフェイスには、パラメータおよび戻り値をもたない1つの実行メソッド、そしていくつかのログ用メソッドを定義されます。
そして、Plugin に対して 追加の情報を提供する Plugin Descriptor を記述する必要があります。内容にはライフサイクル やパラメータが含まれます。この Descriptor で定義されたパラメータは、Maven により 実行時に Plugin 内のメンバ変数に Inject されます。Maven は、Plugin Descriptor の生成およびPluginをパッケージングするためのツールを提供することにより、このプロセスを簡略化します。あとは、あなた自身の Plugin を アノテートするだけです。残りはMavenがハンドリングしてくれます。
○透過的な依存性
- Maven2 では再帰的にプロジェクトの依存関係を解析します。
具体的には、プロジェクトで参照しているライブラリが、さらに依存しているライブラリを自動的に取り込むことが可能です。透過的な依存性は、ビルドプロセスを単純にすることに大変役に立ちます。
さらにいくつかの依存関係の解決にも取り組んでいます。1つはサイクリックな依存関係の解決です。もう1つはバージョンの競合の解決です。 詳細は Maven2 の WEBサイトでご覧になることができます。
maven2 では、4つの依存性のスコープを用意されています。
- compile:全てのクラスパスで有効となります。
- runtime:実行時およびテスト時のクラスパスで有効となります。
- test:テストケースのコンパイルおよび実行時のクラスパスで有効となります。
- provided:コンパイル時には必要だが、実行時にはコンテナから提供されるライブラリを意図しています。(例としては、servletapi が挙げられます。)
インストール・設定に関して
○Javaプロジェクトの雛形の作成
- maven2を使用するための最初のステップは、maven2が要求する初期設定、ディレクトリ構成を整える必要があります。以下のコマンドを入力することにより、テンプレートに従った初期設定およびディレクトリ構成を出力することが可能です。
m2 archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
※Webプロジェクトの場合:-DarchetypeArtifactId=maven-archetype-webappを末尾に付与することにより、Webプロジェクトのテンプレートを出力することが可能です。
http://tidus.ultimania.org/wiki/index.php?Maven2
○各プロジェクトで共通の設定
- ${user.home}/.m2/settings.xmlに記述する
maven2 では必要なプラグイン群をインターネットに接続し取得するため、プロクシの設定が事前に必要となります。プロクシの設定を本ファイルに記述することに関しては留意しておく必要があります。
settings.xml のリファレンスは以下をご覧ください。
http://maven.apache.org/maven2/maven-settings/settings.html
pom.xml のリファレンスは以下をご覧ください。
http://maven.apache.org/maven2/maven-model/maven.html
TIPS
○maven のコンパイル時に JDKのバージョン、javac のソース互換性(-source)、ターゲットの指定(-target)をおこなうには?
- -source, -target として JDK1.5 を想定した場合には、以下のようになります。
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
...
</build>
詳細に関しては以下のURLをご覧ください。maven2のFAQですので、一読されることをお勧めします。
http://maven.apache.org/maven2/general.html