プログラミングTips
Eclipseのワークスペース設定を共有することは難しい EclipseはJavaの開発では最も人気の高いIDEであり、もちろん、私も仕事でも自宅でもずっとメインのIDEとして使ってきました。もちろん、NetBeansやIDEAなど他の優秀なIDEもフリーで利用できる時代なので…
長年Javaを書いてきた人間としてはちょっと情けないことに、先日、会社で自分の書いたコードが原因でちょっとしたバグを出してしまいました。きちんとテストファーストで単体試験は書いていたのですがテストが不十分でしたね。 バグの原因は、Fileクラスの仕…
CDIなどJava EE6の新機能を使うときに、ちょっと厄介と感じるのは、複数のパッケージに同名のアノテーションが存在していることです。 大混乱に陥っているJavaEE 6のアノテーションに関する使い分けについて - 達人プログラマーを目指して うっかり間違えてi…
ある程度プログラマーとして経験を積めば、ソースコードを読んだときに、そのソースコードの良し悪しというものは、嗅覚を使って直感的に嗅ぎ分けることができるものです。実際、そのように体の感覚を使ってこのコードは不吉だと感じるところは実際大いにあ…
以前に、Spring MVCのJson変換機能について紹介しました。 Spring MVCでJSONデータを返すための手順 - 達人プログラマーを目指して また、Springの型変換サービスについても以下で紹介しました。 SpringのJavaBeansアクセスAPIと型変換サービスは単独で利用…
Spring Frameworkはもともと、面倒なJavaEE環境における開発を簡易化する軽量のDIコンテナーとして有名になったので、あまり、そういうイメージがないのですが、実は、JavaSEのAPIを簡易化するためのライブラリーとしてもかなり良く設計されていると思います…
私のように昔からJUnitのコードを書くことが習慣となっていると、値の検証はassertEquals(期待値, 実際値)メソッドで行うというというのがずっと常識となっていました。しかし、4年ほど前にリリースされたJUnit4.4以降では、長年親しんできたassertEquals()…
以前に、Java5の型システムを理解するにはリフレクションAPIを使ってみるのが最短の近道になる - 達人プログラマーを目指してで、Java5からリフレクションAPIで総称型を扱うために導入されたTypeインターフェースについて説明しました。復習しておくと、 Cla…
JSF2.0やSeamなど、新しいフレームワークではフラッシュスコープという機能を利用することができます。これはもともとRuby on Railsで有名になった処理方式だと考えられますが、フラッシュにデータを登録しておくと一回のHTTPリダイレクトの最中のみデータが…
Java: The Good Partsの本のタイトルに触発されて、逆にJava言語の使いにくい部分をいくつかピックアップしてみました。Java EEなどの業務系のアプリケーションプログラマーの視点で書いていますので、別の立場ではここで指摘している事項が必ずしもBad Part…
RMIのAPIのJava Docに書かれていないようなので見落としがちなことですが、RMIのサーバーオブジェクト(Remoteの実装クラス)は、複数のスレッドから同時に呼び出される(可能性がある)ようです。このことは、Java並行処理プログラミング ―その「基盤」と「…
先日、jXLSを使ったExcelテンプレートをSpring MVCのビューとして利用する方法 - 達人プログラマーを目指してでjXLSを使ってExcelファイルを生成してダウンロードする方法について説明しました。ここでは逆に、アップロードされたExcelファイルを読み込んでP…
jXLSを使ってJSPと同様の方法でExcelファイルを生成する 業務アプリケーションでは好むと好まざるとにかかわらず、Excelファイルの入出力を行う必要がある場合が多くあります。JavaからExcelファイルの読み書きを行うOSSのライブラリーはいくつかありますが…
正攻法でアクションハンドラメソッドのメタ情報を取得することは困難 開発で利用するフレームワークを作成する際には、実行対象となるオブジェクトの型やメソッドに付けられたアノテーションなどのメタ情報を利用したい場合が多くあります。特に、Spring MVC…
バージョン3以降のSpring MVCでは、コントローラーのメソッドからJSON文字列を簡単に返却させることができます。以前のバージョンでもビュークラスを独自に拡張することでJSONの返却は一応可能でしたが、最新バージョンでは非常に簡単にJSON対応させることが…
AspectJというと、メソッドなどに処理を織り込むAOPのイメージが強いと思いますが、AJDTというeclipseのプラグインを使うと強力なコード検証ツールとして利用できることは意外と知られていないようです。(AJDTはSpring Tool Suiteには最初から内蔵されてい…
Spring MVCで、フォームBean*1をセッションスコープに格納して処理をしたい場合、以下のように@SessionAttributesアノテーションをコントローラークラスに付加することで行うことができます。また、処理の完了時には SessionStatusをパラメーターで受け取り…
Apache Ivyの紹介と基本的な使い方 - 達人プログラマーを目指してに関連して説明させていただきます。 Mavenに慣れている人がIvyを使うときに必ずつまづくポイントとして、開発中の中間ビルド時のバージョン番号の付け方に対する両者の思想の違いがあります…
Generics(総称型)のプログラミングはJava言語(バージョン5以降)で最も習得が困難な文法*1の一つです。私自身、時々どうやって文法エラーを修正すべきか悩むこともあるくらいで、実際かなり複雑です。Genericsの導入は賛否両論なので、実際Javaに導入した…
Java言語のコードの書式のひとつとして、fluent interface(流れるような*1インターフェース)という書き方が知られています。 http://capsctrl.que.jp/kdmsnr/wiki/bliki/?FluentInterface 構文的にはSmalltalkのようにメソッドの戻り値にメッセージ送信対…
Seamの場合最初からSeamTestというフレームワークが付属しており、Embedded JBossサーバーを使ってJBossの機能をTestNGのテストクラスから実行できます。同様にして、Spring Frameworkに付属しているSpring Testを利用して、Springベースのアプリケーション…
今日他の人が書いたJavaのプログラムを読んでいたら、正規表現でパターンにマッチした領域をListの要素で置換するという処理がありました。具体的に言うと、 ["要素1", "要素2"]のようなListが与えられていた場合、"test #{0} #{1} test"のようなテンプレー…
SpringベースのアプリケーションをJBoss ASにデプロイしたり、SeamとSpringを併用したりするような場合に、JBoss ToolsとSpringSource ToolSuiteの機能を併用できると便利です。SpringSource ToolSuiteを先にインストールして、後からJBoss Toolsをプラグイ…
リモート通信やクラスターの試験をローカルPC上で行いたい場合など、一台のPC上で複数のサーバーを起動できると便利です。tomcatやweblogicだとサーバーのポートを変更するだけで比較的簡単に複数のサーバープロセスを一台のPC上で起動できるのですが、JBoss…
Spring Frameworkでトランザクション対応のJMSメッセージ送受信を行う方法について簡単にまとめます。 前提知識 JMSのメッセージ送受信については トランザクションなし Sessionにローカルなトランザクション JTAのグローバルトランザクションに参加(XA対応…
JPAには@Embeddableというアノテーションがありますが、このマッピング機能をうまく活用しているチームはどれくらいあるのでしょうか?私が今まで適用してきた使い方は結局以下の2通りの使い方のいずれかに集約できると思います。 1.属性の多い巨大なテーブ…
画面遷移定義におけるJSFとSeamの思想の違いについて - 達人プログラマーを目指してで説明したように、Seamでは画面ごとに画面遷移やパラメーター、アクションなどのメタ情報を定義することができます。これを定義する場所としては グローバルなpages.xmlフ…
アプリケーションサーバー内からデータベースにアクセスする際にはJDBCの接続オブジェクトがプールされているということはJava EEでは常識です。したがって、アプリケーションロジックでConnectionオブジェクトを保持せず、接続を利用するたびに新規に接続を…
画面遷移定義におけるJSFとSeamの思想の違いについてで述べた様に、Seamでは標準のJSF1.2と比較してGETリクエストのサポートが充実しています。つまり、JSFではGETで単純に画面を開くことしかできないのに対して、Seamの場合、タグを使うことで、アクション…
Seamの場合、EntityManagerをSeam管理にして会話スコープと同期させることで、JPAの永続コンテキストをアプリケーショントランザクションの間持続させることが容易に可能です。たとえば、データ更新ウィザード画面を開始してから、最終画面の更新ボタンをを…