目前的SDK支持似乎不包括它。我知道这很新,但是否有人有关于如何使用它的好资源,或者在以下任何一个SDK中需要实现哪些更改才能立即开始工作呢? 个人而言,我对Java和PHP SDK比较感兴趣...
更新的发布信息可见:http://aws.amazon.com/releasenotes,谢谢Bjorn!
我正在使用亚马逊简单工作流服务(SWF)和AWS Flow Framework实现异步业务处理。对我而言,使用Maven进行开发构建设置非常重要,这样我就可以轻松地从我选择的IDE(IntelliJ IDEA)构建,并自动化我的测试构建以进行持续集成,以及生产构建以进行发布和部署。
我的大部分时间都花在尝试使用AspectJ创建自动生成的代理类上。在Eclipse中,这对我来说一开始是个问题,因为我使用的是3.7(Indigo)版本,即使按照设置开发环境文档中的编译时和加载时织入指示进行操作,我也无法成功生成类。凭直觉,我记得文档中说他们使用的是Eclipse 3.6(Helios),因此我下载了这个特定版本的Eclipse,并尝试使用加载时织入方法,结果非常成功。通过比较这两个版本之间的Eclipse日志,我发现Eclipse 3.7缺少log4j
和freemarker
的依赖项。我没有太深入地去解决这个问题,因为我更多地使用的是IntelliJ IDEA,但我相信可以让Eclipse正常工作。pom.xml
中启用自动生成代理类,以便在IntelliJ IDEA Maven项目中运行。提示来自于《设置开发环境文档》中关于加载时编织的最后一段说明:
除非我弄错了,到目前为止,我所做的研究表明如果您正在通过命令行构建项目,请确保aws-java-sdk-flow-build-tools-1.3.3.jar在类路径中。该jar文件包含必须运行的AWS Flow Framework注释处理器以生成代码。有关示例,请参见样本文件夹中包含的build.xml文件。
aspectj-maven-plugin
目前不支持加载时织入。放弃加载时织入并结合使用aop.xml
文件和作为Java代理运行的aspectjweaver
,我转而使用此插件支持的编译时织入。我不禁想到,当我直接在Eclipse中安装AWS Java支持SDK时,它反过来将aws-java-sdk-flow-build-tools-1.3.3.jar
依赖项中发现的支持嵌入其中。根据上述线索,在将此JAR安装到我的本地Maven存储库后,在我的pom.xml
中包含aws-java-sdk-flow-build-tools-1.3.3.jar
的依赖项后,我最终能够获得代理类的输出。本条目的其余部分概述了实现所有这些的步骤。
pom.xml
。为了引用开发工作流和活动所需的类型,您需要下载 AWS SDK for Java。建议您使用 Maven 为项目和构建包含此库的 dependency
,但您仍应下载此库以获取位于 lib
目录下的 aws-java-sdk-flow-build-tools
库。
mvn install:install-file
-Dfile=aws-java-sdk-flow-build-tools-<version>.jar
-DgroupId=com.amazonaws
-DartifactId=aws-java-sdk-flow-build-tools
-Dversion=<version>
-Dpackaging=jar
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-flow-build-tools</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.18</version>
</dependency>
</dependencies>
pom.xml
文件还应包括以下插件
。我正在使用源包含模式,遵循我在代码中使用的打包和接口命名约定,但您不一定需要按照这种方式操作:<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<complianceLevel>1.5</complianceLevel>
<showWeaveInfo>true</showWeaveInfo>
<verbose>true</verbose>
<sources>
<source>
<basedir>src/main/java</basedir>
<includes>
<include>*/**/workflow/*Workflow.java</include>
<include>*/**/workflow/activities/*Activities.java</include>
</includes>
</source>
</sources>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
插件
,并至少运行了Maven编译
,您应该会在IntelliJ IDEA的Maven项目工具窗口下的插件
节点中看到一个aspectj
节点出现。如果需要,您还可以选择添加或微调aspectj-maven-plugin
插件的configuration
部分的元素。各种支持的设置可以在此处找到aspectj:compile
目标文档中。我还没有微调我的插件配置以确保.java
文件在我的源目录下生成到正确的位置,尽管我相信这是完全可行的。
依赖项
集,并至少运行了Maven编译
,您应该会在IntelliJ IDEA的项目工具窗口的外部库节点下至少看到以下一组依赖项。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>swf_example</groupId>
<artifactId>swf_example</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-flow-build-tools</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.18</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<complianceLevel>1.5</complianceLevel>
<showWeaveInfo>true</showWeaveInfo>
<verbose>true</verbose>
<sources>
<source>
<basedir>src/main/java</basedir>
<includes>
<include>*/**/workflow/*Workflow.java</include>
<include>*/**/workflow/activities/*Activities.java</include>
</includes>
</source>
</sources>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
要定义工作流程,您必须创建一个满足以下标准的Java接口:
以下是一个示例工作流接口,名为MyWorkflow
,它将包含在名为MyWorkflow.java
的文件中,位于源目录src/main/java
下,并位于包目录结构com/some/package/workflow
下。我没有包括@WorkflowRegistrationOptions
注释或其他花哨的内容,因为这些不是必需的,取决于您的特定需求:
package com.some.package.workflow;
import com.amazonaws.services.simpleworkflow.flow.annotations.Execute;
import com.amazonaws.services.simpleworkflow.flow.annotations.Workflow;
@Workflow
public interface MyWorkflow {
@Execute(version="1.0")
void doWorkflow();
}
要定义活动,您必须创建一个满足以下条件的Java接口:
以下是一个名为MyActivities
的示例活动接口,它将包含在名为MyActivities.java
的文件中,位于源目录src/main/java
下,并且位于包目录结构com/some/package/workflow/activities
下。我没有包括@ActivityRegistrationOptions
注释或其他花哨的内容,因为这些不是必需的,而且取决于您的特定需求:
package com.some.package.workflow.activities;
import com.amazonaws.services.simpleworkflow.flow.annotations.Activities;
@Activities(version="1.0")
public interface MyActivities {
void doActivity1();
void doActivity2();
void doActivity3();
}
为了确保在日常开发和非开发环境(例如测试、生产等)中,构建过程是相同的,您应该通过Maven在所选的开发工具中运行构建。 aws-java-sdk
和aws-java-sdk-flow-build-tools
JAR包中已经包含了各种方面,这些方面被编织到您的工作流和活动中,并且aws-java-sdk-flow-build-tools
JAR包包括必要的机制来自动生成执行工作流和活动所需的代理类。为了确保您正在使用最新生成的代理类,您应该在构建之前清除生成的工件,以丢弃不需要和/或旧的类。这可以通过在所选的开发工具中运行以下命令或等效命令来实现:
mvn clean install
aspectj-maven-plugin
插件中启用了showWeaveInfo
配置选项,您应该在构建输出中看到类似于以下片段的内容,尽管由于只有一个工作流和单个活动运行,这里只有几行输出:Mar 12, 2012 5:21:22 PM com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor process
INFO: AsynchronyDeciderAnnotationProcessor.process() invoked.
Mar 12, 2012 5:21:22 PM com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor process
INFO: Processing @Activities for MyActivities
Mar 12, 2012 5:21:22 PM com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor process
INFO: Processing @Workflow for MyWorkflow
Mar 12, 2012 5:21:22 PM com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor process
INFO: AsynchronyDeciderAnnotationProcessor.process() invoked.
一旦您编译了工作流和活动,您应该会发现以下一组自动生成的代理类已经被创建。这些代理用于在您的工作流中调用各种活动、在其他工作流中执行子工作流以及在顶层执行工作流。注意:以下项目中的字符串“Workflow”和“Activities”实际上将是您实际工作流和活动接口的名称,对于您定义的每个工作流和活动接口,您应该会看到以下一组类被创建:
Mac OS X version 10.7.3
Java
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-11D50b)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)
Maven
Apache Maven 3.0.3 (r1075438; 2011-02-28 12:31:09-0500)
Maven home: /usr/share/maven
Java version: 1.6.0_29, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x", version: "10.7.3", arch: "x86_64", family: "mac"
IntelliJ IDEA(社区版)
IntelliJ IDEA 11.0.2
Build #IC111.277
Built on February 1, 2012
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<goals>
<goal>compile</goal> <!-- use this goal to weave all your main classes -->
<goal>test-compile</goal> <!-- use this goal to weave all your test classes -->
</goals>
</execution>
</executions>
<configuration>
<complianceLevel>1.8</complianceLevel>
<showWeaveInfo>true</showWeaveInfo>
<verbose>true</verbose>
<source>1.8</source>
<target>1.8</target>
<aspectLibraries>
<aspectLibrary>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-swf-libraries</artifactId>
</aspectLibrary>
</aspectLibraries>
<!-- This is important so we don't double process the annotations -->
<proc>none</proc>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
对于那些勇敢阅读此文的人: 大部分内容仍然适用。要使其与Java 1.8配合使用,您需要使用以下AspectJ方面库:
<aspectLibraries>
<aspectLibrary>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-swf-libraries</artifactId>
</aspectLibrary>
</aspectLibraries>
查看完整示例,请访问: https://github.com/mirceal/swf-flow-java18-sample
<aspectLibraries>
<!-- for aspect weaving and swf versions -->
<aspectLibrary>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-swf-libraries</artifactId>
</aspectLibrary>
<aspectLibrary>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-flow-build-tools</artifactId>
</aspectLibrary>
</aspectLibraries>
希望这对您有所帮助!
你今天有没有检查更新的SDK呢?大约10小时前发布了一个新版本(至少是.NET1.4.3,于2012年2月21日发布)。