nimbus (1.2.4) | 2018-01-25 20:02 |
nimbus-sample (1.2.4) | 2018-01-26 17:06 |
jp.ossc.nimbus.service.aop.interceptor.IncompatibleExceptionWrapInterceptorServiceは、クラスファイルに互換性のない例外クラスをラップして伝搬するInterceptor実装サービスです。
システムを長く運用すると、ソフトウェアのバージョンアップに迫られます。しかし、複数のサーバから構成されるシステムにおいては、全てのサーバを足並み揃えて、バージョンアップを行う事にリスクが生じる場合があります。
そのような場合、サーバ単位でバージョンアップを検討したいのですが、RMIなどを利用してサーバ同士が連結している場合に、機能的な互換性はあるものの例外クラスが拡張されているために、呼び出し先のサーバで発生した例外を非直列化する事ができずに、例外を伝搬できないケースがあります。
このインターセプタは、発生した例外の情報をIncompatibleExceptionWrapExeptionの中に包含させてthrowし、例外を受け取る側のサーバに、このインターセプタと対になるIncompatibleExceptionUnwrapInterceptorServiceを定義しておく事で、IncompatibleExceptionWrapExeptionから発生した例外の情報を取り出してthrowし直し、例外クラスのクラスファイルの互換性問題を解決する事ができます。
以下に簡単なサービス定義を示します。
- <?xml version="1.0" encoding="Shift_JIS"?>
- <!DOCTYPE server PUBLIC
- "-//Nimbus//DTD Nimbus 1.0//JA"
- "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
- <server>
- <manager>
- <!-- クラスファイルに互換性のない例外クラスをラップして伝搬するInterceptorサービス -->
- <service name="IncompatibleExceptionWrapInterceptor"
- code="jp.ossc.nimbus.service.aop.interceptor.IncompatibleExceptionWrapInterceptorService">
- <!-- クラスファイルに互換性のない例外クラスを設定する -->
- <attribute name="IncompatibleExceptions">sample.SampleException</attribute>
- </service>
- </manager>
- </server>