2016-05-12 10 views
0

Ich habe einen Ruhe-Endpunkt, der den Scheduler des Ladens eines XML in den Speicher starten würde. Immer wenn ich diesen Rest-Endpunkt erreiche, lädt er das XML in den Speicher und würde das XML zurückgeben, nachdem es fertig ist (würde 10 bis 15 Sekunden dauern). Wenn auf denselben Endpunkt erneut zugegriffen wird, wird die zwischengespeicherte XML zurückgegeben. Alles funktioniert gut, aber jetzt muss ich manuell den Endpunkt treffen, damit der Scheduler startet. Gibt es eine Möglichkeit, den Endpunkt beim Start automatisch über einen einfachen Code zu treffen? Oder gibt es dafür eine andere Lösung?Hit REST-Endpunkt beim Start - Weblogic + ATG

+1

Haben Sie den Scheduler in Ihren 'Initial.properties' angegeben? – radimpe

Antwort

0

Normalerweise wird eine Komponente im Nukleus beim ersten Zugriff und nicht beim Systemstart instanziiert.

Die Vorgehensweise beim Start in ATG besteht darin, die Komponente zu erstellen und dann ihren Nukleuspfad zur Liste der ursprünglichen Services in der Komponente/Initial (oder einer der vielen anderen Initial-Komponenten hinzuzufügen davon abgeändert)

Die Komponente sollte global skaliert sein. Da/Initial beim Start instanziiert wird, werden die Services, auf die es verweist, auch als Abhängigkeiten instanziiert.

Wenn Ihre Komponente ein POJO ist, dann wird der Konstruktor no argument beim Start der Komponente aufgerufen, dann wird die Methode setX für jede Eigenschaft mit einem in ihrer Eigenschaftendatei definierten Wert aufgerufen.

Wenn Ihre Komponente aus Allgemeinem Dienst erweitert wird, dann zusätzlich beforeSet und afterSet Methoden aufgerufen werden, vor und nach dem eingestellten Methoden aufgerufen werden, wenn sie vorhanden ist, und schließlich doStartUp aufgerufen.

Dies ist alles Teil des grundlegenden Lebenszyklus von Komponenten, die der Nucleus verwaltet.

Dies gibt Ihnen eine Reihe von Hooks, mit denen Sie Ihren benutzerdefinierten Code aufrufen können.

Nun fragen Sie in Ihrer Frage, wie Sie beim Start einen REST-Endpunkt aufrufen. Ich glaube jedoch, dass Sie tatsächlich fragen möchten, wie Sie sicherstellen können, dass ein bestimmter Code beim Systemstart ausgeführt wird. Ein REST-Endpunkt ist, wie Sie ihn heute manuell von außerhalb des Nukleus auslösen. Dies bedeutet jedoch nicht, dass ein REST-Endpunkt aufgerufen werden muss, wenn er beim Start automatisch aufgerufen werden soll.

Der einfachste Weg, um zu erreichen, was Sie wollen, ist

  • eine Klasse definieren, die GenericService
  • Überschreibung der doStartUp Methode
  • den Code, den Sie in dieser Methode ausführen möchten setzen erstreckt, oder den Code aufrufen auf eine andere Komponente von hier
  • definieren Sie eine globale Bereichskomponente für die Klasse
  • Fügen Sie die Komponente zu der initialServices Prop der ersten Komponente

Starten Sie den Server neu und überprüfen Sie, ob Ihr Code beim Start aufgerufen wird. Fügen Sie einige Debug-Anweisungen ein und schalten Sie die Debug-Protokollierung in Ihrer Schicht ein.

Hinweis, Sie möchten vielleicht auch darüber nachdenken, ob Sie Ihren Code beim Systemstart wirklich aufrufen müssen. Alles in den Anfangsdiensten fügt der Startzeit des Servers hinzu. Abhängig von Ihren Anforderungen ist es möglicherweise besser, dies beim ersten Zugriff Ihres Anwendungsdienstes als beim Serverstart zu tun.