Java Storlet 编写和部署指南¶
这是 Java 特定的 storlet 编写和部署指南。本指南是对更通用的 storlet 编写和部署指南的补充,应先阅读该指南。要编写 Java storlet,您需要 SCommon.jar,它将在 storlets 构建过程中构建,如开发和测试指南中所述。
将 .jar 导入 Eclipse 中的 Java 项目,并实现 org.openstack.storlet.common.IStorlet 接口。该接口有一个方法,如下所示
public void invoke(ArrayList<StorletInputStream> inStreams,
ArrayList<StorletOutputStream> outStreams,
Map<String,String> parameters, StorletLogger logger) throws StorletException;
以下是一个类图,说明了上述 API 中涉及的类。
StorleInputStream 用于将对象的数据流式传输到 storlet。每当 Storlet 获得对象作为输入时,都会提供该类的一个实例。实际上,它在所有 storlet 调用场景中用于流式传输对象的数据和元数据。要使用数据,请调用 getStream() 以获取一个 java.io.InputStream,您可以在其上读取。要使用元数据,请调用 getMetadata() 方法。
StorletObjectOutputStream。在所有调用场景中,storlet 都会使用该类的实例进行调用。
使用 setMetadata 方法设置对象的元数据。
使用 getStream 获取一个 java.io.OutputStream,您可以在其上写入对象的全部内容。
请注意,必须调用 setMetadata。此外,必须在写入数据之前调用它。关于使用 StorletObjectOutputStream 的更多指南如下。
StorletLogger。StorletLogger 类支持一个名为 emitLog 的方法,并接受一个 String。storlet 日志被写入主机机器。
通过 Swift REST API 调用时,invoke 方法将按如下方式调用
inStreams 数组将包含一个或多个 StorleInputStream 类型的元素,这些元素代表请求 URI 中出现的对象(以及可能的额外资源)。
outStreams 将包含一个 StorleObjectOutputStream 类型的元素,代表返回给用户的响应。
parameters 映射包含发送的执行参数。这些参数可以在 storlet 执行请求中指定。
一个 StorletLogger 实例。
提示¶
storlets 在 open-jdk 8 环境中执行。因此,storlet 代码需要的任何超出 open-jdk 8 的依赖项都应声明为 storlet 依赖项并与 storlet 一起上传。确切的详细信息请参见下面的部署部分。
在某些情况下,storlet 可能需要知道 storlet .jar 以及依赖项在 Linux 容器内的路径。原因可能是需要调用二进制依赖项。要获取该路径,请使用以下代码
// Get the path of this class image String strJarPath = StorletUtils.getClassFolder(this.getClass());
部署 Java Storlet¶
以下是部署 Java storlet 的具体指南
实现 storlet 的编译类需要包装在 .jar 中。此 jar 必须不包含 SCommon.jar。
类实现所依赖的任何 jar 都应作为单独的 jar 上传。
上传的 Java storlet 的名称必须采用 <name>-<version> 的形式,例如 identitystorlet-1.0.jar
“X-Object-Meta-Storlet-Main”元数据键应该是实现 IStorlet 接口的类的名称。例如,“org.openstack.storlet.identity.IdentityStorlet”
部署 Java 依赖项¶
java 依赖项必须是 .jar 或可执行文件