Java

eclipse+Jetty開発環境の作成

Herokuに手を出してからというものの、eclipse+Jettyで開発することが多くなりました。JettyのおもしろいところはAPIを使って起動用クラスを作ることで、普通のJavaアプリとして起動できることです。これが便利なところは 起動が速い! 特別なプラグインを入…

JerseyでJSONを扱うときは注意

JAX-RSは素晴らしい仕様です。しかし、その参照実装であるJerseyでJSONを扱うときには注意が必要です。 けっこうイヤな動きをします。 Listオブジェクトをエンコードしてくれない トップレベルのオブジェクトがListの場合、JSONにしてくれません。 他のオブ…

java.util.List#subListの誤った用法

java.util.List#subListメソッドの使い方がまちがっていたためにメモリリークを犯してしまっていた、という話です。 画像の各ピクセルの色を抽出してある法則に並べ替えた後に、先頭の10個の要素を返す、というメソッドを作るとしましょう。 このとき List<Color></color>…

WicketのAjaxでJavaScriptを動かす

Wicketで、Ajaxで何か処理した後にクライアント(ブラウザ)側でJavaScriptを実行するには AjaxRequestTarget#appendJavaScript(CharSequence)を使います。便利。 ちなみにAjaxRequestTargetにはfocusComponent(Component)というメソッドがあって、Ajax処理…

WicketのHTMLテンプレートはまりどころ

WicketはHTMLのテンプレートにHTMLを使います。 このことの恩恵は非常に大きくて、HTMLでローカルで確認したレイアウトをそのままアプリで使えるわけです。 もちろん他にもHTMLをテンプレートに使えるフレームワークはありますが、Wicketのおもしろいところ…

JavaEEでConnectionを使うときはclose()を忘れずに

最近Glassfish v3.0.1 を使ったJavaEE+Wicketで開発しているのですがはまった出来事があります。 それはjava.sql.Connectionのクローズもれです。Java1年生かと見紛うばかりの初歩的なミスですが、なぜか「JavaEEのConnectionはclose()しなくてもOK」という…

WicketのComponentにオブジェクトをインジェクトする

私はWicketというフレームワークが大好きです。 それからJavaEE6の新仕様であるCDIも大好きです。だったらWicketの中でCDIを使いたくなるのは、ごく自然な流れ。一応WicketとCDIを統合するライブラリもあるにはあるようですが、まともに動いたことがないんで…

eclipseのWTPでテストクラスをデプロイ対象から外す

eclipseのWTPを使ってWebアプリを開発するときの話題。開発環境とは言えWEB-INF/libの下には必要最低限のjarしか置きたくありませんが、JUnitのテストクラスを置いているプロジェクトの場合、JUnitのJARを置いておかないとデプロイに失敗してしまいます。で…

StrutsのメッセージファイルをXMLにする

久々のJavaネタ。Strutsの話です。Strutsではメッセージをpropertiesファイルに記述しますが、これを変更してXMLで書けるようにする方法を紹介します。 仕様 今回のサンプルでは、メッセージファイルはクラスパス直下に置くことにします。多言語化を考慮して…

SAStrutsの落とし穴

たまには実践的(笑)なエントリを。SAStrutsは業務でかなり扱ってるのですが、Actionにははまりどころがあります。それを紹介。 getで始まるメソッドを作らない これ超大事です。SAStrutsはJSPをレンダリングするとき、ActionFormとActionのプロパティとpub…

staticクラスはテストしにくい

staticクラスというのは造語で、staticメソッドしか持たないユーティリティクラスの事を指しています。 この手のクラスは実務でよくみかけますが、状態を持つstaticクラスをつくってしまうとテストで苦労することになります。 例えばメッセージユーティリテ…

配列リテラルの最後にカンマがあってもいい

久々Javaネタ。 こんな↓感じで書けるみたいです。 int[] is = { 1, 2, }; 知りませんでした。地味にうれしい。 列挙型もこの書き方ができますね。ただ、この書き方をしたソースをjavadocに食わせるとエラーになるんですよね。 これにはガッカリです。

2つの画像の異なる部分を見つける

2つの画像の大きさは同じっていう前提。 final BufferedImage image1 = ImageIO.read(file1); final BufferedImage image2 = ImageIO.read(file2); final BufferedImage delta = new BufferedImage(image1.getWidth(), image1.getHeight(), image1.getType(…

プリミティブ型は抽象型?

System.out.println(Modifier.isAbstract(int.class.getModifiers())); の結果は"true"。知らんかった。他にも System.out.println(Modifier.isAbstract(String[].class.getModifiers())) System.out.println(Modifier.isAbstract(Serializable.class.getMod…