 |
 |
 |
 |
 |
 |
Javaの理論と実践: 次期エンタープライズ・アプリケーションにJMSの採用を 新連載の「Javaの理論と実践」シリーズでは、デザイン・パターンや高信頼性ソフトウェア設計の原理などについて考えていきます。第1回のこの記事では、エンタープライズ・メッセージ・キューイング・テクノロジーについて解説します。 |
|
|
|
2002/02/01 |
|
| |
Javaの理論と実践: 可変性か、不変性か? 今月の Javaの理論と実践では、不変性のメリットと、不変クラス作成時のガイドラインについて説明します。 |
|
|
|
2002/02/18 |
|
| |
Javaの理論と実践: JTSを理解する -- トランザクションについて JTSは、J2EEアーキテクチャーの重要な要素です。この記事では、トランザクションとは何か、また、信頼性の高い分散アプリケーションを構築する上でなぜそれが重要になるのか、という点について基本となるポイントを説明します。 |
|
|
|
2002/03/01 |
|
| |
Javaの理論と実践: JTSを理解する -- 見えない魔法 この記事では、J2EEアプリケーションがどのようにトランザクションとして構造化されるか、またJTSとJ2EEコンテナーが、トランザクション・サービスをどのようにして管理するのかについて説明します。 |
|
|
|
2002/04/01 |
|
| |
Javaの理論と実践: JTSを理解する -- 安全とパフォーマンスのバランス このシリーズの最後となる今回の記事では、J2EEがトランザクション境界と独立性を管理するために提供する機能と、それらを効果的に使用するためのガイドラインについて取り上げています。 |
|
|
|
2002/05/01 |
|
| |
Javaの理論と実践: 安全な構築のテクニック 今回の記事では、「構築中に this 参照を拡張させる」一般的なスレッド化の問題について取り上げています。無害に見えるこの行動は、予測不可能で望ましくない結果をJavaプログラムにもたらす可能性があります。 |
|
|
|
2002/06/01 |
|
| |
Javaの理論と実践: スレッド・プールとワーク・キュー どのサーバー・アプリケーションでもたいてい、スレッド・プールとワーク・キューに関する問題が出てきます。今回の記事では、スレッド・プールを使用する動機、いくつかの基本的な実装と調整のテクニック、回避すべきいくつかの一般的な障害について説明します。 |
|
|
|
2002/07/01 |
|
| |
Javaの理論と実践: それをドキュメント化しなければならないか Java言語は、Javadocコメント規約によるAPIドキュメンテーションへの統合アプローチを採用しています。今回の記事では、Javaドキュメンテーションの現状について苦言を呈し、もっと有益なJavadocを作成するためのいくつかのガイドラインを提示しています。 |
|
|
|
2002/08/01 |
|
| |
Javaの理論と実践: スレッドはどこへ消えた? スレッドは、注意していないと、(スタック) トレースに形跡を残さず、サーバー・アプリケーションから跡形もなく消えてしまう可能性があります。今回の記事では、「無許可離隊」してしまうスレッドを防止し検出するためのいくつかのテクニックを紹介します。 |
|
|
|
2002/09/01 |
|
| |
Javaの理論と実践: ファイナル・アンサー? final は、クラスやメソッドの宣言では過度に使用される一方、誤った使い方をされることの多いキーワードです。今月は、final の有効な使用法に関するいくつかのガイドラインを説明します。 |
|
|
|
2002/10/01 |
|
| |
Javaの理論と実践: (若干) シンプルになった並行性 今回の記事では、広く使用されている高品質のオープン・ソースの並行性ユーティリティー・パッケージである、 util.concurrent パッケージについて紹介します。 |
|
|
|
2002/11/01 |
|
| |
Javaの理論と実践: ポイントは何処ですか? この記事では、Javaプログラムで非整数型を扱うときに直面する落とし穴について説明します。 |
|
|
|
2003/01/01 |
|
| |
Javaの理論と実践: パフォーマンス管理 -- しっかり計画していますか? この記事では、Java言語を使用したプロジェクトで最もよく見られるいくつかのパフォーマンスに関する失敗について説明します。 |
|
|
|
2003/03/25 |
|
| |
Javaの理論と実践: ハッシュの徹底 今回の記事では、Java開発者であるBrian Goetz氏が、Javaクラスの作成時に hashCode() と equals() を効果的かつ適切に定義するために従うべき規則とガイドラインについて説明します。 |
|
|
|
2003/05/27 |
|
| |
Javaの理論と実践: そもそも誰のオブジェクトですか? この記事では、Java開発者がオブジェクトの所有権に関して注意を払うべきいくつかの状況についてBrian Goetz氏が説明しています。 |
|
|
|
2003/06/24 |
|
| |
Javaの理論と実践: 並行コレクション・クラス 今回、Brian Goetz氏は、HashtableやsynchronizedMapをConcurrentHashMapに変えるだけで、並行プログラムはどれだけ恩恵を得ることができるかについて説明をいたします。 |
|
|
|
2003/07/23 |
|
| |
Javaの理論と実践: 優れたHashMapの構築 util.concurrentパッケージのConcurrentHashMap機能は、HashtableやsynchronizedMapよりも高い並行性が備わっています。 |
|
|
|
2003/08/21 |
|
| |
Javaの理論と実践: スレッド・セーフの特性について スレッド・セーフは「全てかゼロか」の命題ではなく、定義が難しいものです。しかし、クラスがスレッド・セーフであるかどうかの分類をJavadocの中に記述する手間をかけるのは非常に重要なことなのです。 |
|
|
|
2003/09/23 |
|
| |
Javaの理論と実践: ガーベッジ・コレクション小史 今回の記事で、Brian Goetzはガーベッジ・コレクションの最も一般的なテクニックについて解説します。 |
|
|
|
2003/10/28 |
|
| |
Javaの理論と実践: 1.4.1 JVM中のガーベジ・コレクション 今回の記事では、どのように1.4.1JVMがガーベジ・コレクションを処理しているのか、マルチプロセッサ・システム用の新しいガーベジ・コレクションのオプションのいくつかを含めて調査します。 |
|
|
|
2003/11/25 |
|
| |
Javaの理論と実践: ガベージコレクションとパフォーマンス 今回の記事では、コレクタの選び方によるパフォーマンスへの影響、コーディング形式の違いによるガベージコレクションへの影響、さらにメモリ確保やそれに関連する動作がJava仮想マシンに与える負担について論じます。 |
|
|
|
2004/01/27 |
|
| |
Javaの理論と実践: Javaメモリ・モデルを修正する 第1回 今回の記事では、JMMを修正するためにvolatileやfinalの意味体系をどのように強化するかを説明します。こうした変更の一部は既にJDK 1.4に統合されており、残りはJDK 1.5に統合される事になっています。 |
|
|
|
2004/02/24 |
|
| |
Javaの理論と実践: Javaメモリ・モデルを修正する 第2回 今回は新しいJMMの下でvolatileやfinalの意味体系がどのように変わるか、またそうした変更によって、意味体系が大部分の開発者の直感に合うようになることを明らかにします。 |
|
|
|
2004/03/30 |
|
| |
Javaの理論と実践: J2EEをコンテナから誘い出す 今回は、J2EEコンテナ外に存在するいくつかのJ2EE技術をどのようにしてJ2SEアプリケーションに使うかについて見て行きます。 |
|
|
|
2004/04/20 |
|
| |
Javaの理論と実践: 例外をめぐる議論 最近何人かの著名なライターが、良質なJavaのクラス設計において非チェック例外というのは、以前思われていた以上に意味を持つのだ、という立場を取るようになっています。 |
|
|
|
2004/05/25 |
|
| |
Javaの理論と実践: バグを確実につぶす 今回は、このコラムで説明してきた設計原則にコードが合致するかどうかの静的解析にFindBugsを使う方法を説明します。 |
|
|
|
2004/06/29 |
|
| |
Javaの理論と実践: Web層での状態複製 この記事では、状態複製に関わる幾つかのオプションと、良好なスケーラビリティやパフォーマンスを得るためにはHttpSessionをどのように使えば最も効果的かを説明します。 |
|
|
|
2004/07/29 |
|
| |
Javaの理論と実践: JDK 5.0における、より柔軟でスケーラブルなロック JDK 5.0では、ハイ・パフォーマンスの同時アプリケーションの開発用に、強力な選択肢が追加されています。例えばjava.util.concurrent.lockのReentrantLockクラスが、Java言語のsynchronized機能の置き換えとして提供されています。 |
|
|
|
2004/10/26 |
|
| |
Javaの理論と実践: アトミックで行く この記事では、java.util.concurrentにアトミック変数クラスが追加されたことによって、いかに高度にスケーラブルな非ブロック・アルゴリズムがJavaで開発できるようになったかを解説して行きます。 |
|
|
|
2004/11/23 |
|
| |
Javaの理論と実践: 動的コンパイルとパフォーマンス測定 今回の記事では、動的コンパイルによってパフォーマンス・テストが複雑になる事例の中から幾つかを解説します。 |
|
|
|
2004/12/21 |
|
| |
Javaの理論と実践: Generics、了解! 今回のJavaの理論と実践 では、genericを初めて使う人が陥りがちな落とし穴について解説します。 |
|
|
|
2005/01/25 |
|
| |
Javaの理論と実践: 欠陥マイクロベンチマークを分析する 今回の記事では、Java言語構成体のパフォーマンス測定が見かけよりもずっと難しいのはなぜなのかを解説します。 |
|
|
|
2005/02/22 |
|
| |
Javaの理論と実践: XQueryによるscreen-scraping 今回は、XQueryをHTMLのscreen-scrapingエンジンとして効果的に使う方法を解説します。 |
|
|
|
2005/03/22 |
|
| |
Javaの理論と実践: 初期化の原子性を使用可能にする 今回は、APIの設計手法として、self-returnイディオムを使うことによって、ある状況では、皆さんのAPIがユーザーにとって非常に使いやすくなることを説明します。 |
|
|
|
2005/04/27 |
|
| |
Javaの理論と実践: データベース無しにデータベース・クエリーを行う 今回のJavaの理論と実践では、一時的なデータに対して、SQLやXQueryなど操作用の金槌をどのように適用するかについて解説します。 |
|
|
|
2005/05/31 |
|
| |
Javaの理論と実践: 良き(イベント)リスナーであるために リスナーを登録したり、呼び出したりする際に一般的な落とし穴が、幾つかあります。今回のJavaの理論と実践では、Javaの治療師であるBrian Goetzが、良きリスナーであるための、そして、正しくリスナーに接するための良き助言を提案します。 |
|
|
|
2005/07/26 |
|
| |
Javaの理論と実践: 動的プロキシーで装飾する 動的プロキシー機能(dynamic proxy facility)はjava.lang.reflectパッケージの一部であり、JDKのバージョン1.3に追加されたものですが、この機能を利用すると、プログラムでプロキシー・オブジェクトを作ることができます。今回は、Brian Goetzが、動的プロキシーに関する幾つかのアプリケーションを調べます。 |
|
|
|
2005/08/30 |
|
| |
Javaの理論と実践: パフォーマンスに関する都市伝説を再検証する 掲示板やニュースグループでJavaのパフォーマンスに関する話題を見ると、JVMの実際の動作に関して、非常に大きな誤解があるようです。JVMではアロケーションが遅いという、繰り返し伝えられているパフォーマンスの迷信に対して、Brian Goetzが風穴を開けます。 |
|
|
|
2005/09/27 |
|
| |
Javaの理論と実践: 弱参照でメモリー・リークを塞ぐ この記事では、清掃技術者であるBrian Goetzが、意図せずにオブジェクトが残ってしまう場合についての一般的な原因を究明し、弱参照(weak reference)によって漏れ(leak)を防ぐ方法を解説します。 |
|
|
|
2005/11/22 |
|
| |
Javaの理論と実践: ソフト参照でメモリー・リークを塞ぐ 今回の記事では、Referenceオブジェクトの、もう一つの形式、『ソフト参照(soft reference)』を検証します。ソフト参照も、ガーベジ・コレクターの助けを借りてメモリーの使用管理を行い、また潜在的なメモリー・リークを防止するのです。 |
|
|
|
2006/01/24 |
|
| |
Javaの理論と実践: 疑似typedefアンチパターン Java 言語にジェネリックスが追加されたことによって、型システムが複雑になり、また多くの場合、変数やメソッド宣言の冗長性が増しています。型に短縮名を定義するための「typedef」機能が用意されていないため、開発者によっては「溺れる者がつかむ藁」としてエクステンションに頼ろうとし、望ましくない結果に終わっているようです。今回の『Javaの理論と実践』では、JavaのエキスパートであるBrian Goetzが、この「アンチパターン(antipattern)」の限界について説明します。 |
|
|
|
2006/02/21 |
|
| |
Javaの理論と実践: 良いハウスキーピング習慣を身につける ガーベジ・コレクションを利用すればリソース管理を無視できる場合が多いのですが、時には自分で掃除(ハウスキーピング)をする必要があります。今回の『Javaの理論と実践』では、Brian Goetzが、ガーベジ・コレクションの限界と、自分で掃除すべき場合について解説します。 |
|
|
|
2006/03/21 |
|
| |
Javaの理論と実践: ノンブロッキング・アルゴリズムの紹介 ノンブロッキング・アルゴリズムの設計と実装はきわめて困難になる場合がありますが、より高いスループットが期待でき、デッドロックや優先順位の逆転などのliveness(ライブネス)問題に対してより強固な対応が可能になります。今回の記事では、並行アルゴリズムの専門家であるBrian Goetzが、単純なノンブロッキング・アルゴリズムの仕組みを説明します。 |
|
|
|
2006/04/18 |
|
| |
Javaの理論と実践: 割り込み例外の処理 Thread.sleep() やObject.wait() など、JavaTM言語のメソッドの多くは割り込み例外をスローします。これはチェックされる例外なので無視することはできませんが、どう処理すればいいでしょうか。今月の「Javaの理論と実践」では、並行アルゴリズムの専門家であるBrian Goetzが割り込み例外とは何か、なぜスローされるのか、キャッチしたらどうすべきかについて説明します。 |
|
|
|
2006/05/23 |
|
| |
Javaの理論と実践: 効果的なテストを行う、第 2 回 6 月の Java の理論と実践コラムでは、FindBugs のような静的分析ツールが、特定のバグに焦点をあてずに、あらゆるカテゴリーのバグに焦点をあてることによって、どのようにソフトウェア品質の管理に影響を与えることができるのかを示しました。今月の記事では、バグつぶしのプロである Brian Goetz が、より本格的なバグ・パターン検出機能の構築とチューニングのプロセスについて、詳細に説明します。 |
|
|
|
2006/07/25 |
|
| |
Javaの理論と実践: JMX を使ったアプリのインスツルメンテーション デバッガーやプロファイラーはアプリケーションの動作の実態を教えてくれますが、私たちがこのようなツールを持ち出してくるのは通常、重大な問題が発生したときだけです。モニター・フックをアプリケーションに組み込めば、デバッガーを使用しなくてもプログラムが何を行っているか簡単に理解できるようになります。JMX (Java Management Extensions) が Java SE プラットフォームに統合され、jconsole ビューアーが汎用モニター GUI を提供するようになった今、これまで以上に簡単、効率的に JMX でアプリケーションにウィンドウを組み込めます。 |
|
|
|
2006/09/19 |
|
| |
Javaの理論と実践: Java 5 の言語機能を以前の JDK で使う Java 5 には、Generics や列挙、アノテーション、Autoboxing、そして拡張 for ループなど、いくつかの強力な言語機能が追加されています。しかし多くの職場では相変わらず JDK 1.4 やそれ以前のバージョンが使われており、今後もしばらく、それが続くかもしれません。しかしそうした職場の開発者も、Java 5 以前の JVM へのデプロイを続けながら、こうした強力な言語機能を利用できるのです。今回の「Java の理論と実践」では、久しぶりに戻ってきた Brian Goetz が、そのための方法を解説します。 |
|
|
|
2007/02/27 |
|
| |
Javaの理論と実践: volatile を扱う Java 言語に元々含まれている同期機構として、synchronized ブロック (およびメソッド) と volatile 変数の 2 つがあります。どちらも、スレッド・セーフにコードを描画するために提供されています。2 つのうち、volatile 変数の方が同期の仕組みとしては強力でない (しかし場合によると、より単純、あるいはコストが安い) のですが、誤った使い方をしやすいものでもあります。今回の Java の理論と実践では、Brian Goetz が volatile 変数を正しく使うためのパターンをいくつか調べ、volatile 変数を適用できる限界について注意を促します。 |
|
|
|
2007/06/19 |
|
| |
Javaの理論と実践: フォークを活用する、第 1 回 Java 7 で登場する java.util.concurrent パッケージに追加されているものの 1 つが、フォーク/ジョインのスタイルによる並列分割のフレームワークです。フォーク/ジョインによる抽象化では、さまざまなアルゴリズムを分解し、ハードウェアによる並列処理を効果的に活用するための機構が提供されています。このシリーズの次回の記事では、メモリー内のデータ構造に対する並列ソートや並列検索の操作を単純化することができる、ParallelArray クラスについて説明します。 |
|
|
|
2007/11/13 |
|
| |
Javaの理論と実践: フォークを活用する、第 2 回 Java 7 で登場する java.util.concurrent パッケージに追加されているものの 1 つが、フォーク/ジョインのスタイルによる並列分割のライブラリーです。このシリーズの第 1 回で著者の Brian Goetz が紹介したのは、さまざまなアルゴリズムを分解し、ハードウェアによる並列処理を効果的に活用するための機構を、フォーク/ジョインで提供する方法です。この第 2 回の記事では ParallelArray クラスについて説明します。ParallelArray クラスを利用すると、メモリー内のデータ構造に対する並列ソートや並列検索の操作を単純化することができます。 |
|
|
|
2008/03/04 |
|
| |
Javaの理論と実践: Generics のワイルドカードを使いこなす、第 1 回 Java 言語における Generics で最も複雑な部分の 1 つはワイルドカードであり、なかでもワイルドカードのキャプチャーの扱い、そしてワイルドカードのキャプチャーに関するわかりにくいエラー・メッセージは特に厄介です。「Java の理論と実践」シリーズの今回は、ベテランの Java 開発者である Brian Goetz が、javac から出力される奇妙なエラー・メッセージのいくつかを解読し、さらに Generics の使い方を単純化するための手法と回避策をいくつか提供します。 |
|
|
|
2008/05/06 |
|
| |
Java の理論と実践: Generics のワイルドカードを使いこなす、第 2 回 Java 言語での Generics のワイルドカードは非常にわかりにくく、最もよくある間違いは境界ワイルドカードが必要なときに、その 2 つの形式 (「? super T」 と「? extends T」) のうちの 1 つを使いそこねる、というものです。皆さんはこの間違いをしたことがあるでしょうか?もしあったとしても、それを恥じることはありません。エキスパートですら間違えることはあるのです。今月は、Brian Goetz がその間違いを避けるための方法を説明します。 |
|
|
|
2008/07/01 |
|
| |
Java の理論と実践: ステートフルな Web アプリケーションはすべて壊れているのか サーブレット・フレームワークが提供するセッション状態管理メカニズム、HttpSession はステートフルなアプリケーションを簡単に作成できるようにしますが、使い方を間違えやすいのも事実です。可変データ (JavaBeans クラスなど) に HttpSession を使用する Web アプリケーションのなかには、十分な調整をせずにこのメカニズムを使用しているために、並行性にさまざまな悪影響を及ぼす可能性を招いているものが数多くあります。 |
|
|
|
2008/09/23 |
|
| |