Aller au contenu principal

ContentCreator: Service aus Workflow starten

Commentaires

6 commentaires

  • Zendesk API User
    Author: bIT_sosswald - 3/1/2018 8:14

    Hallo Dominik,

    die erste Frage wäre: Was genau willst du mit deinem Service machen?

    Je nachdem was du machen willst ist eine Service_Komponente oder aber evtl. auch ein Client-Service die richtige Option.

    Eine WebApp, klingt als Komponente für einen klassischen Service auf den ersten Blick nicht unbedingt als der besten Ort für einen Service.

    Ich definiere meine Services immer wie folgt in der module.xml:

    <service>

    <name>bIT - import service</name>

    <description>Service to import products

    into FirstSpirit.</description>

    <class>de.bit.firstspirit.xx.ProductImporterFSServiceImpl</class>

    <resources>

    <resource name="bITResources" scope="module">lib/${project.artifactId}-${project.version}-jar-with-dependencies.jar</resource>

    </resources>

    </service>

    Zusätzlich definiere ich Executables, wie folgt:

    <public>

    <name>bIT- import executable</name>

    <description>Executable class to start a productImport.</description>

    <class>de.bit.firstspirit.xx.executables.Executable</class>

    </public>

    Das Executable rufe ich dann wie folgt aus einem Skript auf:

    #!executable-class

    de.bit.firstspirit.xx.executables.Executable

    Innerhalb meines Executables hole ich mir dann den Service und starte ihn:

    /**

    * Initializes the executable with data out of the given parameters.

    *

    * @param params Parameters that are used to initializes the executable.

    */

    void init(final Map<String, Object> params) {

    this.paramMap = params;

    this.context = (ScheduleContext) params.get(FS_SCRIPT_CONTEXT);

    this.servicesBroker = this.context

    .requestSpecialist(ServicesBroker.TYPE);

    }

    ...

    @Override public Object execute(final Map<String, Object> params) {

    this.init(params);

    final ProductImporterFSService service = this.servicesBroker

    .getService(ProductImporterFSService.class);

    service.import();

    }

    return null;

    }

    Evtl. hilft dir der Ansatz ja weiter...

    Grüße

    Sandro

    0
  • Zendesk API User
    Author: dominik_koenig - 3/1/2018 13:13

    Hallo Sandro,

    vielen Dank für deine Antwort, ich habe mal versucht das so umzusetzen, aber leider besteht der Fehler mit der Methode weiterhin.

    Der ServicesBroker findet die Service Klasse nicht ServiceNotFoundException

    Wieder funktioniert es, wenn ich den Workflow aus dem SiteArchitect aufzurufen, aber leider nicht über den ContentCreator

    Auch nach Server neustart, hab ich das selbe Problem.

    Beste Grüße

    Dominik

    0
  • Zendesk API User
    Author: pavone - 3/9/2018 13:00

    Hallo Dominik,

    meine Vermutung ist, dass die Service-Klasse innerhalb der WebApp nicht bekannt ist, weil sie nicht als Resource angegeben wurde.

    Wir haben ganz gute Erfahrungen damit gemacht, Services folgendermaßen zu implementieren:

    1. Wir definieren ein fachliches Interface für den Service, welches in einem separaten JAR abgelegt wird, welches serverweit bekannt gemacht wird (scope "server").
    2. Die Implementierung des Services liegt in einer anderen JAR, die lediglich modulweit bekannt ist (scope "module").
    3. Beide JARs werden auch in der WebApp hinzugefügt.

    Die module.xml sieht also in etwa so aus:

    <web-app scopes="global,project">

      <name>[...]</name>

      <web-xml>web/web.xml</web-xml>

      <web-resources>

        <resource>lib/global.jar</resource>

        <resource>lib/local.jar</resource>

      </web-resources>

    </web-app>

    <service>

      <name>[...]</name>

      <class>[...].MyServiceImpl</class>

    </service>

    <resources>

      <resource scope="server">lib/global.jar</resource>

      <resource scope="module">lib/local.jar</resource>

    </resource>

    Zum Finden des Services verwenden wir grundsätzlich nicht den Namen des Services, sondern das Interface:

    servicesBroker.getService(MyService.class);

    Vielleicht hilft dir die Information ja weiter.

    Viele Grüße

    Tim

    0
  • Zendesk API User
    Author: dominik_koenig - 3/22/2018 14:08

    Hallo Tim,

    das hat geholfen!

    Mein Problem war, dass ich in der web-app <resources> anstatt <web-resources> definiert hab.

    Die Resource mit scope="server" ist nicht mal nötig.

    Beste Grüße,

    Dominik

    0
  • Zendesk API User
    Author: MichaelaReydt - 3/22/2018 14:27

    Hallo Dominik,

    ist das Posting weiterhin offen? Benötigst du noch weitere Hilfe oder hat dir Tims Antwort geholfen? In diesem Fall wäre es super, wenn du seine "richtige Antwort" entsprechend markierst.

    Oh, da hat sich etwas überschnitten. Mein Fehler. :smileyhappy:

    Viele Grüße

    Michaela

    0
  • Zendesk API User
    Author: Peter_Jodeleit - 6/24/2020 12:52

    Nur noch mal zur Klarstellung, wegen einer Nachfrage in einem anderem Beitrag: Die Web-Komponente muss noch der Web-Applikation über den ServerManager hinzugefügt werden.

    LG, Peter

    0

Vous devez vous connecter pour laisser un commentaire.