Apache Commons

Apache Commons（アパッチ コモンズ）は、Apacheソフトウェア財団の傘下にある再利用可能なJavaコンポーネントをまとめたApacheのトッププロジェクト。Commonsの目的は再利用可能なオープンソースJavaソフトウェアを提供することである。Commonsは三つの部分、proper（プロパー）, sandbox（サンドボックス）, dormant（活動休止）から構成されている。

Commonsにはjava.langパッケージの機能を拡張するLang、Javaのコレクションフレームワークを拡張するクラス群を集めたCollectionsなどがある。

 Commons Proper 
The Commons Properは役立つJavaコンポーネントを開発維持すること専用に作られている。Common Properはコラボレーションとシェアリングの役割を持っているが、Jakartaコミュニティの至る所からのディベロッパーがJakartaプロジェクトとJakartaユーザによってシェアされるためにプロジェクトで共に活動できる。

Commonディベロッパーはコンポーネントが他のソフトウェアライブラリに最小限に依存することを保証するよう努力する。それで、これらのコンポーネントは容易にデプロイ（配備）できる。加えて、Commonsコンポーネントは可能な限りインタフェースを保つ。それで、(他のJakartaサブプロジェクトを含む)Jakartaユーザはこれらのコンポーネントを、将来変更される心配無く実装することができる。

2006年8月にはこれらはCommons Properでは30以上のプロジェクトになり、5つの一般カテゴリに分類されている。
+ Commons Proper の一般カテゴリ一覧コンポーネントカテゴリ 例Web関連FileUpload, HTTPClient, and NetXML関連Betwixt, Digester, Jelly, and JXPathユーティリティBeanUtils, Configuration, Logging, DBCP, Pool, and ValidatorパッケージCodec and ModelerありふれたものCLI, Discovery, Lang, and Collections からの表

 サブプロジェクト 
 BCEL - Javaバイトコードを扱うライブラリ。
 BeanUtils - Java Beansをサポート。
 BSF
 Chain - GoFデザインパターンの一つ、Chain of Responsibility パターンをサポート。
 CLI
 Codec
 Collections - java.utilパッケージにあるコレクションフレームワークを拡張するクラス群。
 Compress - tar, ZIP, bzip2をサポート。
 Configuration - クラスのような設定ファイルを弄るクラス群。
 CSV
 Daemon
 DBCP - 関係データベースのコネクションプーリングをサポート。
 DBUtils - JDBCをサポートする。
 Digester
 Discovery
 EL
 Email - メールライブラリ
 Exec
 FileUpload - Java Servlet/JSPでのファイルアップロードをサポート。
 IO - java.ioパッケージをサポート。
 JCI
 Jelly
 Jexl
 JXPath
 Lang - java.langパッケージを拡張する。StringUtilsほか、, , , メソッドのオーバーライドを支援するクラスなどが存在する。
 Launcher
 Logging - ひとつのプログラムでJava Logging API(java.util.loggingパッケージ)やJakarta Log4Jを併用し、簡単に複数のロギングAPIを切り替えるときに便利なAPI。
 Math - クラスやjava.mathパッケージにはない数学ライブラリを提供。複素数や行列演算、統計学などのライブラリが揃っている。
 Modeler
 Net - java.netパッケージを拡張する。FTPなどのプロトコルを扱うことができる。
 Pool - Javaでのオブジェクトプーリングをサポート。
 Primitives
 Proxy
 SCXML
 Validator
 VFS
 Weaver

 Commons Lang 
Commons Lang には java.lang を拡張した物が入っている。

 例1 

Object.equals() を拡張した物。nullが入っていても比較が可能である。

String s1 = null;
String s2 = "abc";
if(ObjectUtils.equals(s1, s2)) {
    System.out.println("equal");
}

 例2 

Java のデフォルトの Object.toString() はメンバ変数の内容まで表示してくれないが、リフレクションを使用して、メンバ変数の内容を表示する形で、Object.toString() を実装する。

public String toString() {
    return ToStringBuilder.reflectionToString(this);
}

 Commons Collections 
Apache Commons Collections には、主に、java.util の Collection 関係の拡張した物が入っている。

 例 

Java 6 にはクロージャがないが、Predicate を実装することで、条件を満たす物を探すことができる。以下、リストから、a で始まる物を見つけ出す。

ArrayList<String> list = new ArrayList<String>();
list.add("apple");
list.add("banana");
list.add("ant");
Collection<?> aList = CollectionUtils.select(list, new Predicate() {
    public boolean evaluate(Object obj) {
        return ((String)obj).startsWith("a");
    }
});

 Commons Sandbox 

The Commons SandboxはJakartaコントリビュータがCommons Properに含まれていないプロジェクトで協業し実験する作業環境である。サンドボックスにあるプロジェクトはCommons Properの推進に関するJakartaのメンバによって支持されており、ディベロッパーのグループは彼らが推進に関して基準に満たすまでサンドボックスを一層よくするために活動している。

Apache CommonsにはCommons Sandboxのプロジェクトの現在のリストが存在する Sandbox page。

 Commons Dormant 
Commons Dormantは最近の開発活動が矮小化していることが原因で不活性と宣告されたコンポーネントの集合である。これらのコンポーネントは役に立つかも知れないが、あなた自身でビルドしなければならない。これらのコンポーネントは近い将来リリースされないと思ったほうが良い。

Apache Commonsには利用できるCommons Dormantプロジェクトの現在のリストが存在するDormant page。

 関連項目 
 Google Guava - Googleによって開発されているオープンソースのJavaユーティリティライブラリ群。後方互換性の確保を担保しているApache Commonsと違い、JDK 1.6以降を対象として開発されている。

 参考 

 外部リンク 
Apache Commons

Apache Commons
Apache Commons
Commons