Skip to main content
Eine neuere Version dieses Produkts ist erhältlich.
Die deutsche Sprachversion wurde als Serviceleistung für Sie durch maschinelle Übersetzung erstellt. Bei eventuellen Unstimmigkeiten hat die englische Sprachversion Vorrang.

Java-Stil

Beitragende

Ein benutzerdefiniertes Java Plug-in interagiert direkt mit einer Applikation wie Datenbank, Instanz usw.

Einschränkungen

Es gibt bestimmte Einschränkungen, die Sie beim entwickeln eines Plug-ins mit Java-Programmiersprache beachten sollten.

Steckkennlinie Java Plug-in

Komplexität

Niedrig bis mittel

Platzbedarf für Arbeitsspeicher

Bis zu 10-20 MB

Abhängigkeiten von anderen Bibliotheken

Bibliotheken für die Anwendungskommunikation

Anzahl der Threads

1

Thread-Laufzeit

Weniger als eine Stunde

Grund für Java-Einschränkungen

Ziel des SnapCenter-Agenten ist es, eine kontinuierliche, sichere und robuste Anwendungsintegration zu gewährleisten. Durch die Unterstützung von Java-Plug-ins ist es möglich, dass Plug-ins Speicherlecks und andere unerwünschte Probleme einführen. Diese Probleme sind schwer zu bewältigen, vor allem, wenn das Ziel ist, die Dinge einfach zu bedienen. Wenn die Komplexität eines Plug-ins nicht zu komplex ist, ist es viel seltener wahrscheinlich, dass die Entwickler die Fehler verursacht hätten. Die Gefahr eines Java-Plug-ins besteht darin, dass sie in derselben JVM laufen wie der SnapCenter-Agent selbst. Wenn das Plug-in abstürzt oder Speicher leckt, kann es auch negative Auswirkungen auf den Agent haben.

Unterstützte Methoden

Methode Erforderlich Beschreibung Wann und von wem gerufen?

Version

Ja.

Muss die Version des Plug-ins zurückgeben.

Vom SnapCenter-Server oder -Agent, um die Version des Plug-ins anzufordern.

Stilllegen

Ja.

Muss die Applikation stilllegen. In den meisten Fällen bedeutet dies, dass die Applikation in einen Zustand versetzt wird, in dem der SnapCenter-Server ein Backup erstellen kann (z. B. einen Snapshot).

Bevor der SnapCenter-Server eine Snapshot(s)-Kopie erstellt oder ein Backup im Allgemeinen durchführt.

Nicht Stilllegen

Ja.

Muss die Applikation stilllegen. In den meisten Fällen bedeutet dies, dass die Applikation wieder in einen normalen Betriebszustand zurückversetzt wird.

Nachdem der SnapCenter-Server einen Snapshot erstellt oder generell ein Backup durchgeführt hat.

Bereinigung

Nein

Verantwortlich für die Reinigung von allen, die das Plug-in braucht, um zu reinigen.

Wenn ein Workflow auf dem SnapCenter-Server beendet ist (erfolgreich oder mit einem Fehler).

KlonVorr

Nein

Sollte Aktionen durchführen, die vor der Durchführung eines Klonvorgangs ausgeführt werden müssen.

Wenn ein Benutzer eine Aktion „KlonVol“ oder „cloneRun“ auslöst und den integrierten Klon-Assistenten (GUI/CLI) verwendet.

KlonPost

Nein

Sollte Aktionen durchführen, die nach der Durchführung eines Klonvorgangs ausgeführt werden müssen.

Wenn ein Benutzer eine Aktion „KlonVol“ oder „cloneRun“ auslöst und den integrierten Klon-Assistenten (GUI/CLI) verwendet.

WiederherstellungPre

Nein

Sollte Aktionen durchführen, die vor dem Wiederherstellungsvorgang ausgeführt werden müssen.

Wenn ein Benutzer einen Wiederherstellungsvorgang auslöst.

Wiederherstellen

Nein

Verantwortlich für die Durchführung einer Wiederherstellung/Wiederherstellung der Anwendung.

Wenn ein Benutzer einen Wiederherstellungsvorgang auslöst.

AppVersion

Nein

Zum Abrufen der vom Plug-in verwalteten Anwendungsversion.

Im Rahmen von ASUP Datenerfassung in jedem Workflow, wie beispielsweise Backup/Restore/Klonen,

Lernprogramm

In diesem Abschnitt wird beschrieben, wie Sie ein benutzerdefiniertes Plug-in mithilfe der Java-Programmiersprache erstellen.

Sonnenfinsternis einrichten

  1. Erstellen Sie ein neues Java-Projekt "TutorialPlugin" in Eclipse

  2. Klicken Sie Auf Fertig Stellen

  3. Klicken Sie mit der rechten Maustaste auf das neue ProjektEigenschaftenJava Build PathBibliothekenExterne Jars hinzufügen

  4. Navigieren Sie zum Ordner ../lib/ des Host Agent, und wählen Sie Jars scAgent-5.0-core.jar und common-5.0.jar aus

  5. Wählen Sie das Projekt aus und klicken Sie mit der rechten Maustaste auf den Ordner srcNeuPaket und erstellen Sie ein neues Paket mit dem Namen com.netapp.snapcreator.agent.plugin.TutorialPlugin

  6. Klicken Sie mit der rechten Maustaste auf das neue Paket, und wählen Sie Neu → Java-Klasse.

    1. Geben Sie den Namen als TutorialPlugin ein.

    2. Klicken Sie auf die Schaltfläche zum Durchsuchen von Superclass und suchen Sie nach "*AbstractPlugin". Es sollte nur ein Ergebnis angezeigt werden:

       "AbstractPlugin - com.netapp.snapcreator.agent.nextgen.plugin".
      .. Klicken Sie Auf *Fertig Stellen*.
      .. Java-Klasse:
      package com.netapp.snapcreator.agent.plugin.TutorialPlugin;
      import
      com.netapp.snapcreator.agent.nextgen.common.result.Describe
      Result;
      import
      com.netapp.snapcreator.agent.nextgen.common.result.Result;
      import
      com.netapp.snapcreator.agent.nextgen.common.result.VersionR
      esult;
      import
      com.netapp.snapcreator.agent.nextgen.context.Context;
      import
      com.netapp.snapcreator.agent.nextgen.plugin.AbstractPlugin;
      public class TutorialPlugin extends AbstractPlugin {
        @Override
        public DescribeResult describe(Context context) {
          // TODO Auto-generated method stub
          return null;
        }
        @Override
        public Result quiesce(Context context) {
          // TODO Auto-generated method stub
          return null;
        }
        @Override
        public Result unquiesce(Context context) {
          // TODO Auto-generated method stub
          return null;
        }
        @Override
        public VersionResult version() {
          // TODO Auto-generated method stub
          return null;
        }
      }

Umsetzung der erforderlichen Methoden

Quiesce, unquiesce und Version sind obligatorische Methoden, die jedes benutzerdefinierte Java Plug-in implementieren muss.

Die folgende Versionsmethode gibt die Version des Plug-ins zurück.

@Override
public VersionResult version() {
    VersionResult versionResult = VersionResult.builder()
                                            .withMajor(1)
                                            .withMinor(0)
                                            .withPatch(0)
                                            .withBuild(0)
                                            .build();
    return versionResult;
}
Below is the implementation of quiesce and unquiesce method. These will be interacting with   the application, which is being protected by SnapCenter Server. As this is just a tutorial, the
application part is not explained, and the focus is more on the functionality that SnapCenter   Agent provides the following to the plug-in developers:
@Override
  public Result quiesce(Context context) {
    final Logger logger = context.getLogger();
    /*
      * TODO: Add application interaction here
    */
logger.error("Something bad happened.");
logger.info("Successfully handled application");
    Result result = Result.builder()
                    .withExitCode(0)
                    .withMessages(logger.getMessages())
                    .build();
    return result;
}

Die Methode wird in einem Kontextobjekt übergeben. Dazu gehören mehrere Helfer, zum Beispiel ein Logger und ein Context Store, sowie die Informationen über den aktuellen Vorgang (Workflow-ID, Job-ID). Wir können den Logger erhalten, indem wir den endgültigen Logger Logger = context.getLogger(); anrufen. Das Logger-Objekt bietet ähnliche Methoden, die von anderen Protokollierungs-Frameworks bekannt sind, z. B. Logback. Im Ergebnisobjekt können Sie auch den Exit-Code angeben. In diesem Beispiel wird Null zurückgegeben, da kein Problem aufgetreten ist. Andere Exit-Codes können verschiedenen Fehlerszenarien zugeordnet werden.

Ergebnisobjekt wird verwendet

Das Ergebnisobjekt enthält die folgenden Parameter:

Parameter Standard Beschreibung

Konfigurations

Leere Konfiguration

Mit diesem Parameter können Konfigurationsparameter zurück an den Server gesendet werden. Es kann Parameter sein, die das Plug-in aktualisieren möchte. Ob diese Änderung sich tatsächlich in der Konfiguration auf dem SnapCenter-Server wiederfindet, hängt vom PARAMETER APP_CONF_PERSISTENZ=Y oder N in der Konfiguration ab.

Code-Code

0

Zeigt den Status des Vorgangs an. Ein „0“ bedeutet, dass der Vorgang erfolgreich ausgeführt wurde. Andere Werte weisen auf Fehler oder Warnungen hin.

Stdout

Leere Liste

Damit können stdout-Nachrichten an den SnapCenter-Server zurückgesendet werden.

Stderr

Leere Liste

Damit können stderr-Nachrichten an den SnapCenter-Server zurückgesendet werden.

Nachrichten

Leere Liste

Diese Liste enthält alle Meldungen, die ein Plug-in zum Server zurückkehren möchte. Der SnapCenter-Server zeigt diese Meldungen in der CLI oder GUI an.

Der SnapCenter-Agent bietet Builders ("Baumuster") für alle seine Ergebnistypen an. Daher ist es sehr einfach, sie zu verwenden:

Result result = Result.builder()
                    .withExitCode(0)
                    .withStdout(stdout)
                    .withStderr(stderr)
                    .withConfig(config)
                    .withMessages(logger.getMessages())
                    .build()

Setzen Sie beispielsweise den Exit-Code auf 0, legen Sie Listen für stdout und stderr fest, legen Sie die Konfigurationsparameter fest und fügen Sie die Protokollmeldungen an, die an den Server zurückgesendet werden. Wenn Sie nicht alle Parameter benötigen, senden Sie nur die erforderlichen Parameter. Da jeder Parameter einen Standardwert hat, ist das Ergebnis unberührt, wenn Sie .withExitCode(0) aus dem unten stehenden Code entfernen:

Result result = Result.builder()
                      .withExitCode(0)
                      .withMessages(logger.getMessages())
                      .build();

VersionResult

Der VersionResult informiert den SnapCenter-Server über die Plug-in-Version. Da es auch vom Ergebnis erbt, enthält es die Parameter config, exitCode, stdout, stderr und Nachrichten.

Parameter Standard Beschreibung

Major

0

Hauptversionsfeld des Plug-ins.

Gering

0

Kleines Versionsfeld des Plug-ins.

Patch

0

Feld für die Patch-Version des Plug-ins.

Entwickeln

0

Build-Versionsfeld des Plug-ins.

Beispiel:

VersionResult result = VersionResult.builder()
                                  .withMajor(1)
                                  .withMinor(0)
                                  .withPatch(0)
                                  .withBuild(0)
                                  .build();

Verwenden des Kontextobjekts

Das Kontextobjekt bietet folgende Methoden:

Kontextsethode Zweck

String getWorkflowId();

Gibt die Workflow-id zurück, die vom SnapCenter-Server für den aktuellen Workflow verwendet wird.

Config getconfig();

Gibt die Konfiguration zurück, die vom SnapCenter-Server an den Agenten gesendet wird.

Workflow-ID

Die Workflow-ID ist die id, die der SnapCenter-Server verwendet, um auf einen bestimmten laufenden Workflow zu verweisen.

Konfigurations

Dieses Objekt enthält (die meisten) Parameter, die ein Benutzer in der Konfiguration auf dem SnapCenter-Server festlegen kann. Aus Sicherheitsgründen können jedoch einige dieser Parameter auf Server-Seite gefiltert werden. Nachfolgend ein Beispiel für den Zugriff auf die Konfiguration und den Abruf eines Parameters:

final Config config = context.getConfig();
String myParameter =
config.getParameter("PLUGIN_MANDATORY_PARAMETER");

""// myParameter" enthält jetzt den Parameter, der von der Konfiguration auf dem SnapCenter-Server gelesen wird Wenn kein Konfigurationsparameterschlüssel vorhanden ist, wird ein leerer String ("") zurückgegeben.

Das Plug-in wird exportiert

Sie müssen das Plug-in exportieren, um es auf dem SnapCenter-Host zu installieren.

Führen Sie in Eclipse die folgenden Aufgaben aus:

  1. Klicken Sie mit der rechten Maustaste auf das Basispaket des Plug-ins (in unserem Beispiel com.netapp.snapcreator.agent.plugin.TutorialPlugin).

  2. Wählen Sie ExportJavaJar-Datei

  3. Klicken Sie Auf Weiter.

  4. Geben Sie im folgenden Fenster den Ziel-JAR-Dateipfad an: tutorial_plugin.jar die Basisklasse des Plug-ins heißt TutorialPlugin.class, das Plug-in muss einem Ordner mit dem gleichen Namen hinzugefügt werden.

Wenn Ihr Plug-in von zusätzlichen Bibliotheken abhängt, können Sie den folgenden Ordner erstellen: Lib/

Sie können JAR-Dateien hinzufügen, von denen das Plug-in abhängig ist (z. B. ein Datenbanktreiber). Wenn SnapCenter das Plug-in lädt, ordnet es automatisch alle JAR-Dateien in diesem Ordner zu und fügt sie dem Klassenpfad hinzu.