Annotation support for the Siddhi Complex Event Processing Engine, providing extension definitions and validation for stream processors, functions, aggregations, and other extension types.
Siddhi Annotations provides comprehensive annotation support for the Siddhi Complex Event Processing Engine, enabling developers to define and validate custom extensions through a standardized annotation framework. It includes core annotations for marking Siddhi extensions, compile-time validation processors, and runtime discovery mechanisms through ClassIndex integration.
<dependency>
<groupId>org.wso2.siddhi</groupId>
<artifactId>siddhi-annotations</artifactId>
<version>4.5.11</version>
</dependency>import org.wso2.siddhi.annotation.Extension;
import org.wso2.siddhi.annotation.Parameter;
import org.wso2.siddhi.annotation.ReturnAttribute;
import org.wso2.siddhi.annotation.SystemParameter;
import org.wso2.siddhi.annotation.Example;
import org.wso2.siddhi.annotation.util.DataType;import org.wso2.siddhi.annotation.*;
import org.wso2.siddhi.annotation.util.DataType;
@Extension(
name = "sum",
namespace = "math",
description = "Calculates the sum of numeric values.",
parameters = {
@Parameter(name = "value",
type = {DataType.INT, DataType.LONG, DataType.DOUBLE},
description = "Numeric value to be summed")
},
returnAttributes = @ReturnAttribute(
name = "sum",
type = {DataType.LONG, DataType.DOUBLE},
description = "Sum of the numeric values"
),
examples = @Example(
syntax = "from inputStream#math:sum(value) select sum insert into outputStream;",
description = "This calculates the sum of 'value' from inputStream."
)
)
public class SumFunction extends FunctionExecutor {
// Implementation details
}The Siddhi Annotations framework is built around several key components:
Primary annotations for marking and describing Siddhi extensions, including the main @Extension annotation and supporting annotations for parameters, return attributes, system parameters, and usage examples.
@interface Extension {
String name() default "";
String namespace() default "";
String description() default "";
Parameter[] parameters() default {};
SystemParameter[] systemParameter() default {};
ReturnAttribute[] returnAttributes() default {};
Example[] examples() default {};
}Compile-time validation framework that ensures extension annotations comply with Siddhi's requirements, with specialized processors for different extension types and comprehensive validation rules.
public class SiddhiAnnotationProcessor extends AbstractProcessor {
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv);
}
public abstract class AbstractAnnotationProcessor {
protected void basicParameterValidation(String name, String description, String namespace) throws AnnotationValidationException;
protected void parameterValidation(Parameter[] parameters) throws AnnotationValidationException;
protected void returnAttributesValidation(ReturnAttribute[] returnAttributes) throws AnnotationValidationException;
}Supporting classes including data type definitions, validation exceptions, and constants for extension superclasses and namespaces.
public enum DataType {
STRING, INT, LONG, FLOAT, DOUBLE, BOOL, OBJECT, TIME
}
public class AnnotationValidationException extends Exception {
public AnnotationValidationException(String message);
public AnnotationValidationException(String message, Throwable throwable);
public AnnotationValidationException(Throwable throwable);
}@interface Parameter {
String name() default "";
DataType[] type() default {};
String description() default "";
boolean optional() default false;
boolean dynamic() default false;
String defaultValue() default "";
}
@interface ReturnAttribute {
String name() default "";
DataType[] type() default {};
String description() default "";
}
@interface SystemParameter {
String name() default "";
String description() default "";
String defaultValue() default "";
String[] possibleParameters() default {};
}
@interface Example {
String syntax() default "";
String description() default "";
}Install with Tessl CLI
npx tessl i tessl/maven-org-wso2-siddhi--siddhi-annotations