Zennin's Blog


プログラマやってるZenninのBlogです。Sun SPOTや、iPhoneとEMONSTER(S11HT)の記事が中心になる予定です。702NK(Nokia 6630)・705NK(Nokia N73)、W-ZERO3&アドエスも、契約は解除しちゃいましたが、ハードは使っています。

[Java]クラス構造がまる見えに! UDocでJavaをダイナミックに分析する

クラス構造がまる見えに! UDocでJavaをダイナミックに分析する

さっそく試してみました。以下は、Java SE 6のsrc.zipを解析したものです。
UDocサンプル

"Organize layout"を実行すると、このようにきれいにレイアウトされます。実行するたびにレイアウトが変わりますので、好きなのを選べばいいでしょう。

解析元は、ソースファイル(上のようにzip圧縮してても可能)の他、クラスファイル、JavaDocファイルも使えます。ですから、ソースが無くても使えるわけです。

1つ残念なのが、直接イメージファイルに落とせないことです。ですから上では、画面をキャプチャしています。あるいは、印刷が使えますので、PDFに落とすという手も良いかもしれませんが。

ちょっとした解析にはおもしろいと思います。

  1. 2007/03/20(火) 22:46:43|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

[Java]Javaアプリケーションの作成(4)

Netbeansのスキーマからエンティティクラスを作成する機能ですが、idが以下の設定になってしまいます。

@Id
@Column(name = "ID", nullable = false)
private Integer id;


本当は、こうなって欲しいのに。

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;



手で直すしかないのでしょうか。
  1. 2007/03/08(木) 21:50:52|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

[Java]Javaアプリケーションの作成(3)

Java Persistence API + H2徹底解説 - EJBじゃなくてもDBへ永続化」で紹介されていたのは、エンティティクラスを作って実行すると、勝手にDB上にテーブルが作成されているという方法。まさに、「永続化」。やり方は違うけど、従来のHibernateでのトップダウンアプローチ似ですね。

一方、Netbeansでは、DBのスキーマからエンティティクラスを作成することも、簡単にできます。これは、従来のHibernateでのボトムアップアプローチですね。

先月まで、Hibernateを使用したプロジェクトに参加していました(他プロジェクトと並行してですが)。そこでは、Excelのテーブル定義書からスキーマ作成用DDLとHibernateのマッピングファイルをVBAマクロで作成し、マッピングファイルからHibernate SynchronizerでエンティティクラスとDAOクラスを作成していました。最初は、スキーマからHibernate Synchronizerでマッピングファイルを作成していたのですが、いろいろ不都合があって、途中で変更しました。

通常のプロジェクトの場合、スキーマが先でエンティティクラスは後ということになりますので、やはり、ボトムアップにせざるを得ないと思います。

では、今回はどうするか。
まず、テーブル定義書を作るつもりはありません。面倒なので。会社で使っているのを持ってくれば楽ですが、さすがにそんなことはできないので。
最終的にはまだ分かりませんが、しばらくは、トップダウンとボトムアップの混在で行こうかなと思っています。
  1. 2007/03/08(木) 01:29:53|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

[Java] Javaアプリケーションの作成(2)

JPAの実装に何を使うか悩みつついろいろ調べたら、こんな記事を発見。
Java Persistence API + H2徹底解説 - EJBじゃなくてもDBへ永続化

これによると、NetBeans 5.5がTopLink Essentialsを含んでいるということ。NetBeans 5.5は、先日、705NKアプリを作るためにインストールしたばかりなので、これを使うことにしました。

さっそく、上の記事のH2部分をApache Derbyに変更して実行してみました。変更点は、以下の通りです。
・使用するJarファイルはderby.jar
・JDBC URLは"jdbc:derby:db/sample;create=true"
・JDBC Driverは"org.apache.derby.jdbc.EmbeddedDriver"
・JDBC User/Passwordは無し

これで、普通に動きました。
  1. 2007/03/07(水) 23:44:11|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

[Java]Javaアプリケーションの作成(1)

ふと思いついて、Javaでアプリケーションを作成することに。

Javaアプリケーションで、DBを使いたいので、何を使うか考えた結果、今回はこれに決定。
・DBMS Apache Derby
・DBアクセス方法 JPA(Persistence API)
ちっちゃなアプリケーションなので、OracleやMySQLのようなサーバ型ではなく、組み込み型のDBを選択。その中で何を使うか悩みましたが、どうせなら、Java SE 6で同梱となったJava DBがよいかなと思いました。ただし、Java DBは、Early Access版という位置づけのようなので、今回は元となったApache Derbyを使うことにします。
DBアクセス方法は、O/Rマッピングを使うことは最初に決めたのですが、その中で何を使うか悩んだ結果、せっかくなので、JPA(Persistence API)を使うことに決定。JPAの実装に何を使うかは、これから悩みます。
  1. 2007/03/07(水) 22:19:43|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

[Java]S2

某巨大掲示板より

811 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/26(日) 14:07:35
これでイインジャマイカン
Chura → S2Scaffold
Teeda → S2Jsf2
Uuji → S2Dao2
Kuina → S2Jpa
Kijimuna → S2Eclipse
Seasar → S2Spring


817 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/26(日) 16:50:41
>>811
すげ〜よくわかった。
感動した。
あとは
ぶり→S2Workflow
tuigwaa→S2Cybozu
Dolteng→S2Eclipse2
にしてくれればいいな。



確かに。
  1. 2006/12/10(日) 19:18:26|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

[Java]All-In-One EclipseにDoltengインストールでエラー

All-In-One EclipseDoltengをインストール使用としたら、エラーになっちゃいました。
原因は、All-In-One EclipseのGMFプラグインの梱包ミスとのこと。

All-In-One Eclipseを使わずに、WebTools Platform; All-in-oneを日本語化してインストールしたら、無事インストールできました。
  1. 2006/12/10(日) 18:24:43|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

[Java]Seasar Conference 2006 Autumn

先週日曜日、Seasar Conference 2006 Autumnに行ってきました。社内のMLでは報告済みなのですが、こちらにも載せておきます。

--------------------------------------------------------------------------------
今日(2006/11/12)、Seasar Conference 2006 Autumnに行ってきました。

上記URLからたどれるセッション一覧から、資料が取得できます。興味のある方は、今からでも見ることをおすすめします。

以下、私が出席したセッションについて報告します。

【Seasar2.4】ひがやすを
先日(2006/11/11)正式リリースを迎えたSeasar2.4のセッションです。
ひが氏にしてはめずらしく(?)、ほとんど脱線なしにスライド通り発表されていたので、詳細はスライド資料を見ていただいた方がいいと思います。

また、以下のBlogも見ておいた方がいいでしょう。
Seasar2.4開発秘話

発表の内容を極々簡単にまとめてしまうと、Seasar2.4の特徴は以下の2点となります。
・Super Agile
・Easy Enterprise
このうち、Super Agileの方が重視されています。
この点を理解しないと、他のセッションの内容もきちんと理解できないと思います。

その他細かいことは資料を見ていただくとして、ここでは、私の感じたことを簡単に書いておきます。

まず思ったのは、"DI"という言葉が出てこないなということです。これは、"DI"が当たり前になったということと、Seasarにとって"DI"はもはや裏方であって、目的ではなくなったということを表しているのだと思います。
また、今回、ツール(特にDolteng)が表に出てくるなと思いました。これについては、後のパネルディスカッションでひが氏自身が触れていましたので、そこで記述します。

後、気になったのは、ひが氏が以前に比べてEJB3を評価しなくなったのかなということがあります。上記Blogでもそれっぽい記述がありますので、そうなのかもしれません。

【TeedaによりPage駆動開発】大谷晋平(shot6)
Teedaは、Seasar2.4のプレゼンテーション層、特にページ駆動開発を担うフレームワークです(ページ駆動開発については、上のひが氏のセッションの資料も参照してください)。
Teeda 1.0が、先日(2006/11/11 11:11:11)に正式リリースされました。

Teedaを理解するためには、まず、Teedaの位置付けを把握した方がいいと思います。発表資料の「Teedaの位置付け」というページをまず見てください(ただし、今日の時点でアップされている資料には載っていません。アップ後に更新したということで、近日中に再アップするそうです)。

あと、SeasarにはHTMLテンプレートがいくつかあるので、混乱しないように注意する必要があります(って、私が混乱しているのですが)。

詳細はこれまた資料を見ていただくとして、私が興味を持ったのは、PRGパターンについてです。PRGパターンという言葉は聞いたことがありましたが、よくは理解していませんでした。これは、Webアプリでよく問題になる、RELOAD問題・戻る問題等への解決策です。Teedaに興味がないという人も、資料のこの部分だけは見ておいた方がいいと思います。

ここでも、Doltengが前面に出てきていました。これについては、後で記述します。

【Kuina-DaoとDoltengによるEasy Enterprise】小林浩一(koichik)
エビちゃんで有名な(?)、koichik氏によるKuiona-Daoについてのセッションです。アップされているドキュメントと異なり、実際に使用されたスライドは、エビちゃんバリバリでした。
なお、Kuina-Daoは、まだ正式リリースされていません。

Kuina-Daoは、JPA(Java Persistence API)を使ったDAOです。セッションタイトルの通り、Seasar2.4の中でも、Easy Enterpriseのために使われます。ひが氏の資料にあるとおり、Super Agileでは、Uuji(S2Daoの後継)を使用します。

アップされている資料の前半では、JPAについてやJPAとDAOの関係について分かりやすく説明されています。Kuina-Daoには興味がないという人も、この部分だけでも見ておいた方がいいと思います。

このセッション、既にkoichik氏がBlogで「心より恥じる」と書いているとおり、予定よりもだいぶ早く終わりました。そこで、急遽質疑応答がされました。その内容について書いておきます。

Q:OR検索やLIKEを2つ使う場合はどうするのか。
A:Kuina-Dao Criteriaを使う。

Q:Doltengで初期開発時にさくさく作れるのはいいが、エンハンス時はどうなのか。
A:今のところ、プロパティの追加レベルの機能しかない。使ってみて問題が出たら、開発者にどんどん要望を出した方がよい。

Q:S2Daoと比較したメリットは。
A:以下の2点。
(1) JPAという標準を使うので、標準を使わされるプロジェクトで使用できる
(2) 自由度が低いので、標準化・共通化を進めるプロジェクトに適合する。
なお、JPAは、シンプルなSQLを使用してJavaで複雑なロジックを実装するようなプロジェクトに適合する。SQLを自由に使いたい場合は、S2DAOやUujiを使うのがよい。Uujiは、All in Oneの中で使用するのに適している。

Q:現行システムをJPAを使うようにするにはどうすればいいか。
A:おすすめしない。
JPAを使う場合、JPAに適したテーブル設計が必要となるので、既にできあがったシステムで使用するのは難しい。

Q:では、HibernateやTopLinkからの移行はどうか。
A:今のJPAはHibernateやTopLinkより機能が相当劣るので、おすすめできない。

Q:JPAを使用した場合、パフォーマンスの問題は出ないか。
A:パフォーマンスを重視するプロジェクトではおすすめできない。
JPAでは、Fetch JoinによってLazyフェッチによるN+1アクセスを押さえるなどの方策が必要である。
ただし、Oracle TimesTenのようなIn-Memory Database (IMDB) 製品を使うと、実はN+1アクセスの方が早かったりする。

Q:Kuina-Core(JPAの自前での実装)を作る理由は。
A:以下の2点。
(1) EntityにDIしたい。
(2) テストの容易性。Hibernateは、初期化が重いので、軽くしたい。

【 Super Agile Web Development with Seasar2】ひがやすを氏
ひが氏によるSeasar2.4のデモ三昧の50分間です。従って、資料はありません。

Seasar2.4のSuper Agileの面を、これでもかとデモってくれました。50分という短い時間でいろいろデモれること自体、Super Agileの恩恵を享受していました(ちょっと修正してビルド・デプロイじゃあ、50分では何もできません)。

ここでおもしろいと思ったのは、ダイナミックプロパティとGridです。そのうち自分でも試してみたいと思います。

ところで、Seasar2.4では、Doltengというツール(Eclipseプラグイン)が非常に重要な役割を担っています。Eclipse上でプロジェクトを作成するところから始まって、ソースの自動生成など、いろいろなところで出てきます。
この中で一番気に入ったのが、Ctrl-5による切替です。Teedaの場面では、HTMLとPageファイルが、Ctrl-5で切り替わります。Kuina-Daoでは、DAOソースファイルとOrm.xmlまたは.sqlファイルが切り替わります。
さくさく開発には、こういう何気ない機能が非常に重要なのでしょう。

【パネルディスカッション】栗原傑享氏、ひがやすを氏、和田卓人(t-wada)氏、西岡悠平氏

4名によるテーマを決めたディスカッションです。話が多岐に渡っているので、一部のみ紹介します。なお、ディスカッション前に、フリービールが配られました。

●テーマ:Ease of Development
・ひが氏から、「フレームワークだけではだめ。ツールも重要」という発言がありました。これは、それまでのデモで十分感じました。
・ひが氏から、「(プレゼンテーション層の)自動生成はバッチ的に行うのはだ めで、ユーザと会話しながら作っていく必要がある」という話がありました。
 また、HTMLでモックを作っていく方法の重要性は、和田氏からもありました。

●テーマ:アジャイル開発
・Teedaは現時点で8,200のテストケースがあるそうで、テストそのものをリファクタリングしていっているということです。
・Tuigwaaで作るアプリについて、自然にアジャイルを実現させているという話がありました。

●テーマ:ユーザ駆動開発
・Tuigwaaのデモで、S2Buriとの連携というのをやったそうです。
・西岡氏の意見として、「ワークフローは高い・難しいというイメージがあり、大規模システム用と位置付けられているが、本来はユーザ駆動開発に向く」という話がありました。なるほどと思いました。
・西岡氏としては、Tuigwaaはパフォーマンス・セキュリティ面で大規模開発へ適用されることには自信がないということです。対してひが氏は、Seasar2は既に大規模システムでも使用されており、自信があるということでした。
 その違いは、Seasar2は既に3年やっているからということでした。
・栗原氏から、Tuigwaaをプロトタイプとして使用しているという話がありました。Tuigwaaの目的からは外れていますが、これもいいなあと思いました。

【感想】
Seasar2.4自体は、出たばかりで、触ってみないと評価はできないと思います。
「ダウンロードもフィードバックのうち」という話もありましたので、暇があったらぜひダウンロードして評価してみたいと思います。

個人的には、忙しかったり体調が悪かったりで、久しぶりの社外の勉強会への出席となりました。こういうのに出ると、勉強しなきゃ、ってつくづく思い知らされます。
あと、いつも思うのは、優秀な技術者はプレゼンもうまいということですね。勉強になります。
--------------------------------------------------------------------------------
  1. 2006/11/18(土) 00:22:49|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

[Java]続:J2SE 5.0でString連結

ちょうど1年ほど前に書いたこの記事

ところで、JDK 5.0のjavacに-source 1.4と付けてコンパイルしたらどうなるのでしょう。正解は、1.4までと同じく、StringBuilder#append()を使わないコードになる。

今やってるプロジェクト、JDK 5.0のコードを使っているのに、コーディング規約の関係で-source 1.4しています。しかし、文字列を+で連結してるソースが多いんですよね・・・

-source 1.4を外したら、結構早くなったりして・・・
  1. 2006/11/08(水) 01:15:14|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

[Java]Effective Java Reloaded

JavaOne 2006 - あの『Effective Java』から5年 「Effective Java Reloaded」

ちょっと古いネタだけど、最近知ったので。

セッションの最後に、来年中に最新のJavaに対応した『Effective Java』が発売されるという情報が明らかにされた。Java SEの隅々までを知りつくした同氏の助言は多くのJavaプログラマにとって非常に有用なものである。『Effective Java』の真の"Reload"が待ち遠しい。


日本語訳は再来年でしょうか。
でも、楽しみ。
  1. 2006/10/09(月) 18:02:29|
  2. Java
  3. | トラックバック:0
  4. | コメント:2
次のページ

プロフィール

Zennin

Author:Zennin
Second Life: Zennin Mathy

検索くん

0系新幹線

あわせて読みたい

あわせて読みたい

カレンダー

11 | 2008/12 | 01
- 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 - - -

最近の記事

カテゴリー

最近のコメント

最近のトラックバック

月別アーカイブ

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

Amazon

Google

Rakuten