6.5. 配信先メディア解決¶
IM-MessageHub では、発生したイベントに紐づくメッセージの配信可否を配信先メディア毎に解決します。この解決は、配信先メディア解決インタフェース (DeliveryMediaResolver) を実装したクラスで行います。
jp.co.intra_mart.foundation.message_hub.resolver.media.DeliveryMediaResolverDeliveryMediaResolver は、プラグイン形式で提供されており、プラグイン情報の取得順に実行されます。なお、配信先メディア解決の概要は「 配信先メディア解決 」を参照してください。
項目
6.5.1. 配信先メディア解決の追加方法¶
IM-MessageHub は配信先メディア解決を開発者が追加可能な機構となっています。ここでは、配信先メディア解決を作成する方法、および、作成した配信先メディア解決を IM-MessageHub で有効にする方法を説明します。注意
この章では「 IM-MessageHub を利用してメッセージを配信する 」で作成したサンプルを利用します。
6.5.1.1. 配信先メディア解決の作成¶
DeliveryMediaResolver インタフェースを実装し、配信先メディア解決を行う処理を作成します。ここでは、「 IM-MessageHub を利用してメッセージを配信する 」で作成した SampleMessageEvent イベントに関する配信の場合、全ての配信先メディアへの配信を行わないようにするサンプルを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 package sample.message_hub.media.resolver; import jp.co.intra_mart.foundation.message_hub.delivery.model.DeliveryAddress; import jp.co.intra_mart.foundation.message_hub.delivery.model.DeliveryMedia; import jp.co.intra_mart.foundation.message_hub.model.Event; import jp.co.intra_mart.foundation.message_hub.model.Message; import jp.co.intra_mart.foundation.message_hub.resolver.media.DeliveryMediaResolveException; import jp.co.intra_mart.foundation.message_hub.resolver.media.DeliveryMediaResolveResult; import jp.co.intra_mart.foundation.message_hub.resolver.media.DeliveryMediaResolveResultMap; import jp.co.intra_mart.foundation.message_hub.resolver.media.DeliveryMediaResolver; import sample.message_hub.event.SampleMessageEvent; public class SampleMediaResolver implements DeliveryMediaResolver<DeliveryAddress> { // 配信を行わないイベント private static final Event IGNORE_EVENT = new SampleMessageEvent(); @Override public void resolve(DeliveryMediaResolveResultMap resultMap, Event event, DeliveryAddress address, Message message) throws DeliveryMediaResolveException { // 特定のイベントの場合、配信を行わない if (IGNORE_EVENT.getId().equals(event.getId())) { // どの配信先メディアにも配信を行わない。 for (final DeliveryMedia media : resultMap.getDeliveryMediaSet()) { resultMap.updateResult(media, DeliveryMediaResolveResult.DISABLE); } } } @Override public Class<DeliveryAddress> getDeliveryAddressClass() { return DeliveryAddress.class; } }
表:実装の詳細 行番号 説明 19 DeliveryMediaResolver#resolve メソッドの実装です。このメソッドの引数として渡ってくる値の詳細は以下の通りです。
resultMap(DeliveryMediaResolveResultMap)配信先メディアと配信解決の判定結果を管理するモデルクラスです。このモデルクラスへ、キーとして判定を行った DeliveryMedia クラス、値として判定結果( DeliveryMediaResolverResult )をセットします。判定結果として設定可能な値は以下の通りです。
- DeliveryMediaResolveResult.ENABLE - 配信する。
- DeliveryMediaResolveResult.DISABLE - 配信しない。
- DeliveryMediaResolveResult.UNKNOWN - この処理段階では解決を保留する。
event(Event)配信メッセージに設定される配信元のイベントです。 address(DeliveryAddress)配信メッセージに設定される宛先のアドレスです。 message(Message)配信される予定のメッセージです。21 今回のサンプルで作成したイベントによる配信であるかをチェックしています。23-24 引数の resultMap に格納されている、配信先メディアのセットを取り出し、各配信先メディアに対して「配信しない( DeliveryMediaResolveResult.DISABLE )」という判定結果を設定しています。
6.5.1.2. 作成した配信先メディア解決の有効化¶
次に作成した配信先メディア解決を有効にします。IM-MessageHub は配信先メディア解決をプラグインによって管理しています。作成した配信先メディア解決を有効にするためのプラグインファイル(plugin.xml)の記述例は以下の通りです。この例を反映させた環境で再度サンプルのJSPを実行すると、 IMBox の ApplicationBox への配信が行われないようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?xml version="1.0" encoding="UTF-8"?> <plugin> <extension point = "jp.co.intra_mart.message_hub.DeliveryMediaResolver"> <delivery-media-resolver-config name = "Sample Media Resolver" id = "sample.message_hub.media.resolver" version = "8.0.0" rank = "50"> <resolver> <resolver-class>sample.message_hub.media.resolver.SampleMediaResolver</resolver-class> </resolver> </delivery-media-resolver-config> </extension> </plugin>
表:タグおよび属性の詳細 設定項目 説明 拡張ポイント jp.co.intra_mart.message_hub.DeliveryMediaResolver 固定です。 id この配信先メディア解決を一意に表すユニークな ID を指定します。rank この定義の実行順序を指定します。resolver-class に定義した配信クラスの実行順序に利用されます。なお、 intra-mart Accel Platform が提供している配信先メディア解決に設定されている rank の値は「 DeliveryMediaResolver 一覧 」を参照してください。resolver-class 作成した DeliveryMediaResolver の完全修飾クラス名(FQCN)を指定します。 注意
配信先メディア解決のランクについて
新しく作成した配信先メディア解決に設定するランクは「 10 - 299 」の範囲で設定してください。また、複数の配信先メディア解決を作成する場合は、以下の優先順位で設定することを推奨します。
- アプリケーションレベルで配信を停止したい場合。
- アプリケーションレベルで強制的に配信を行いたい場合。
- アプリケーションが独自に提供する通知設定機能で配信可否を決定したい場合。
コラム
予約済みの配信先メディア解決のランク一覧
intra-mart Accel Platform では、以下の配信先メディア解決のランクが予約されています。新しく作成する配信先メディア解決のランクには利用しないでください。
予約済みランク一覧 ランク 用途 ~9 メッセージ配信の停止、および、配信先メディアを限定する場合。 300~499 IM-MessageHub が提供する機能によって決定する優先順位を元に、メッセージの配信可否を判定する場合。 500~999 メッセージの配信可否が決定している場合でも、強制的に配信可否を更新する場合。 9999 メッセージの配信可否が決定しなかった際の初期状態を決定する場合。
6.5.2. DeliveryMediaResolver 一覧¶
intra-mart Accel Platform が提供している DeliveryMediaResolver は以下の通りです。
表:DeliveryMediaResolver 一覧 クラス名(単純名) ランク 説明 提供バージョン CheckEventRestrictionDeliveryMediaResolver 5 宛先ユーザがアプリケーションライセンスを持たない場合、メッセージ配信を行わないようにするためのクラスです。(イベントの親となるアプリケーション/イベントカテゴリにアプリケーションライセンスの設定がある場合のみ)2015 Spring(Juno) IMBoxSendToMeDeliveryMediaResolver 10 IMBox の「私にメール」に関するメッセージの配信先メディアを「メール」に限定するクラスです。 2014 Winter(Iceberg) IMBoxStandardDeliveryMediaResolver 20 IMBox に関するメッセージの配信先メディアを解決するクラスです。2015 Winter(Lydia) よりIMBoxの通知設定は「 メッセージ通知設定画面 」に統合されたため使用されていません。2014 Winter(Iceberg) ~ 2015 Summer(Karen) ImWorkflowDeliveryMediaResolver 50 IM-Workflow に関するメッセージの配信先メディアを解決するクラスです。2014 Winter(Iceberg) UserSettingDeliveryMediaResolver 400 「 メッセージ通知設定画面 」の設定を元にメッセージの配信先メディアを解決するクラスです。「配信する」・「配信しない」の判定は以下の優先順位で行われます。
「 メッセージ通知設定画面 」 の 設定値 「 イベントと配信先メディアに紐づく詳細な配信設定 」 の initial-check-state の 値 「 イベントに紐づく詳細な配信設定 」 の initial-check-state の 値 「 配信先メディア定義 」で設定された initial-check-state の 値2015 Spring(Juno) LegacyMailTemplate PreconditionCheckDeliveryMediaResolver 500 配信先メディアが「メール (immh.im_mail.legacy)」の場合、メール配信の前提条件が整っているかをチェックするクラスです。 2014 Winter(Iceberg) BlackListDeliveryMediaResolver 9999 メッセージの配信可否が決定しなかった配信先メディアに対して、「配信する」という結果を設定するクラスです。メッセージの配信可否が決定しなかった配信先メディアに対する判定結果を変更する方法は、「 配信可否の初期状態の変更 」を参照してください。2014 Winter(Iceberg)
6.5.3. 配信可否の初期状態の変更¶
IM-MessageHub では、ユーザによる配信設定が未設定などの理由で、配信先メディアに対するメッセージの配信可否が決定しなかった場合のために、2つの DeliveryMediaResolver を提供しています。(パッケージ名は、いずれも jp.co.intra_mart.foundation.message_hub.resolver.media です。)
表:提供するDeliveryMediaResolver クラス名 説明 BlackListDeliveryMediaResolver メッセージの配信可否が決定しなかった配信先メディアに対して「配信する」という結果を設定するクラスです。(初期状態ではこのクラスが有効となっています) WhiteListDeliveryMediaResolver メッセージの配信可否が決定しなかった配信先メディアに対して「配信しない」という結果を設定するクラスです。ここでは、初期状態で有効となっている BlackListDeliveryMediaResolver を、WhiteListDeliveryMediaResolver に変更する方法を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?xml version="1.0" encoding="UTF-8"?> <plugin> <extension point = "jp.co.intra_mart.message_hub.DeliveryMediaResolver"> <delivery-media-resolver-config name = "Overwrite Default Delivery Media Resolver" id = "jp.co.intra_mart.message_hub.StandardDeliveryMediaResolver" version = "8.0.1" rank = "9999"> <resolver> <resolver-class>jp.co.intra_mart.foundation.message_hub.resolver.media.WhiteListDeliveryMediaResolver</resolver-class> </resolver> </delivery-media-resolver-config> </extension> </plugin>
表:タグおよび属性の詳細 設定項目 説明 拡張ポイント jp.co.intra_mart.message_hub.DeliveryMediaResolver 固定です。 id jp.co.intra_mart.message_hub.StandardDeliveryMediaResolver 固定です。 resolver-class jp.co.intra_mart.foundation.message_hub.resolver.media.WhiteListDeliveryMediaResolver 固定です。 注意
version, rank は、既存のプラグインよりも優先して読み込まれるように設定してください。 BlackListDeliveryMediaResolver を、WhiteListDeliveryMediaResolver に変更した場合は、 必ず「 メッセージ通知設定画面における配信可否の初期値 」の変更も行ってください。
6.5.3.1. メッセージ通知設定画面における配信可否の初期値¶
「 配信可否の初期状態の変更 」を行った場合、メッセージ通知設定画面における配信可否の初期値を、変更した DeliveryMediaResolver にあわせて変更する必要があります。メッセージ通知設定画面における配信可否の初期値は、プラグイン形式で管理されています。ここでは、初期状態で有効となっている「配信する」を、WhiteListDeliveryMediaResolver にあわせて「配信しない」に変更する方法を示します。
1 2 3 4 5 6 7 8 <?xml version="1.0" encoding="UTF-8"?> <plugin> <extension point = "jp.co.intra_mart.message_hub.NotificationConfig"> <notification-config id = "jp.co.intra_mart.message_hub.NotificationConfig.Default" default-check-state = "unchecked" /> </extension> </plugin>
表:タグおよび属性の詳細 設定項目 説明 拡張ポイント jp.co.intra_mart.message_hub.NotificationConfig 固定です。 id jp.co.intra_mart.message_hub.NotificationConfig.Default 固定です。 default-check-state メッセージ通知設定画面における配信可否の初期値を設定します。設定可能な値は以下の通りです。
- checked - 配信する
- unchecked - 配信しない
未設定の場合は、checked (配信する)となります。