Skip to main content
È disponibile una versione più recente di questo prodotto.
La versione in lingua italiana fornita proviene da una traduzione automatica. Per eventuali incoerenze, fare riferimento alla versione in lingua inglese.

Stile Java

Collaboratori

Un plug-in personalizzato Java interagisce direttamente con un'applicazione come database, istanze e così via.

Limitazioni

Esistono alcune limitazioni che è necessario tenere presenti durante lo sviluppo di un plug-in utilizzando il linguaggio di programmazione Java.

Caratteristica del plug-in Plug-in Java

Complessità

Da basso a medio

Impatto della memoria

Fino a 10-20 MB

Dipendenze da altre librerie

Librerie per la comunicazione applicativa

Numero di thread

1

Runtime del thread

Meno di un'ora

Motivo delle limitazioni Java

L'obiettivo dell'agente SnapCenter è garantire un'integrazione applicativa continua, sicura e solida. Grazie al supporto dei plug-in Java, è possibile che i plug-in introducano perdite di memoria e altri problemi indesiderati. Questi problemi sono difficili da affrontare, soprattutto quando l'obiettivo è quello di mantenere le cose semplici da utilizzare. Se la complessità di un plug-in non è troppo complessa, è molto meno probabile che gli sviluppatori abbiano introdotto gli errori. Il pericolo che il plug-in Java venga eseguito nella stessa JVM dell'agente SnapCenter. In caso di crash o perdita di memoria, il plug-in potrebbe avere un impatto negativo sull'Agent.

Metodi supportati

Metodo Obbligatorio Descrizione Chiamate quando e da chi?

Versione

Deve restituire la versione del plug-in.

Dal server o dall'agente SnapCenter per richiedere la versione del plug-in.

Quiesce

Deve eseguire un quiesce sull'applicazione. Nella maggior parte dei casi, ciò significa mettere l'applicazione in uno stato in cui il server SnapCenter può creare un backup (ad esempio, un'istantanea).

Prima che il server SnapCenter crei una copia Snapshot o esegua un backup in generale.

Senza richieste

Deve eseguire un'operazione senza domande sull'applicazione. Nella maggior parte dei casi, ciò significa riportare l'applicazione in uno stato operativo normale.

Dopo che il server SnapCenter ha creato uno snapshot o ha eseguito un backup in generale.

Pulizia

No

Responsabile della pulizia di qualsiasi elemento che il plug-in deve pulire.

Al termine di un flusso di lavoro sul server SnapCenter (con esito positivo o con errore).

ClonePre

No

Dovrebbe eseguire azioni che devono essere eseguite prima di eseguire un'operazione di clonazione.

Quando un utente attiva un'azione "cloneVol" o "cloneLun" e utilizza la procedura guidata di cloning integrata (GUI/CLI).

ClonePost

No

Dovrebbe eseguire azioni che devono avvenire dopo l'esecuzione di un'operazione di clonazione.

Quando un utente attiva un'azione "cloneVol" o "cloneLun" e utilizza la procedura guidata di cloning integrata (GUI/CLI).

RestorePre

No

Dovrebbe eseguire le azioni che devono essere eseguite prima di richiamare l'operazione di ripristino.

Quando un utente attiva un'operazione di ripristino.

Ripristinare

No

Responsabile dell'esecuzione di un ripristino/ripristino dell'applicazione.

Quando un utente attiva un'operazione di ripristino.

AppVersion

No

Per recuperare la versione dell'applicazione gestita dal plug-in.

Come parte della raccolta di dati ASUP in ogni flusso di lavoro come Backup/Restore/Clone.

Esercitazione

In questa sezione viene descritto come creare un plug-in personalizzato utilizzando il linguaggio di programmazione Java.

Configurare l'eclissi

  1. Creare un nuovo progetto Java "TutorialPlugin" in Eclipse

  2. Fare clic su fine

  3. Fare clic con il pulsante destro del mouse su nuovo progettoProprietàJava Build PathLibrerieAggiungi jar esterni

  4. Accedere alla cartella ../lib/ dell'agente host e selezionare jars scAgent-5.0-core.jar e common-5.0.jar

  5. Selezionare il progetto e fare clic con il pulsante destro del mouse sulla cartella srcNewPackage e creare un nuovo pacchetto con il nome com.netapp.snapcreator.agent.plugin.TutorialPlugin

  6. Fare clic con il pulsante destro del mouse sul nuovo pacchetto e selezionare New → Java Class.

    1. Immettere il nome come TutorialPlugin.

    2. Fare clic sul pulsante di ricerca delle superclassi e cercare "*AbstractPlugin". Dovrebbe essere visualizzato un solo risultato:

       "AbstractPlugin - com.netapp.snapcreator.agent.nextgen.plugin".
      .. Fare clic su *fine*.
      .. Classe Java:
      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;
        }
      }

Implementazione dei metodi richiesti

Quiesce, unquiesce e version sono metodi obbligatori che ogni plug-in Java personalizzato deve implementare.

Di seguito viene riportato un metodo di versione per restituire la versione del plug-in.

@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;
}

Il metodo viene passato in un oggetto di contesto. Contiene più assistenti, ad esempio un Logger e un archivio di contesto, nonché le informazioni sull'operazione corrente (workflow-ID, job-ID). Possiamo ottenere il logger chiamando il logger finale = Context.GetLogger();. L'oggetto logger fornisce metodi simili noti da altri framework di logging, ad esempio logback. Nell'oggetto risultato, è anche possibile specificare il codice di uscita. In questo esempio, viene restituito zero, poiché non si è verificato alcun problema. Altri codici di uscita possono essere associati a diversi scenari di guasto.

Utilizzo dell'oggetto risultato

L'oggetto Result contiene i seguenti parametri:

Parametro Predefinito Descrizione

Config

Config. Vuota

Questo parametro può essere utilizzato per inviare nuovamente i parametri di configurazione al server. Possono essere parametri che il plug-in desidera aggiornare. Se questa modifica viene effettivamente riflessa nella configurazione sul server SnapCenter dipende dal parametro APP_CONF_PERSISTENCY=Y o N nella configurazione.

ExitCode

0

Indica lo stato dell'operazione. "0" indica che l'operazione è stata eseguita correttamente. Altri valori indicano errori o avvisi.

Stdout

Elenco vuoto

Questa funzione può essere utilizzata per trasmettere messaggi stdout al server SnapCenter.

Stderr

Elenco vuoto

Questa opzione può essere utilizzata per ritrasmettere i messaggi stderr al server SnapCenter.

Messaggi

Elenco vuoto

Questo elenco contiene tutti i messaggi che un plug-in desidera restituire al server. Il server SnapCenter visualizza questi messaggi nella CLI o nella GUI.

L'agente SnapCenter fornisce i costruttori ("Modello di costruttore") per tutti i tipi di risultati. Questo rende l'utilizzo molto semplice:

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

Ad esempio, impostare il codice di uscita su 0, impostare gli elenchi per stdout e stderr, impostare i parametri di configurazione e aggiungere anche i messaggi di registro che verranno rinviati al server. Se non sono necessari tutti i parametri, inviare solo quelli necessari. Poiché ogni parametro ha un valore predefinito, se si rimuove .withExitCode(0) dal codice riportato di seguito, il risultato non viene influenzato:

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

VersionResult

VersionResult informa il server SnapCenter della versione del plug-in. Poiché eredita anche dal risultato, contiene i parametri config, exitCode, stdout, stderr e messaggi.

Parametro Predefinito Descrizione

Maggiore

0

Principale campo di versione del plug-in.

Minore

0

Campo versione minore del plug-in.

Patch

0

Campo della versione della patch del plug-in.

Costruire

0

Campo della versione di build del plug-in.

Ad esempio:

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

Utilizzo dell'oggetto di contesto

L'oggetto Context fornisce i seguenti metodi:

Metodo di contesto Scopo

Stringa getWorkflowId();

Restituisce l'id del flusso di lavoro utilizzato dal server SnapCenter per il flusso di lavoro corrente.

Config getConfig();

Restituisce la configurazione inviata dal server SnapCenter all'agente.

ID flusso di lavoro

L'ID del flusso di lavoro è l'id utilizzato dal server SnapCenter per fare riferimento a un flusso di lavoro in esecuzione specifico.

Config

Questo oggetto contiene la maggior parte dei parametri che un utente può impostare nella configurazione sul server SnapCenter. Tuttavia, per motivi di sicurezza, alcuni di questi parametri potrebbero essere filtrati sul lato server. Di seguito viene riportato un esempio su come accedere alla configurazione e recuperare un parametro:

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

""// myParameter" ora contiene il parametro letto dalla configurazione sul server SnapCenter se una chiave del parametro di configurazione non esiste, restituirà una stringa vuota ("").

Esportazione del plug-in

È necessario esportare il plug-in per installarlo sull'host SnapCenter.

In Eclipse eseguire le seguenti operazioni:

  1. Fare clic con il pulsante destro del mouse sul pacchetto di base del plug-in (nell'esempio com.netapp.snapcreator.agent.plugin.TutorialPlugin).

  2. Selezionare ExportJavajar file

  3. Fare clic su Avanti.

  4. Nella finestra seguente, specificare il percorso del file jar di destinazione: tutorial_plugin.jar la classe di base del plug-in è denominata TutorialPlugin.class, il plug-in deve essere aggiunto a una cartella con lo stesso nome.

Se il plug-in dipende da librerie aggiuntive, è possibile creare la seguente cartella: Lib/

È possibile aggiungere file jar, da cui dipende il plug-in (ad esempio, un driver di database). Quando SnapCenter carica il plug-in, associa automaticamente tutti i file jar presenti in questa cartella e li aggiunge al classpath.