カスタムリモート関数の追加

カスタムバンドルを作成し、式内で使用するための独自のリモート関数を書き出すことができます。exm.service=true エントリは、式マネージャーに対して、式での使用に適したリモート関数をサービスに含めるように指示します。<service_id> 値は、有効な Java 識別子である必要があります(英数字、$、_ のみ。他の特殊文字は使用できません)。REMOTE_ キーワードがプレフィックスとして含まれるこの値により、式で使用されるプレフィックスが作成されます。例えば、BluePrint サービスプロパティ内の注釈付きメソッド bar() およびサービス ID foo とのインターフェイスは、REMOTE_foo:bar() を使用して式内で参照できます。カスタムバンドルを作成して独自のリモート関数を書き出すには、次のタスクを実行します。
  1. Expression Manager クラス、具体的には com.adobe.exm.expeval パッケージがバンドルのマニフェストに読み込まれていることを確認します。

  2. Expression Manager で使用するために書き出されているメソッドが含まれる OSGi サービスのインターフェイスを定義します。

  3. インターフェイス A のメソッドを宣言し、@ServiceMethod 注釈を設定します(com.adobe.exm.expeval.ServiceMethod)。Expression Manager では、注釈が付いていないメソッドはすべて無視されます。ServiceMethod 注釈のオプションの属性を次に示します。この属性を指定することもできます。

    • enabled:メソッドが有効かどうかを判断します。Expression Manager では、無効なメソッドは無視されます。

    • familyId:メソッドのファミリー(グループ)を指定します。空の場合、Expression Manager では、メソッドがデフォルトのファミリーに属するものと見なします。関数が選択されたファミリーのレジストリはありません(デフォルトのファミリーを除く)。Expression Manager では、様々なバンドルによって書き出されたすべての関数で指定されているすべてのファミリー ID を取得することで、レジストリが動的に作成されます。ここで指定された ID は式オーサリングユーザーインターフェイスにも表示されるので、適切に判読できることを確認します。

    • displayName:人が判読できる関数名。この名前は、オーサリングユーザーインターフェイスに表示されます。空の場合、Expression Manager では、関数のプレフィックスとローカル名を使用してデフォルトの名前が作成されます。

    • description:関数の詳細な説明。この説明は、オーサリングユーザーインターフェイスに表示されます。空の場合、Expression Manager では、関数のプレフィックスとローカル名を使用してデフォルトの説明が作成されます。

メソッドのパラメーターには、@ServiceMethodParameter 注釈を使用して、オプションで注釈を設定することもできます(com.adobe.exm.expeval.ServiceMethodParameter)。この注釈は、オーサリングユーザーインターフェイスで使用される、人が判読できるメソッドパラメーターの名前と説明を指定するときにのみ使用されます。
  1. インターフェイスメソッドのパラメーターおよび戻り値が、次の型のいずれかに属していることを確認してください。

    • java.lang.String

    • java.lang.Character

    • char

    • java.lang.Boolean

    • boolean

    • java.lang.Integer

    • int

    • java.lang.Short

    • short

    • java.lang.Byte

    • byte

    • java.lang.Double

    • double

    • java.lang.Long

    • long

    • java.lang.Float

    • float

    • java.util.Calendar

    • java.util.Date

  2. インターフェイスの実装を定義して、それを Spring bean として設定し、BluePrint 経由で OSGi サービスとして書き出します。このとき、次の特別なプロパティを指定します。
    <bp:service interface="A" ref="<bean_id_of_Impl_of_Interface_A> "> 
        <bp:service-properties> 
           <entry key="connectors.httpinvoker" value="true" /> 
           <entry key="connectors.httpinvoker.alias" value="/<service_id> " /> 
           <entry key="connectors.remoting" value="true" /> 
           <entry key="connectors.remoting.id" value="<service_id>" /> 
           <entry key="exm.service" value="true" /> 
        </bp:service-properties> 
    </bp:service>