« June 2006 | Main | August 2006 »

July 2006

2006.07.29

Trac Discussion Plugin(4)

 久しぶりにTrac Discussion Pluginネタです。Revision854→1066への入れ替えとなったのですが、Versionとしては0.2→0.5になっていました。

 大きな違いは、Permissionの変更でしょうか。「閲覧のみ」という権限が追加されています。また、DISCUSSION_MODIFY権限が削除(変更?)されたようで、それを消す場合はSQLiteで直接DBを更新する必要がありました(WebAdmin画面やTracAdminではエラーで削除できませんでした)。

 あとは、引用機能が追加されていましたが、僕の環境だとルートの発言に対して引用を行おうとするとエラーが発生してしまいました(ルート以外の発言なら問題なく処理できたのですが)。

| | Comments (0) | TrackBack (0)

2006.07.28

Java6のSwing

 Java6のSwingは、結構いろいろと機能が追加されているようですね。メソッド名からの判断だけでまだ試したわけではないのですが、JListなどでDrug&Dropがサポートされたようですし、JTableではソート機能などが追加されているようです。

 今までいろいろと工夫して(?)処理していたのが、結構サクッと実装できるようになったりするんでしょうね、きっと。

Swing Hacksで記載されていた内容のうち、ある程度は標準コンポーネントのみで実現可能になったってことかもしれません。

| | Comments (0) | TrackBack (0)

2006.07.23

Eclipse3.2でJUnit4.0

 半年ほど前にJUnit4.0がリリースされ、先月JUnit4.0に対応したEclipse(3.2)がリリースされ・・・ということで、今更ではありますが、JUnit4.0でテストケースを書いてみました。
 JUnit4.0へのバージョンアップにおいて最大の変更点は、TestCaseを継承したクラスを作成せずに、@Testアノテーションでテストケースをかけること。
 前準備として、JavaプロジェクトのクラスパスにJUnit3.8.1ではなくJUnit4のjarファイルを追加しておく必要があります。Javaプロジェクトのクラスパスの編集画面で、Add Libraryで表示されるJUnit library versionJUnit 4を選択すればOK。New→JUnitTestCaseで表示されるダイアログでJUnit 4 testラジオボタンが表示されます(別に普通にクラスの新規作成でもテストケースを作成できます)。

で、アノテーションを用いることにより、

package test;

import org.junit.Test;
import static org.junit.Assert.*;

public class HogeTest {
  @Test
  public void hogeTest() throws Exception {
    assertEquals("hoge", Hoge.hoge());
  }
}

こんな感じでテストケースを書くことが出来ます(アノテーションを使用するのでコンパイラのバージョンは5.0にしておく必要があるかと・・・)。org.junit.Assert.*をStatic importしておくことで、チェックもJUnit3.8.1の時と同様に、単純にassertEquals(*)が使用可能となります。

| | Comments (1) | TrackBack (0)

2006.07.17

DWR使用時のアクセス制限方法

 Java用のAjaxライブラリの1つであるDirect Web Remotingを用いてAjaxった場合、呼ばれる側は基本的にPOJOなのでアクセスしているユーザー名(HttpServletRequest#getRemoteUser等で取得)は不明。なので、どうやってアクセス制限をすればいいのかなぁ・・・と思っていたところ、やはりちゃんと考えられていたんですね。

 web.xmlで、ざっくりと制限をかける方法は知っていた(例えばRoleAではdwrを呼び出せてそれ以外のRoleは全てNG)のですが、複数のdwr.xmlを使い分けたり、あるいは1つのdwr.xml内でアクセス制限をかけたりすることもできるんですね。RoleAはこの部分を使えて、RoleBはこの部分を使えて・・・というような設定はどうすればいいのか考えていたのですが、サクッと解決(笑)。っていうか、ちゃんとドキュメントは読まなければいけませんね(^^;

 ただ、基本的にJ2EEのRoleに基づいたアクセス制限なので、「このRoleの中でもこのユーザーの場合のみ・・・」という感じの設定はできないっぽいです。
 もっとも、多くの場合はRoleに基づいたアクセス制限で事足りるとは思いますが。

#dwr.xmlを分けて管理するのか、1つにまとめて管理するのか。開発者の好みによって分かれそうですね。

#追記:ServletAPIにアクセスすることもちゃんとできるようになっていました(^^;;

| | Comments (0) | TrackBack (0)

2006.07.16

アノテーション版AspectJ

 代表的なJava用のAspectとくれば、やはりAspectJ。AspectJ5からはアノテーションで指定できるようになったとのことで少し調べてみたのですが・・・-javaagentを用いてacpectj用のライブラリを指定するのはGluonJと同じですが、実行時にWeavingを行う場合は、別途xmlファイルによる定義が必要になるっぽい?

| | Comments (0) | TrackBack (0)

2006.07.15

GluonJで全メソッドを処理対象に

 GluonJで全メソッドに対して適用する方法は実は簡単でした(^^;;
 クラス名やメソッド名のところに、普通にワイルドカードを指定することができるんですね。

@Around("{ " +
"long start = System.currentTimeMillis(); " +
"$_ = $proceed($$); " +
"System.out.println($class + `:` + (System.currentTimeMillis() - start) + `ms`); " +
"}")
Pointcut pc = Pcd.call("test.*#*(..)");

ってやると、コンストラクタも含めて全て処理対象となるようです。
 ちなみに、戻り値のあるメソッドを実行する場合は、その戻り値を$_で受け取らなければならず、逆に、voidメソッドに対して$_を指定しても無視されるだけなので、@Aroundで元のメソッドを呼び出す場合は$_ = $proceed($$);という感じで$_を指定しておくのが無難でしょう。

 基本的にJavassistのパラメータが参考になるようで、例えば$typeで呼び出されたメソッドの戻り値の型を、$classで呼び出されたクラスの名称を取得することができます。
 ただ、呼び出されたメソッドのメソッド名を取得する方法が見つからない・・・。

#おまけ

@Before("{ System.out.println(`putが呼び出されました:` + $1 + `/` + $2); }")
Pointcut map = Pcd.call("java.util.Map#put(..)").and.within("test.*");

とかやると、HashMap等に値を格納しようとしたときにログ出力を行うことができたりします。

| | Comments (0) | TrackBack (0)

EclipseでGluonJ

 Eclipse上でGluonJを用いたプログラムの実行のテスト。

 普通に、クラスパスにgluonj.jarを加えてglueクラスを作成し、織り込み先となるアプリケーション実行時に-javaagent:./lib/gluonj.jar=test.Loggingって感じで織り込みクラスを指定するだけでサクッとロード時の織り込みができあがり。
 こういう形式にしておくと、Eclipse上でデバッグするときのみglueクラスが織り込まれ、ビルド結果のClassファイルは織り込まれていない(プレーンな)状態のものが簡単に得られるようです。

 逆に言えば、Glueクラスを織り込んだClassファイルを得ようとした場合は、Antを用いてビルドするか、エクスポートした後のクラスファイルをgluonj.jarを用いて加工するかという処理を行う必要があるってことになると思いますが。

 ちなみに、メソッドの処理時間を出力するようなアスペクトは、以下のような感じで書けました。

@Around("{ long start = System.currentTimeMillis(); $proceed($$); System.out.println((System.currentTimeMillis() - start) + `ms`); }")
Pointcut pc = Pcd.call("test.TestClass#execute()");

(青字は1行です)
 ※$porceed($$)で、本来の処理を本来の引数で実行してくれます。

【疑問点】 あるクラスのメソッドを全てPointcutの処理対象としたい場合、Pcdでどうやって指定すればいいのやら?

#ただ、アスペクトを「文字列」で定義するため、オートコンプリートが効かなかったりするなど、やや面倒かも。まぁ、その部分はアスペクトに対する考え方によるところが大きいのかもしれませんが。

| | Comments (0) | TrackBack (0)

2006.07.14

免許の更新

 免許(普通自動車)の更新に行ってきました。今回は講習時間が短かったのですが・・・それでも、待ち時間やら何やらで結構時間がかかっちゃいますねぇ。

 しかし、なぜ免許センターで撮影する顔写真って、あんなに人相が怪しくなるんでしょうね?(^^;
 前回よりは少しまし・・・かなぁ??

| | Comments (0) | TrackBack (0)

2006.07.07

J2EE1.4でのServletFilter

 J2EE1.3の頃はServletFilterは単にfilter-nameとservlet-nameだけでfilter-mappingを行うことができていましたが、J2EE1.4からはそれだけでは処理できなくなったんですね。
 静的ファイルに対しては、これまで通りfilter-nameとurl-patternの組み合わせだけでいけるみたいなのですが、他のServletに対してFilterを適用する場合だと、dispatcherを指定しなければいけないようで。
 REQUEST/FORWARD/INCLUDE/ERRORの4種類があり、それぞれどういったフローの時にFilterを適用するかを設定することができるみたいです。

 参考URL:Tomcatを使いやすくする: Tomcat 5のフィルター処理の技

#JavaEE5がもうじき出てこようかという時期ではあるのですが(^^;

| | Comments (0) | TrackBack (0)

2006.07.03

Eclipse3.2リリース

 Eclipse3.2リリース。
 3.1(2005/6/27)からほぼ1年でのリリース(2006/6/29)になるんですね。
 Callistoにより、Plug-in等のインストールがかなり楽になるとの話ですが、さてさて、いつ試せるやら。家で使っているマシンはメモリが384MBしかないので、だんだん厳しくなってきているんですよね~(苦笑

| | Comments (0) | TrackBack (0)

« June 2006 | Main | August 2006 »