Benutzerdefinierte Remote-Funktionen hinzufügen

Sie können ein benutzerdefiniertes Bundle erstellen, um Ihre eigenen Remote-Funktionen zur Verwendung in Ausdrücken zu exportieren. Der Eintrag exm.service=true meldet Expression Manager, dass der Dienst Remote-Funktionen enthält, die für die Verwendung in Ausdrücken geeignet sind. Der Wert für <Dienst-ID> muss ein gültiger Java-Bezeichner sein (alphanumeric,$, _ ohne weitere Sonderzeichen). Dieser Wert bildet mit vorangestelltem Schlüsselwort REMOTE_ das Präfix für die Verwendung in Ausdrücken. Wenn beispielsweise in einer Schnittstelle die mit einer Anmerkung versehene Methode bar() vorhanden ist und die Dienst-ID in den Eigenschaften für den BluePrint-Dienst foo lautet, kann die Methode in Ausdrücken mithilfe von REMOTE_foo:bar() referenziert werden. Um ein benutzerdefiniertes Bundle zum Exportieren Ihrer eigenen Remote-Funktionen zu erstellen, führen Sie folgende Schritte aus:
  1. Stellen Sie sicher, dass die Expression Manager-Klassen, insbesondere das com.adobe.exm.expeval-Paket, in die Manifestdatei des Bundles importiert werden.

  2. Definieren Sie eine Schnittstelle für den OSGi-Dienst, die Methoden enthält, die zur Verwendung in Expression Manager exportiert werden sollen.

  3. Deklarieren Sie Methoden in der Schnittstelle A und versehen Sie sie mit der Anmerkung „@ServiceMethod" (com.adobe.exm.expeval.ServiceMethod). Expression Manager ignoriert alle Methoden, bei denen keine Anmerkungen vorhanden sind. Die ServiceMethod-Anmerkung verfügt über die folgenden optionalen Attribute, die ebenfalls festgelegt werden können:

    • enabled: Bestimmt, ob diese Methode aktiviert ist. Expression Manager ignoriert deaktivierte Methoden.

    • familyId: Legt die Familie (Gruppe) der Methode fest. Wenn dieses Attribut leer ist, geht Expression Manager davon aus, dass die Methode zur Standardfamilie gehört. Es ist keine Registrierung für Familien (außer der Standardeinstellung) vorhanden, um die Auswahl von Funktionen zu ermöglichen. Expression Manager erstellt die Registrierung dynamisch durch Zusammenführen aller Familien-IDs, die durch sämtliche von den verschiedenen Bundles exportierte Funktionen angegeben werden. Stellen Sie sicher, dass hier eine lesbare ID angegeben wird, da diese auch in der Authoring-Benutzeroberfläche für die Ausdrücke angezeigt wird.

    • displayName: Ein für Menschen lesbarer Name für die Funktion. Dieser Name wird für die Anzeige in der Authoring-Benutzeroberfläche verwendet. Wenn dieses Attribut leer bleibt, erstellt Expression Manager einen Standardnamen aus dem Präfix und dem lokalen Namen der Funktion.

    • description: Eine detaillierte Beschreibung der Funktion. Diese Beschreibung wird für die Anzeige in der Authoring-Benutzeroberfläche verwendet. Wenn dieses Attribut leer bleibt, erstellt Expression Manager eine Standardbeschreibung aus dem Präfix und dem lokalen Namen der Funktion.

Die Parameter der Methoden können ebenfalls mit Anmerkungen versehen werden (optional). Verwenden Sie hierfür die Anmerkung „@ServiceMethodParameter" (com.adobe.exm.expeval.ServiceMethodParameter). Diese Anmerkung wird nur dazu verwendet, für Menschen lesbare Namen und Beschreibungen von Methodenparametern für die Verwendung in der Authoring-Benutzeroberfläche anzugeben.
  1. Stellen Sie sicher, dass die Parameter und Rückgabewerte der Methoden für die Schnittstelle zu den folgenden Typen gehören:

    • 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. Definieren Sie die Implementierung der Schnittstelle, konfigurieren Sie sie als Spring-Bean und exportieren Sie sie mithilfe von BluePrint als OSGi-Dienst, wobei Sie die folgenden speziellen Eigenschaften festlegen:
    <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>