Annotation Interface ActivityInterface


@Retention(RUNTIME) @Target(TYPE) public @interface ActivityInterface
Indicates that an interface is an activity interface. Only interfaces annotated with this annotation can be used as parameters to Workflow.newActivityStub(Class) methods.

Each method of the interface annotated with ActivityInterface including inherited from interfaces is a separate activity. By default, the name of an activity type is its method name with the first letter capitalized. Use namePrefix() or {ActivityMethod.name()} to make sure that activity type names are distinct.

Example:


  public interface A {
      a();
  }

 @ActivityInterface(namePrefix = "B_")
  public interface B extends A {
     b();
  }

 @ActivityInterface(namePrefix = "C_")
  public interface C extends B {
     c();
  }

  public class CImpl implements C {
      public void a() {}
      public void b() {}
      public void c() {}
  }
 
When CImpl instance is registered with the Worker the following activities are registered:
  • B_a
  • B_b
  • C_c
The workflow code can call activities through stubs to B and C interfaces. A call to crate stub to A interface will fail as A is not annotated with ActivityInterface.
  • Optional Element Summary

    Optional Elements
    Modifier and Type
    Optional Element
    Description
    Prefix to prepend to method names to generate activity types.
  • Element Details

    • namePrefix

      String namePrefix
      Prefix to prepend to method names to generate activity types. Default is empty string which means that method names are used as activity types.

      Note that this value is ignored if a name of an activity is specified explicitly through ActivityMethod.name().

      Be careful about names that contain special characters. These names can be used as metric tags. And systems like prometheus ignore metrics which have tags with unsupported characters.

      Default:
      ""