Nimbusは、SIerによるSIerのためのSI部品ライブラリです。 基盤としてDIコンテナを持ち、サービス(POJO)をホスティングし、アプリケーションに提供します。 また、ライフサイクルの概念があり、サービス間の依存関係の解決を行いながらライフサイクルを制御します。
バグFIX、機能追加、機能改善を行いました。
1. バグFIX
(1)jp.ossc.nimbus.beans.IndexedPropertyの不具合を修正
クラスの修飾子がpublicでなく、publicなインタフェースをimplementsしているクラスのpublicなプロパティを取得しようとすると、失敗する不具合を修正した。
(2)jp.ossc.nimbus.beans.MappedPropertyの不具合を修正
クラスの修飾子がpublicでなく、publicなインタフェースをimplementsしているクラスのpublicなプロパティを取得しようとすると、失敗する不具合を修正した。
(3)jp.ossc.nimbus.beans.SimplePropertyの不具合を修正
クラスの修飾子がpublicでなく、publicなインタフェースをimplementsしているクラスのpublicなプロパティを取得しようとすると、失敗する不具合を修正した。
(4)jp.ossc.nimbus.core.DefaultServiceManagerServiceのサービス依存関係制御の不具合を修正
サービスAの開始において、サービスAがサービスBに依存している場合、サービスBが開始できないとサービスAは開始できない仕様である。
同様に、サービスBがサービスCに依存している場合、サービスBが開始できる状態でも、サービスCが開始できなければ、サービスA、B共に開始できないできである。
しかし、サービスCが開始できない場合、サービスBの開始は一旦抑止されるが、サービスAの開始処理によって、サービスBが開始されてしまう不具合があった。
(5)jp.ossc.nimbus.core.GenericsFactoryServiceProxyの不具合を修正
service要素のfactory属性に"singleton"以外を指定している場合に、テンプレートオブジェクトが2回生成される問題を修正した。
(6)jp.ossc.nimbus.service.graph.CombinedDomainXYPlotFactoryServiceの不具合を修正
マルチスレッドでcreatePlot()メソッドを呼び出すと、java.util.ConcurrentModificationExceptionが発生する不具合を修正した。
(7)jp.ossc.nimbus.service.graph.DatabaseTimeSeriesCollectionFactoryServiceの不具合を修正
CollateDataType属性の値がCOLLATE_DATA_TYPE_AVERAGE、COLLATE_DATA_TYPE_OHLC、またはCOLLATE_DATA_TYPE_ALLの場合で、データ追加の際に直前のデータと時間が同じだった時にorg.jfree.data.general.SeriesExceptionが発生する不具合を修正した。
(8)jp.ossc.nimbus.service.graph.XYPlotFactoryServiceの不具合を修正
マルチスレッドでcreatePlot()メソッドを呼び出すと、java.util.ConcurrentModificationExceptionが発生する不具合を修正した。
(9)jp.ossc.nimbus.service.queue.DefaultQueueServiceの不具合を修正
64bit OSなどのスレッド並列性が高いOS上で稼動する時に、Queueが滞留する不具合を修正した。
(10)jp.ossc.nimbus.service.queue.DelayQueueServiceの不具合を修正
64bit OSなどのスレッド並列性が高いOS上で稼動する時に、Queueが滞留する不具合を修正した。
(11)jp.ossc.nimbus.service.semaphore.MemorySemaphoreの不具合を修正
64bit OSなどのスレッド並列性が高いOS上で稼動する時に、セマフォリソースが余っているのに使用されない不具合を修正した。
2. 変更
(1)直列化可能な全てのクラスにserialVersionUIDフィールドを追加
(2)jp.ossc.nimbus.beansパッケージのPropertyEditorで、エスケープシーケンスを編集できるようにした
"${\t}"、"${\n}"、"${\r}"、"${\f}"は、エスケープシーケンスとして置換される。
(3)jp.ossc.nimbus.beans.SortedMapEditorの機能追加
keyやvalueを"で囲む事で、エスケープできるようにした。
これによって、keyやvalueを空白にしたり、前後に空白を付加したりできるようになった。
また、keyにセパレータである=を含む事ができるようになった。
(4)jp.ossc.nimbus.core.MetaDataのサブクラスにXML出力機能を追加
サービス定義編集ツールNimbus Editorの開発着手に伴い、XML出力機能を追加した。
(5)jp.ossc.nimbus.core.DefaultServiceLoaderServiceにXML入力機能を追加
サービス定義編集ツールNimbus Editorの開発着手に伴い、XML入力機能を追加した。
(6)jp.ossc.nimbus.core.DefaultServiceManagerServiceの機能変更
・initStateで指定した状態になっているサービスは、依存関係の状態チェックを行わないようにした。
・service要素のfactory属性が"singleton"でなく、management属性がfalseの場合に、テンプレートインスタンスを保持するのをやめた。また、DynamicMBean用の情報を構築するのもやめた。(性能向上対策)
・service要素にcreateTemplate属性を追加した。この属性をfalseにすると、service要素のfactory属性が"singleton"でない場合に、サービスの開始時に行っていたテンプレートの生成テストを行わないようになる。
(7)jp.ossc.nimbus.core.FactoryServiceBaseに属性追加
CreateTemplateOnStart属性を追加した。
この属性をfalseにすると、サービスの開始時に行っていたテンプレートの生成テストを行わないようになる。
(8)jp.ossc.nimbus.core.MetaDataの機能追加
XML要素に対するコメントを読み込み保持する機能を追加した。
(9)jp.ossc.nimbus.ioc.Commandインタフェース変更
public Throwable getException()メソッドを追加した。
(10)jp.ossc.nimbus.service.aspectからjp.ossc.nimbus.service.aopへの移行
Nimbus IOCに、jp.ossc.nimbus.service.aopパッケージのInterceptorを挟めるようにした。
今後は、アスペクト指向まわりの実装は、jp.ossc.nimbus.service.aopパッケージのみで行うようにする。
但し、下位互換性保持のためjp.ossc.nimbus.service.aspectパッケージは、しばらく残す。
(11)jp.ossc.nimbus.recset.RecordSetインタフェース変更
public int updateRecords()メソッドを追加した。
(12)jp.ossc.nimbus.service.aop.interceptor.servlet.ExceptionHandlingInterceptorServiceの仕様変更
・JSPへのフォワード機能を削除して、ExceptionHandlerの実装に委譲した。
・ExceptionAndHandlerMapping属性を指定せずに、DefaultExceptionHandlerServiceName属性で指定したデフォルトのExceptionHandlerだけでも動作できるようにした。
・javax.jms.JMSException#getLinkedException()の例外もハンドリングできるようにした。
(13)jp.ossc.nimbus.service.aop.interceptor.servlet.ThreadContextInitializeInterceptorServiceの属性追加
InitializeRecursiveCall属性を追加した。この属性をfalseにすると、このインターセプタが再帰的に呼び出された場合は、初期化処理を行わないようにできる。
(14)jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerAccessImpl2の機能追加
・flow要素、step要素にforceFreeTimeout属性を追加した。
業務フロー及び業務ステップの流量制御時に、処理が一定時間以上詰まってしまった場合に、強制的に流量制御用のセマフォを開放する設定ができるようにした。
・flow要素、step要素の子要素としてcatch要素を追加した。
業務フロー及び業務ステップの処理中に、例外が発生した場合に例外を捕捉して、業務ステップを実行できるようにした。
・flow要素、step要素の子要素としてfinally要素を追加した。
業務フロー及び業務ステップの処理の最後に業務ステップを実行できるようにした。
・flow要素及びcallflow要素にtransaction属性を追加した。
業務フロー及び業務フロー呼び出しに対して、JTAを使った宣言的トランザクション制御を可能にした。
・flow要素及びcallflow要素にtrantimeout属性を追加した。
業務フロー及び業務フロー呼び出しに対して、JTAを使った宣言的トランザクション制御を行う場合に、トランザクションのタイムアウトを設定可能にした。
・callflow要素の子要素に指定できるargument要素を、複数指定可能にした。
複数指定した場合は、呼び出される側のflowでは、引数が配列として渡ってくる。
・for要素にindex属性を追加した。
index属性で、繰り返し回数を変数として参照する事ができるようにした。
・for要素の子要素target要素を必ずしも指定しなくても良いようにした。
何らかの繰り返し要素をループするだけでなく、単純に指定回数のループもできるようにした。
・ジャーナルの出力内容を追加した。
(15)jp.ossc.nimbus.service.beancontrol.DefaultBeanFlowInvokerFactoryServiceの属性追加
InterceptorChainFactoryServiceName属性を追加した。
BeanFlowの名前をキーにして、BeanFlow自体にInterceptorを挟み込めるようになった。
(16)jp.ossc.nimbus.service.graph.AbstractTickUnitAdjusterServiceの動作変更
軸ラベルの1番目の値を基準にTickUnit公約数マップサービスから公約数を取得するようにした。
(17)jp.ossc.nimbus.service.graph.DateAxisTickUnitAdjusterServiceを変更
・ZeroLength属性を追加した。軸の範囲を自動調整にしている場合に、軸の範囲が設定されていない時に、軸の範囲長をいくつにするかを設定できる。
・軸の範囲を自動調整にしている場合に、最低でも目盛りが1つは表示されるように、軸の範囲を目盛り長の2倍にするようにした。
(18)jp.ossc.nimbus.service.ioccall.DefaultFacadeCallServiceの属性追加
・JMSMessageProperty属性を追加した。非同期呼び出しをする場合に、JMS Messageに設定するプロパティを設定できるようにした。
・HeaderNamesForJMSMessageProperty属性を追加した。非同期呼び出しをする場合に、FacadeValueのヘッダからJMS Messageに設定するヘッダ名とプロパティ名のマッピングを設定できるようにした。
・JMSType属性を追加した。非同期呼び出しをする場合に、JMS Messageに設定するJMSタイプを設定できるようにした。
・JMSExpiration属性を追加した。非同期呼び出しをする場合に、JMS Messageに設定するメッセージ有効期限を設定できるようにした。
(19)jp.ossc.nimbus.service.ioccall.interceptor.DefaultAsynchCallInterceptorServiceの変更
・RedeliveryInterval属性を追加した。再配信された場合に、一定時間sleepできるようにした。
・jp.ossc.nimbus.service.aop.Interceptorを実装した。
(20)jp.ossc.nimbus.service.jms.JMSMessageConsumerFactoryServiceの動作変更
引数にSessionを持たないcreateConsumer()メソッドを呼び出された時に、SessionCreate属性がfalseの時は、毎回Sessionを生成するようにした。
(21)jp.ossc.nimbus.service.jms.JMSMessageProducerFactoryServiceの動作変更
引数にSessionを持たないcreateProducer()メソッドを呼び出された時に、SessionCreate属性がfalseの時は、毎回Sessionを生成するようにした。
(22)jp.ossc.nimbus.service.jndi.CachedJndiFinderServiceを変更
・DeadJNDIServerLogMessageId属性を追加した。監視対象のJNDIサーバが死んだ場合に出力するログのメッセージIDを指定できるようにした。
・RecoverJNDIServerLogMessageId属性を追加した。監視対象のJNDIサーバが生き返った場合に出力するログのメッセージIDを指定できるようにした。
・jp.ossc.nimbus.service.keepalive.KeepAliveCheckerインタフェースを実装した。
(23)jp.ossc.nimbus.service.keepalive.smtp.SmtpKeepAliveCheckerのインタフェース変更
public int getHostPort()メソッドを追加した。
(24)jp.ossc.nimbus.service.keepalive.smtp.SmtpCheckerServiceの変更
・ConnectionTimeoutMillis属性を追加した。SMTPのヘルスチェック時のソケット接続タイムアウトを指定できるようにした。
・SmtpKeepAliveCheckerインタフェースに変更に伴い、public int getHostPort()メソッドを実装した。
(25)jp.ossc.nimbus.service.proxy.invoker.JMXClientRMICallInvokerServiceの変更
MBeanQuery属性とObjectNameRegex属性を追加した。
これまでは、ObjectName属性によって、静的に名前を指定するしかなかったが、MBeanQuery属性で指定したクエリを発行して見つかったMBeanの中から、ObjectNameRegex属性で指定した正規表現で特定したMBeanを呼び出す事ができるようになった。
(26)jp.ossc.nimbus.service.proxy.invoker.RemoteClientMethodCallInvokerServiceの動作変更
クライアント側では、呼び出すサービス名を指定しなくても良いようにした。
(27)jp.ossc.nimbus.service.writer.PropertyWritableRecordFactoryServiceの属性追加
IterateFormatKeyMapping属性とIterateFormat属性を追加した。
createRecord()メソッドの引数のオブジェクト内に、配列やリストなどの繰り返し構造を持つ時に、それらを繰り返し要素であるIterateWritableElementに編集する機能を追加した。
(28)jp.ossc.nimbus.service.writer.OneWriteFileMessageWriterServiceの属性追加
・Append属性を追加した。追加書き込みをサポートした。
・Separator属性を追加した。追加書き込み時に、セパレータを出力する機能を追加した。
(29)jp.ossc.nimbus.service.writer.ThrowableSimpleElementの動作変更
javax.jms.JMSException#getLinkedException()の例外も出力できるようにした。
(30)jp.ossc.nimbus.service.writer.SimpleElementの属性追加
NullString属性を追加した。要素の値がnullの時に、toString()メソッドで返す文字列を指定できるようにした。
(31)jp.ossc.nimbus.service.writer.db.DatabaseWriterServiceを変更
・AutoCommit属性を追加した。
自動的にコミットまたはロールバックを行う機能を追加した。
・UpdateSQL属性、DeleteSQL属性、SelectSQL属性を追加した。
各属性の組み合わせによって、SELECTしてレコードがあればUPDATE、なければINSERTのような動作を可能にした。
・スレッドセーフにした。
3. 追加
(1)jp.ossc.nimbus.beans.MapEditorを追加
key1=value1
key2=value2
:
という形式の文字列を、順序性を保持するMapであるjava.util.LinkedHashMapに編集するPropertyEditorを追加した。
(2)jp.ossc.nimbus.service.aop.InterceptorChainFactoryを追加
jp.ossc.nimbus.service.aspectからjp.ossc.nimbus.service.aopへの移行に際して、jp.ossc.nimbus.service.aspect.DefaultInterceptorChainInvokerFactoryServiceの代替機能として、InterceptorChainFactoryインタフェースを追加した。
(3)jp.ossc.nimbus.service.aop.DefaultInterceptorChainFactoryServiceを追加
InterceptorChainFactoryインタフェースのデフォルト実装クラスとして追加した。
(4)jp.ossc.nimbus.service.aop.interceptor.ThreadContextInitializeInterceptorServiceを追加
スレッドコンテキストの初期化を行うInterceptorサービスを追加した。
(5)jp.ossc.nimbus.service.aop.interceptor.ThreadContextKeyを追加
ThreadContextInitializeInterceptorServiceがスレッドコンテキストに設定する情報のコンテキストキー定数を定義したインタフェースを追加した。
(6)jp.ossc.nimbus.service.aop.interceptor.servlet.DefaultExceptionHandlerServiceを追加
例外のハンドリングするExceptionHandlerインタフェースのデフォルト実装サービスを追加した。
(7)jp.ossc.nimbus.service.aspect.AOPInterceptorAdaptorInterceptorServiceを追加
jp.ossc.nimbus.service.aop.Interceptorインタフェースを実装したインターセプタをjp.ossc.nimbus.service.aspect.interfaces.Interceptorインタフェースを実装したインターセプタに見せかけるアダプタサービスを追加した。
(8)jp.ossc.nimbus.service.ioccall.interceptor.ExceptionHandlingInterceptorServiceを追加
Nimbus IOCに挟む例外ハンドリングインターセプタサービスを追加した。
(9)jp.ossc.nimbus.service.ioccall.interceptor.ExceptionHandlerを追加
jp.ossc.nimbus.service.ioccall.interceptor.ExceptionHandlingInterceptorServiceが例外ハンドリングに使用する例外ハンドラインタフェースを追加した。
(10)jp.ossc.nimbus.service.ioccall.interceptor.DefaultExceptionHandlerServiceを追加
jp.ossc.nimbus.service.ioccall.interceptor.ExceptionHandlerインタフェースのデフォルト実装サービスを追加した。
(11)jp.ossc.nimbus.service.ioccall.interceptor.JournalInterceptorServiceを追加
Nimbus IOCに挟むジャーナル出力インターセプタサービスを追加した。
(12)jp.ossc.nimbus.service.journal.editor.CommandJournalEditorServiceを追加
jp.ossc.nimbus.ioc.Commandを文字列に編集するJournalEditorサービスを追加した。
(13)jp.ossc.nimbus.service.journal.editor.FacadeValueJournalEditorServiceを追加
jp.ossc.nimbus.ioc.FacadeValueを文字列に編集するJournalEditorサービスを追加した。
(14)jp.ossc.nimbus.service.journal.editor.UnitOfWorkJournalEditorServiceを追加
jp.ossc.nimbus.ioc.UnitOfWorkを文字列に編集するJournalEditorサービスを追加した。
(15)jp.ossc.nimbus.service.keepalive.KeepAliveCheckerSelectorを追加
グルーピングされたjp.ossc.nimbus.service.keepalive.KeepAliveCheckerから、任意のロジックで生存している1つのKeepAliveCheckerを選択する機能を提供するインタフェースを追加した。
(16)jp.ossc.nimbus.service.keepalive.AbstractKeepAliveCheckerSelectorServiceを追加
jp.ossc.nimbus.service.keepalive.KeepAliveCheckerSelectorインタフェースを実装した抽象サービスを追加した。
(17)jp.ossc.nimbus.service.keepalive.FirstAvailableKeepAliveCheckerSelectorServiceを追加
jp.ossc.nimbus.service.keepalive.KeepAliveCheckerSelectorインタフェースの実装サービスを追加した。
KeepAliveCheckerの選択アルゴリズムは、「最初に見つかった生存しているKeepAliveChecker」である。
(18)jp.ossc.nimbus.service.keepalive.RoundRobinKeepAliveCheckerSelectorServiceを追加
jp.ossc.nimbus.service.keepalive.KeepAliveCheckerSelectorインタフェースの実装サービスを追加した。
KeepAliveCheckerの選択アルゴリズムは、「生存しているKeepAliveCheckerを順次選択する」である。
(19)jp.ossc.nimbus.service.writer.CryptElementを追加
暗号化サービスを使って、値を暗号化するWritableElementインタフェース実装クラスを追加した。
(20)jp.ossc.nimbus.service.writer.IterateWritableElementを追加
繰り返し要素を表現するためのWritableElementインタフェース実装クラスを追加した。
(21)jp.ossc.nimbus.service.writer.mail.MailWriterServiceを追加
Java Mailを使って、メールを送信するjp.ossc.nimbus.service.writer.MessageWriterインタフェースの実装サービスを追加した。