我有一个活动界面:public interface BaseActivity
我的活动实施是:public class ABCActivity implements BaseActivity
我想添加第二个也实现BaseActivity
的活动实现,例如public class DEFActivity implements BaseActivity
。
我还希望我的活动工作者能够处理这些活动中的任何一个。
从我一直在尝试的情况来看,这似乎不可能。
public interface BaseActivity {
String activityMethod();
}
@Activities(version = 1.0", ...)
@ActivityRegistrationOptions( ... )
public interface ABCActivity extends BaseActivity {}
@Activities(version = 1.0", ...)
@ActivityRegistrationOptions( ... )
public interface DEFActivity extends BaseActivity {}
生成的ABCActivityClient
和DEFActivityClient
不包含activityMethod
。显然,如果我这样做:
@Activities(version = 1.0", ...)
@ActivityRegistrationOptions( ... )
public interface ABCActivity extends BaseActivity {
String activityMethod()
}
然后一切都很好,但这种情况违背了BaseActivity
的要点。
我认为工作流界面和实现方式相同。
有人有任何建议吗?
我问的原因是因为我想构建具有相同界面的多个工作流实现。这些工作流将共享一些常见活动(1个接口,1个实现),但也使用一些具有相同接口但实现不同的活动(1个接口,多个实现)。
当然,我可以为具有相同接口但实现不同的"活动写出不同的接口:
public interface ABCActivity
public class ABCActivityImpl implements ABCActivity
public interface DEFActivity
public class DEFActivityImpl implements DEFActivity
答案 0 :(得分:0)
活动界面不仅定义了签名,还定义了活动的活动类型和计划选项。因此,根据定义,活动的多个实现必须共享通过注释定义的类型和调度选项。因为SWF不知道要调用哪个活动实现。所以你想要的是不可能的。
标准解决方法是为不同的活动实施使用不同的任务列表。这需要为每个活动实现运行单独的ActivityWorker。
另一种选择是使用允许将活动类型指定为字符串的DynamicActivityClient。请参阅"动态客户"来自AWS Flow Guide
的部分