Skip to main content
SnapCenter Software 4.8
本产品推出了新版本。
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

Java 模式

贡献者

Java 自定义插件直接与数据库,实例等应用程序交互。

限制

在使用 Java 编程语言开发插件时,您应注意一些限制。

插件特征 Java 插件

复杂性

从低到中

内存占用空间

最多 10-20 MB

其他库的依赖关系

用于应用程序通信的库

线程数

1.

线程运行时

不到一小时

Java 限制的原因

SnapCenter 代理的目标是确保持续,安全且稳定可靠的应用程序集成。通过支持 Java 插件,插件可能会导致内存泄漏和其他不需要的问题。这些问题很难解决,尤其是在目标是让事情简单易用的情况下。如果插件的复杂性不是太复杂,开发人员可能会出现错误的可能性就会小得多。Java插件的危险在于它们是 在与SnapCenter代理本身相同的JVM中运行。当插件崩溃或内存泄漏时,它也可能对代理产生负面影响。

支持的方法

方法 Required Description 何时被调用?由谁调用?

version

是的。

需要返回插件的版本。

由SnapCenter服务器或代理请求的版本 插件。

暂停

是的。

需要对应用程序执行暂停。在大多数情况下,这意味着将应用程序置于 SnapCenter 服务器可以创建备份的状态(例如 Snapshot 副本)。

在SnapCenter服务器创建Snapshot副本或之前 执行常规备份。

取消静默

是的。

需要对应用程序执行静默操作。在大多数情况下、这种情况 意味着将应用程序恢复到正常运行状态。

在SnapCenter服务器创建Snapshot副本或具有之后 已执行常规备份。

清理

负责清理插件需要清理的任何内容。

SnapCenter 服务器上的工作流完成后(成功或出现故障)。

clonePre

应在执行克隆操作之前执行需要执行的操作。

当用户触发 "cloneVol" 或 "cloneLun" 操作并使用内置克隆向导( GUI/CLI )时。

clonePost

应在执行克隆操作后执行需要执行的操作。

当用户触发 "cloneVol" 或 "cloneLun" 操作并使用内置克隆向导( GUI/CLI )时。

还原前

应在调用还原操作之前执行需要执行的操作。

用户触发还原操作时。

还原

负责执行应用程序的还原 / 恢复。

用户触发还原操作时。

应用程序版本

以检索插件管理的应用程序版本。

作为备份 / 还原 / 克隆等每个工作流中 ASUP 数据收集的一部分。

教程

本节介绍如何使用 Java 编程语言创建自定义插件。

设置 Eclipse

  1. 在 Eclipse 中创建一个新的 Java 项目 "TuttorialPlug"

  2. 单击 * 完成 * 。

  3. 右键单击 * 新项目 * → * 属性 * → * Java 构建路径 * → * 库 * → * 添加外部 JAR *

  4. 导航到主机代理的 ./lib/ 文件夹,然后选择 JAR scAgent-5.0-core.jar 和 common-5.0.jar

  5. 选择项目并右键单击 * 源文件夹 * → * 新增 * → * 软件包 * ,然后创建一个名为 com.netapp.snapcreator.agent.plugin.TutorialPlugin 的新软件包

  6. 右键单击新软件包并选择新建 → Java 类。

    1. 输入名称作为 TuttorialPlugin 。

    2. 单击超类浏览按钮并搜索 "* 抽象插件 " 。只应显示一个结果:

       "AbstractPlugin - com.netapp.snapcreator.agent.nextgen.plugin".
      .. 单击 * 完成 * 。
      .. 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;
        }
      }

实施所需的方法

暂停,取消静默和版本是每个自定义 Java 插件必须实施的强制方法。

以下是返回插件版本的版本方法。

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

方法在上下文对象中传递。其中包含多个帮助程序,例如 Logger 和上下文存储,以及有关当前操作的信息(工作流 ID ,作业 ID )。我们可以通过调用 final Logger logger = context.getLogger ()来获取此日志程序。logger 对象提供了其他日志记录框架中已知的类似方法,例如,登录回。在 result 对象中,您还可以指定退出代码。在此示例中,返回零,因为没有问题描述。其他退出代码可以映射到不同的故障情形。

正在使用结果对象

result 对象包含以下参数:

参数 Default Description

配置

空 配置

此参数可用于将配置参数发送回服务器。IT 可以是插件要更新的参数。是否存在此更改 实际反映在SnapCenter服务器上的配置中的取决于 配置中的APP_CONS_persistency=Y或N参数。

ExitCode

0

指示操作的状态。"0"表示操作为 已成功执行。其他值表示错误或警告。

标准输出

空 列表

这可用于将stdout消息传输回SnapCenter 服务器。

标准

空 列表

这可用于将stderr消息传输回SnapCenter 服务器。

消息

空 列表

此列表包含插件要返回到的所有消息 服务器SnapCenter 服务器会在命令行界面或图形用户界面中显示这些消息。

SnapCenter 代理可提供构建程序 ("构建程序模式") 其结果类型。这使得使用它们变得非常简单:

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

例如,将退出代码设置为 0 ,为 stdout 和 stderr 设置列表,设置配置参数,并附加要发送回服务器的日志消息。如果您不需要所有参数,请仅发送所需的参数。由于每个参数都有一个默认值,因此,如果从以下代码中删除 .withExitCode ( 0 ),则结果不会受到影响:

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

版本结果

VersionResult 会向 SnapCenter 服务器通知插件版本。因为它也会继承 根据结果、它包含config、exitCode、stdout、stderr和messages参数。

参数 Default Description

major

0

插件的主要版本字段。

次要

0

插件的次要版本字段。

patch

0

插件的修补程序版本字段。

build

0

此插件的 Build version 字段。

例如:

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

使用上下文对象

上下文对象提供了以下方法:

上下文方法 目的

string getWorkflowId();

返回的SnapCenter服务器正在使用的工作流ID 当前工作流。

config getconfig( );

返回正在从SnapCenter服务器发送到的配置 代理。

工作流 ID

工作流ID是SnapCenter服务器用来引用特定运行的的ID 工作流。

配置

此对象包含(大多数)用户可在上的配置中设置的参数 SnapCenter服务器。但是、由于安全原因、其中某些参数可能会出现 已在服务器端筛选。以下是有关如何访问此配置和检索的示例 参数:

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

"//myParameter"现在包含从SnapCenter服务器上的配置读取的参数 如果配置参数密钥不存在、则会返回空字符串("")。

导出插件

要在 SnapCenter 主机上安装此插件,必须导出此插件。

在 Eclipse 中,执行以下任务:

  1. 右键单击此插件的基本软件包(在本例中为 com.netapp.snapcreator.agent.plugin.TutorialPlugin)。

  2. 选择 * 导出 * → * Java * → * JAR 文件 *

  3. 单击 * 下一步 * 。

  4. 在以下窗口中,指定目标jar文件路径:tutorial_plugin.jar 此插件的基类名为TuborialPlugin.class、必须将此插件添加到文件夹中 同名。

如果插件依赖于其他库,则可以创建以下文件夹: lib/

您可以添加与插件相关的 JAR 文件(例如数据库驱动程序)。时间 SnapCenter会加载此插件、并自动将此文件夹中的所有jar文件与其和关联起来 将其添加到类路径中。