[基本機能]メッセージ管理

アプリケーション開発において、ユーザに対して表示するメッセージ、運用者に対してログ出力するメッセージなど、様々なメッセージが必要とされます。
それらのメッセージは、開発者が無作為にソースに埋め込んでいくと、文言の修正や統一などの要件が出た場合に、大きな修正コストが発生します。
メッセージにIDを付与して一元的に管理し、ソースにはIDのみを埋め込む事で、上記の問題は解決できます。

このように、アプリケーション開発で何らかのメッセージ出力を行う場合、必要となる要件を以下に列挙します。

  1. メッセージを管理するためにメッセージには一意に識別するIDを付与する必要があります。
  2. IDを付与したメッセージの定義は、管理、変更が容易にできるように外部リソースに外出しする必要があります。
  3. 国際化対応するために、メッセージ定義リソースは、国や言語などのロケール毎に定義できる必要があります。
  4. メッセージを出力する際には、動的に変わる部分もあるので、埋め込みメッセージが可能である必要があります。また、埋め込み部分は、運用上マスクする必要がある場合があります。
  5. メッセージ定義には、IDとメッセージ以外にも、任意の情報を持たせる事ができるように拡張が用意である必要があります。

Nimbusでは、これらの要件を満たすメッセージ管理サービスを提供します。

関連するパッケージは、以下です。

アプリケーション向けインタフェース MessageRecordFactory

アプリケーション向けインタフェースMessageRecordFactoryを使った簡単なアプリケーションのサンプルを示します。

  1. import java.util.Locale;
  2. import jp.ossc.nimbus.core.ServiceManagerFactory;
  3. import jp.ossc.nimbus.service.message.MessageRecordFactory;
  4. // MessageRecordFactoryを取得
  5. MessageRecordFactory factory = (MessageRecordFactory)ServiceManagerFactory.getServiceObject("MessageRecordFactory");
  6. // メッセージを取得
  7. String message1 = factory.findMessage("MSG_001");
  8. System.out.println(message1);
  9. // 埋め込みメッセージを取得
  10. String message2 = factory.findEmbedMessage("MSG_002", "太郎");
  11. System.out.println(message2);
  12. // ロケール指定メッセージを取得
  13. String message3 = factory.findEmbedMessage(Locale.ENGLISH, "MSG_003", new Object[]{"Tarou", "Hanako"});
  14. System.out.println(message3);

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.message.MessageRecordFactoryServiceCSV形式のメッセージ定義ファイルで、メッセージを管理する

メッセージ管理機能は、Nimbus自体にとっても必須機能であるため、Nimbus自体が内部にデフォルトのMessageRecordFactoryを持っています。
このMessageRecordFactoryは、内部で生成しているため、自由な設定はできません。Nimbus自体が持つメッセージ定義のみ管理しています。
このデフォルトのMessageRecordFactoryは、以下のように取得できます。

  1. import jp.ossc.nimbus.core.ServiceManagerFactory;
  2. import jp.ossc.nimbus.service.message.MessageRecordFactory;
  3. MessageRecordFactory message = ServiceManagerFactory.getMessageRecordFactory();

デフォルトMessageRecordFactory自体に設定を行う事はできませんが、デフォルトMessageRecordFactoryを差し替える事で、任意のMessageRecordFactoryを使用する事ができます。
デフォルトMessageRecordFactoryを差し替えるには、サービス定義で以下のように設定します。

  1. <?xml version="1.0" encoding="Shift_JIS"?>
  2. <!DOCTYPE server PUBLIC
  3. "-//Nimbus//DTD Nimbus 1.0//JA"
  4. "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
  5. <server>
  6. <message>MessageRecordFactory</message>
  7. <manager>
  8. <!-- ユーザ定義の任意のMessageRecordFactoryサービス -->
  9. <service name="MessageRecordFactory"
  10. code="jp.ossc.nimbus.service.message.MessageRecordFactoryService">

メッセージ管理機能は、サービスの実装においても必須機能となります。
サービスを実装する場合に、jp.ossc.nimbus.core.ServiceBaseを継承すると、デフォルトMessageRecordFactoryを以下のように使用する事ができます。

  1. import jp.ossc.nimbus.core.ServiceBase;
  2. import jp.ossc.nimbus.service.message.MessageRecordFactory;
  3. public class SampleService extends ServiceBase{
  4. public void startService() throws Exception{
  5. MessageRecordFactory message = getMessageRecordFactory();

上記のServiceBaseを継承したサービスから取得できるMessageRecordFactoryは、サービス毎に差し替える事もでき、以下のように定義します。

  1. <?xml version="1.0" encoding="Shift_JIS"?>
  2. <!DOCTYPE server PUBLIC
  3. "-//Nimbus//DTD Nimbus 1.0//JA"
  4. "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
  5. <server>
  6. <manager>
  7. <!-- ServiceBaseを継承したサービス -->
  8. <service name="Sample"
  9. code="SampleService">
  10. <!-- Loggerサービスのサービス名を指定する。 -->
  11. <attribute name="SystemMessageRecordFactoryServiceName">#MessageRecordFactory</attribute>
  12. <depends>MessageRecordFactory</depends>
  13. </service>
  14. <!-- ユーザ定義の任意のMessageRecordFactoryサービス -->
  15. <service name="MessageRecordFactory"
  16. code="jp.ossc.nimbus.service.message.MessageRecordFactoryService">

また、特定のサービスマネージャ配下の全てのServiceBaseを継承したサービスのMessageRecordFactoryを差し替える事もでき、以下のように定義します。

  1. <?xml version="1.0" encoding="Shift_JIS"?>
  2. <!DOCTYPE server PUBLIC
  3. "-//Nimbus//DTD Nimbus 1.0//JA"
  4. "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
  5. <server>
  6. <manager>
  7. <message>MessageRecordFactory</message>
  8. <!-- ServiceBaseを継承したサービス -->
  9. <service name="Sample1"
  10. code="SampleService"/>
  11. <!-- ServiceBaseを継承したサービス -->
  12. <service name="Sample2"
  13. code="SampleService"/>
  14. <!-- ユーザ定義の任意のMessageRecordFactoryサービス -->
  15. <service name="MessageRecordFactory"
  16. code="jp.ossc.nimbus.service.message.MessageRecordFactoryService">

サンプルは、以下。