プログラミングTips

Pulseを使ってEclipseの設定を共有すると便利(ただし、閉鎖環境では使えません)

Eclipseのワークスペース設定を共有することは難しい EclipseはJavaの開発では最も人気の高いIDEであり、もちろん、私も仕事でも自宅でもずっとメインのIDEとして使ってきました。もちろん、NetBeansやIDEAなど他の優秀なIDEもフリーで利用できる時代なので…

JavaのFileクラスは不変(immutable)クラスという点に関する注意点

長年Javaを書いてきた人間としてはちょっと情けないことに、先日、会社で自分の書いたコードが原因でちょっとしたバグを出してしまいました。きちんとテストファーストで単体試験は書いていたのですがテストが不十分でしたね。 バグの原因は、Fileクラスの仕…

EclipseでJava EE6を使った開発をするときは型フィルター機能が便利

CDIなどJava EE6の新機能を使うときに、ちょっと厄介と感じるのは、複数のパッケージに同名のアノテーションが存在していることです。 大混乱に陥っているJavaEE 6のアノテーションに関する使い分けについて - 達人プログラマーを目指して うっかり間違えてi…

ConQATを利用してソースコードの品質をチェックする

ある程度プログラマーとして経験を積めば、ソースコードを読んだときに、そのソースコードの良し悪しというものは、嗅覚を使って直感的に嗅ぎ分けることができるものです。実際、そのように体の感覚を使ってこのコードは不吉だと感じるところは実際大いにあ…

Spring MVCのJson変換機能で@DateTimeFormatが無視される件の対処方法

以前に、Spring MVCのJson変換機能について紹介しました。 Spring MVCでJSONデータを返すための手順 - 達人プログラマーを目指して また、Springの型変換サービスについても以下で紹介しました。 SpringのJavaBeansアクセスAPIと型変換サービスは単独で利用…

SpringのJavaBeansアクセスAPIと型変換サービスは単独で利用しても利用価値が高いという事実

Spring Frameworkはもともと、面倒なJavaEE環境における開発を簡易化する軽量のDIコンテナーとして有名になったので、あまり、そういうイメージがないのですが、実は、JavaSEのAPIを簡易化するためのライブラリーとしてもかなり良く設計されていると思います…

実はJUnit4のassertThat()ってしっくりこないんです!(特に、メタプログラミングするレイヤでは)

私のように昔からJUnitのコードを書くことが習慣となっていると、値の検証はassertEquals(期待値, 実際値)メソッドで行うというというのがずっと常識となっていました。しかし、4年ほど前にリリースされたJUnit4.4以降では、長年親しんできたassertEquals()…

SpringのTypeDescriptorを使うと型パラメーターを簡単に取得できる

以前に、Java5の型システムを理解するにはリフレクションAPIを使ってみるのが最短の近道になる - 達人プログラマーを目指してで、Java5からリフレクションAPIで総称型を扱うために導入されたTypeインターフェースについて説明しました。復習しておくと、 Cla…

Spring MVCでフラッシュスコープの機能を簡単に実装する方法

JSF2.0やSeamなど、新しいフレームワークではフラッシュスコープという機能を利用することができます。これはもともとRuby on Railsで有名になった処理方式だと考えられますが、フラッシュにデータを登録しておくと一回のHTTPリダイレクトの最中のみデータが…

業務系のJavaプログラマーが知っておくべき10個のBad Partsとその対策

Java: The Good Partsの本のタイトルに触発されて、逆にJava言語の使いにくい部分をいくつかピックアップしてみました。Java EEなどの業務系のアプリケーションプログラマーの視点で書いていますので、別の立場ではここで指摘している事項が必ずしもBad Part…

RMIのサーバーオブジェクトはスレッドセーフでなくてはならない

RMIのAPIのJava Docに書かれていないようなので見落としがちなことですが、RMIのサーバーオブジェクト(Remoteの実装クラス)は、複数のスレッドから同時に呼び出される(可能性がある)ようです。このことは、Java並行処理プログラミング ―その「基盤」と「…

jXLS Readerを使ってアップロードされたExcelファイルを読み込む

先日、jXLSを使ったExcelテンプレートをSpring MVCのビューとして利用する方法 - 達人プログラマーを目指してでjXLSを使ってExcelファイルを生成してダウンロードする方法について説明しました。ここでは逆に、アップロードされたExcelファイルを読み込んでP…

jXLSを使ったExcelテンプレートをSpring MVCのビューとして利用する方法

jXLSを使ってJSPと同様の方法でExcelファイルを生成する 業務アプリケーションでは好むと好まざるとにかかわらず、Excelファイルの入出力を行う必要がある場合が多くあります。JavaからExcelファイルの読み書きを行うOSSのライブラリーはいくつかありますが…

Spring MVCでコントローラーのリクエストハンドラメソッドのメタ情報を記録する方法

正攻法でアクションハンドラメソッドのメタ情報を取得することは困難 開発で利用するフレームワークを作成する際には、実行対象となるオブジェクトの型やメソッドに付けられたアノテーションなどのメタ情報を利用したい場合が多くあります。特に、Spring MVC…

Spring MVCでJSONデータを返すための手順

バージョン3以降のSpring MVCでは、コントローラーのメソッドからJSON文字列を簡単に返却させることができます。以前のバージョンでもビュークラスを独自に拡張することでJSONの返却は一応可能でしたが、最新バージョンでは非常に簡単にJSON対応させることが…

AJDTを使って規約違反のコードを検出する方法

AspectJというと、メソッドなどに処理を織り込むAOPのイメージが強いと思いますが、AJDTというeclipseのプラグインを使うと強力なコード検証ツールとして利用できることは意外と知られていないようです。(AJDTはSpring Tool Suiteには最初から内蔵されてい…

Spring MVCでセッション属性のキーをコントローラーごとに別々にするには

Spring MVCで、フォームBean*1をセッションスコープに格納して処理をしたい場合、以下のように@SessionAttributesアノテーションをコントローラークラスに付加することで行うことができます。また、処理の完了時には SessionStatusをパラメーターで受け取り…

開発時ビルドのバージョン番号の付け方に対するMavenとIvyの思想の違いについて

Apache Ivyの紹介と基本的な使い方 - 達人プログラマーを目指してに関連して説明させていただきます。 Mavenに慣れている人がIvyを使うときに必ずつまづくポイントとして、開発中の中間ビルド時のバージョン番号の付け方に対する両者の思想の違いがあります…

Java言語で固定要素のListを初期化する際のイディオム

Generics(総称型)のプログラミングはJava言語(バージョン5以降)で最も習得が困難な文法*1の一つです。私自身、時々どうやって文法エラーを修正すべきか悩むこともあるくらいで、実際かなり複雑です。Genericsの導入は賛否両論なので、実際Javaに導入した…

fluent interface呼び出し書式を正しくeclipse3.6でフォーマットする方法

Java言語のコードの書式のひとつとして、fluent interface(流れるような*1インターフェース)という書き方が知られています。 http://capsctrl.que.jp/kdmsnr/wiki/bliki/?FluentInterface 構文的にはSmalltalkのようにメソッドの戻り値にメッセージ送信対…

Spring TestでJBoss Embeddedサーバーを利用するための手順

Seamの場合最初からSeamTestというフレームワークが付属しており、Embedded JBossサーバーを使ってJBossの機能をTestNGのテストクラスから実行できます。同様にして、Spring Frameworkに付属しているSpring Testを利用して、Springベースのアプリケーション…

Javaで正規表現を扱うのは難しい

今日他の人が書いたJavaのプログラムを読んでいたら、正規表現でパターンにマッチした領域をListの要素で置換するという処理がありました。具体的に言うと、 ["要素1", "要素2"]のようなListが与えられていた場合、"test #{0} #{1} test"のようなテンプレー…

JBoss ToolsとSpringSource ToolSuiteの機能を併用する方法

SpringベースのアプリケーションをJBoss ASにデプロイしたり、SeamとSpringを併用したりするような場合に、JBoss ToolsとSpringSource ToolSuiteの機能を併用できると便利です。SpringSource ToolSuiteを先にインストールして、後からJBoss Toolsをプラグイ…

1台のPC上で複数のJBossサーバーを起動する方法

リモート通信やクラスターの試験をローカルPC上で行いたい場合など、一台のPC上で複数のサーバーを起動できると便利です。tomcatやweblogicだとサーバーのポートを変更するだけで比較的簡単に複数のサーバープロセスを一台のPC上で起動できるのですが、JBoss…

Spring JMSでトランザクションを設定する3種類の方法について

Spring Frameworkでトランザクション対応のJMSメッセージ送受信を行う方法について簡単にまとめます。 前提知識 JMSのメッセージ送受信については トランザクションなし Sessionにローカルなトランザクション JTAのグローバルトランザクションに参加(XA対応…

JPAの@Embeddableの使い道

JPAには@Embeddableというアノテーションがありますが、このマッピング機能をうまく活用しているチームはどれくらいあるのでしょうか?私が今まで適用してきた使い方は結局以下の2通りの使い方のいずれかに集約できると思います。 1.属性の多い巨大なテーブ…

Seamの画面定義xmlファイルを作成する単位

画面遷移定義におけるJSFとSeamの思想の違いについて - 達人プログラマーを目指してで説明したように、Seamでは画面ごとに画面遷移やパラメーター、アクションなどのメタ情報を定義することができます。これを定義する場所としては グローバルなpages.xmlフ…

JMSのConnection, Session, Consumerをキャッシュすべきかどうか

アプリケーションサーバー内からデータベースにアクセスする際にはJDBCの接続オブジェクトがプールされているということはJava EEでは常識です。したがって、アプリケーションロジックでConnectionオブジェクトを保持せず、接続を利用するたびに新規に接続を…

SeamアプリでGETリクエストとPOSTリクエストとの適切な使い分けに関する注意点

画面遷移定義におけるJSFとSeamの思想の違いについてで述べた様に、Seamでは標準のJSF1.2と比較してGETリクエストのサポートが充実しています。つまり、JSFではGETで単純に画面を開くことしかできないのに対して、Seamの場合、タグを使うことで、アクション…

Seamの会話の開始、終了の指定方法とEntityManagerのflushモードについての注意点

Seamの場合、EntityManagerをSeam管理にして会話スコープと同期させることで、JPAの永続コンテキストをアプリケーショントランザクションの間持続させることが容易に可能です。たとえば、データ更新ウィザード画面を開始してから、最終画面の更新ボタンをを…