Seam Solder の機能

Seam 3.1が提供するモジュールのひとつであるSolderを調べましょう。Solderは、CDIのアプリケーションやCDI拡張モジュールの開発で便利に使える、次のようなユーティリティ的機能を提供します。

  • CDIプログラミングモデルの改善
  • アノテーションリテラル
  • Unified ELの評価
  • リソースローディング
  • ロギング
  • AnnotationおよびAnnotatedType ユーティリティ
  • BeanManager参照の取得
  • Beanユーティリティ
  • プロパティ操作
  • プロデューサーメソッドのunwrap
  • デフォルトBeans
  • ジェネリック Beans
  • サービスハンドラー
  • Solder Config (XMLによる構成)
  • Solder Servlet
  • 例外ハンドリング

簡単に言うと、SolderはCDIプログラミングの生産性を向上させてくれるものです。ロギングモジュールやXMLによる設定、例外ハンドリングなど、CDIアプリケーションが使うプログラミング上の共通機能を提供します。

また、SolderはCDIの拡張モジュールを作成するための土台となる共通ライブラリも提供します。例えば、InjectionTargetやAnnotatedTypeのデフォルト上書きするために無名クラスを作成してメソッドをオーバーライドするなど、少々プログラミング上扱いづらい点も散見されました。Solderはこれらのインタフェース実装を簡単にするための抽象クラスを提供してくれます。

このブログではこれからSolderの機能の紹介をしようと思いますが、Solderの提供機能は多いので紹介する内容を重要なものに絞りたいと思います。そこで、まず最初に、Seamのソースコード上でSolderのどの機能がよく使われているか調べます。具体的な方法としては、Seam 3.1のexamplesの中でSolderパッケージをimportしている箇所をgrepして、モジュール別のimportの頻度を調べます。正確には、アノテーションの出現頻度を見る方が正確しかもしれませんが、これでも大体の傾向はつかめるでしょう。

$ grep -r "import org.jboss.solder" seam-3.1.0.Final/examples/ | awk -F":" '{print $2}' | sed 's/import //' | tr -d '\r' | sort | uniq -c | sort -r
13 org.jboss.solder.logging.Logger;
4 org.jboss.solder.servlet.event.Initialized;
4 org.jboss.solder.exception.control.HandlesExceptions;
4 org.jboss.solder.exception.control.Handles;
4 org.jboss.solder.exception.control.CaughtException;
4 org.jboss.solder.core.Veto;
3 org.jboss.solder.servlet.WebApplication;
3 org.jboss.solder.core.ExtensionManaged;
1 org.jboss.solder.resourceLoader.Resource;
1 org.jboss.solder.reflection.Reflections;
1 org.jboss.solder.messages.Message;
1 org.jboss.solder.logging.TypedCategory;
1 org.jboss.solder.logging.MessageLogger;
1 org.jboss.solder.logging.Logger.Level;
1 org.jboss.solder.logging.Log;
1 org.jboss.solder.core.Client;

次は、同様に、Seam 3.1が提供する拡張モジュールのソースコードを調べます(量が多いので1回しか登場しないものは割愛しています)。

grep -r "import org.jboss.solder" seam-3.1.0.Final/source/org/jboss/seam/ | awk -F":" '{print $2}' | sed 's/import //' | tr -d '\r' | sort | uniq -c | sort -r
105 org.jboss.solder.logging.Logger;
24 org.jboss.solder.core.Veto;
17 org.jboss.solder.core.Requires;
11 org.jboss.solder.beanManager.BeanManagerLocator;
10 org.jboss.solder.reflection.Reflections;
9 org.jboss.solder.reflection.annotated.AnnotatedTypeBuilder;
8 org.jboss.solder.reflection.AnnotationInspector;
8 org.jboss.solder.exception.control.ExceptionToCatch;
7 org.jboss.solder.literal.DefaultLiteral;
7 org.jboss.solder.el.Expressions;
5 org.jboss.solder.core.Client;
4 org.jboss.solder.util.service.ServiceLoader;
4 org.jboss.solder.util.Sortable;
4 org.jboss.solder.core.ExtensionManaged;
4 org.jboss.solder.bean.defaultbean.DefaultBean;
3 org.jboss.solder.servlet.event.Initialized;
3 org.jboss.solder.servlet.event.Destroyed;
3 org.jboss.solder.properties.Property;
3 org.jboss.solder.literal.AnyLiteral;
3 org.jboss.solder.exception.control.TraversalMode;
3 org.jboss.solder.exception.control.Precedence;
3 org.jboss.solder.exception.control.HandlesExceptions;
3 org.jboss.solder.exception.control.Handles;
3 org.jboss.solder.exception.control.CaughtException;
3 org.jboss.solder.beanManager.BeanManagerAware;
3 org.jboss.solder.bean.ContextualLifecycle;
2 org.jboss.solder.reflection.annotated.Annotateds;
2 org.jboss.solder.properties.query.PropertyQueries;
2 org.jboss.solder.properties.query.PropertyCriteria;
2 org.jboss.solder.literal.NamedLiteral;
2 org.jboss.solder.literal.ApplicationScopedLiteral;
2 org.jboss.solder.bean.ImmutableInjectionPoint;
2 org.jboss.solder.bean.Beans;
2 org.jboss.solder.bean.BeanBuilder;

これらの結果をみると、両方でのケースでLoggerや例外ハンドリング、@Vetoアノテーションの頻度が高そうです。@Vetoは「CDIプログラミングモデルの改善」で導入されたアノテーションです。次回以降では、これらについて調べていきましょう。

%d人のブロガーが「いいね」をつけました。