Assets Proxy-Entwicklung

Adobe Experience Manager Assets verwendet einen Proxy, um die Verarbeitung für bestimmte Aufgaben zu verteilen.

Bei einem Proxy handelt es sich um eine bestimmte (und manchmal auch separate) Experience Manager-Instanz, bei der Proxy-Mitarbeiter als Prozessoren verwendet werden, die für die Verarbeitung eines Auftrags und das Erstellen eines Ergebnisses verantwortlich sind. Ein Proxy Worker kann für eine Vielzahl von Aufgaben verwendet werden. In the case of an Assets proxy this can be used for loading assets for rendering within Assets. For example, the IDS proxy worker uses an Adobe InDesign Server to process files for use in Assets.

When the proxy is a separate Experience Manager instance this helps reduce the load on the Experience Manager authoring instance(s). By default, Assets executes the asset processing tasks in the same JVM (externalized via Proxy) to reduce the load on the Experience Manager authoring instance.

Proxy (HTTP-Zugriff)

Proxys, deren Konfiguration Verarbeitungsaufträge zulässt, sind über das HTTP-Servlet verfügbar: /libs/dam/cloud/proxy. Dieses Servlet erstellt einen Sling-Auftrag aus den geposteten Parametern. Der Auftrag wird dann der Proxy-Auftragswarteschlange hinzugefügt und mit dem entsprechenden Proxy Worker verbunden.

Unterstützte Vorgänge

  • job

    Anforderungen: Der Parameter jobevent muss als serialisierte Wertezuordnung festgelegt werden. This is used to create an Event for a job processor.

    Ergebnis: Fügt einen neuen Auftrag hinzu. Wenn der Vorgang erfolgreich ist, wird eine eindeutige Auftrags-ID zurückgegeben.

curl -u admin:admin -F":operation=job" -F"someproperty=xxxxxxxxxxxx"
    -F"jobevent=serialized value map" http://localhost:4502/libs/dam/cloud/proxy
  • result

    Anforderungen: der Parameter jobid muss eingestellt werden.

    Ergebnis: Gibt die JSON-Darstellung des Ergebnisknotens zurück, wie er durch den Auftragsprozessor erstellt wurde.

curl -u admin:admin -F":operation=result" -F"jobid=xxxxxxxxxxxx"
    http://localhost:4502   /libs/dam/cloud/proxy
  • resource

    Anforderungen: Der Parameter „jobid“ must festgelegt sein.

    Ergebnis: Gibt eine Ressource zurück, die dem jeweiligen Auftrag zugeordnet ist.

curl -u admin:admin -F":operation=resource" -F"jobid=xxxxxxxxxxxx"
    -F"resourcePath=something.pdf" http://localhost:4502/libs/dam/cloud/proxy
  • remove

    Anforderungen: Der Parameter „jobid“ must festgelegt sein.

    Ergebnisse:: Entfernt einen gefundenen Auftrag.

curl -u admin:admin -F":operation=remove" -F"jobid=xxxxxxxxxxxx"
    http://localhost:4502/libs/dam/cloud/proxy

Proxy Worker

Ein Proxy Worker ist ein Prozessor, der für die Verarbeitung von Aufträgen und die Generierung von Ergebnissen zuständig ist. Worker befinden sich auf der Proxy-Instanz und müssen sling JobProcessor implementieren, damit sie als Proxy Worker erkannt werden.

Hinweis

Worker müssen sling JobProcessor implementieren, damit sie als Proxy Worker erkannt werden.

Client-API

JobService ist als OSGi-Dienst verfügbar, der Methoden zur Erstellung und Entfernung von Aufträgen und dem Abruf von Ergebnissen aus den Aufträgen bereitstellt. Die Standardimplementierung des Dienstes (JobServiceImpl) verwendet den HTTP-Client für die Kommunikation mit dem Remote-Proxy-Servlet.

Nachstehend finden Sie ein Beispiel für die API-Verwendung:

@Reference
 JobService proxyJobService;

 // to create a new job
 final Hashtable props = new Hashtable();
 props.put("someproperty", "some value");
 props.put(JobUtil.PROPERTY_JOB_TOPIC, "myworker/job"); // this is an identifier of the worker
 final String jobId = proxyJobService.addJob(props, new Asset[]{asset});

 // to check status (returns JobService.STATUS_FINISHED or JobService.STATUS_INPROGRESS)
 int status = proxyJobService.getStatus(jobId)

 // to get the result
 final String jsonString = proxyJobService.getResult(jobId);

 // to remove job and cleanup
 proxyJobService.removeJob(jobId);

Cloud Service-Konfigurationen

Hinweis

Die Referenzdokumentation für die Proxy-API ist unter com.day.cq.dam.api.proxy verfügbar.

Both proxy and proxy worker configurations are available via cloud services configurations as accessible from the Assets Tools console or under /etc/cloudservices/proxy. Es wird erwartet, dass jeder Proxy-Worker einen Knoten /etc/cloudservices/proxy für arbeitnehmerspezifische Konfigurationsdetails (z. B. /etc/cloudservices/proxy/workername) hinzufügt.

Nachstehend finden Sie ein Beispiel für die API-Verwendung:

@Reference(policy = ReferencePolicy.STATIC)
 ProxyConfig proxyConfig;

 // to get proxy config
 Configuration cloudConfig = proxyConfig.getConfiguration();
 final String value = cloudConfig.get("someProperty", "defaultValue");

 // to get worker config
 Configuration cloudConfig = proxyConfig.getConfiguration("workername");
 final String value = cloudConfig.get("someProperty", "defaultValue");

Entwickeln eines benutzerdefinierten Proxy Workers

The IDS proxy worker is an example of a Assets proxy worker that is already provided out-of-the-box to outsource the processing of InDesign assets.

You can also develop and configure your own Assets proxy worker to create a specialized worker to dispatch and outsource your Assets processing tasks.

Für die Einrichtung eines eigenen benutzerdefinierten Proxy Workers müssen Sie die folgenden Aufgaben ausführen:

  • Einrichten und Implementieren (mit Sling Eventing):

    • benutzerdefiniertes Auftragsthema
    • benutzerdefinierter Auftrags-Ereignishandler
  • Führen Sie mit der JobService-API die folgenden Aufgaben aus:

    • benutzerdefinierten Auftrag an Proxy senden
    • Auftrag verwalten
  • Wenn Sie den Proxy aus einem Workflow verwenden möchten, müssen Sie einen externen benutzerdefinierten Schritt implementieren. Verwenden Sie dafür die WorkflowExternalProcess-API und die JobService-API.

Die Vorgehensweise wird im folgenden Diagramm erläutert:

chlimage_1-249

Hinweis

In den folgenden Schritten werden InDesign-Entsprechungen als Referenzbeispiele angegeben.

  1. Da ein Sling-Auftrag verwendet wird, müssen Sie ein Auftragsthema für Ihren Anwendungsfall definieren.

    Als Beispiel dient IDSJob.IDS_EXTENDSCRIPT_JOB für den IDS Proxy Worker.

  2. Mit dem externen Schritt wird das Ereignis ausgelöst, anschließend wird auf den Abschluss gewartet. Hierfür wird die ID abgerufen. Sie müssen einen eigenen Schritt entwickeln, um eine neue Funktionalität zu implementieren.

    Implementieren Sie einen WorkflowExternalProcess. Bereiten Sie dann mit der JobService-API und Ihrem Auftragsthema ein Auftragsereignis vor und senden Sie es an den JobService (einen OSGi-Dienst).

    Als Beispiel dient INDDMediaExtractProcess für den IDS Proxy Worker.

  3. Implementieren Sie einen Auftrags-Handler für Ihr Thema. Der Handler muss entwickelt werden, damit er die von Ihnen gewünschte spezifische Aktion ausführt und als Worker-Implementierung betrachtet wird.

    Als Beispiel dient IDSJobProcessor.java für den IDS Proxy Worker.

  4. Verwenden Sie ProxyUtil.java in dam-commons. Damit können Sie Aufträge mit dem dam-Proxy an Worker senden.

Hinweis

What the Assets proxy framework does not provide out-of-the-box is the pool mechanism.

The InDesign integration allows the access of a pool of InDesign servers (IDSPool). This pooling is specific to InDesign integration and not part of the Assets proxy framework.

Hinweis

Synchronisierung der Ergebnisse:

Bei n Instanzen, die denselben Proxy verwenden, bleibt das Verarbeitungsergebnis beim Proxy. Es ist die Aufgabe des Clients (Experience Manager-Autor), das Ergebnis mit derselben eindeutigen Auftrags-ID anzufordern, die dem Client bei der Erstellung von Aufträgen zugewiesen wird. Der Proxy erledigt einfach den Auftrag und hält das Ergebnis abrufbereit.

Auf dieser Seite