Annotation support for the Siddhi Complex Event Processing Engine, providing extension definitions and validation for stream processors, functions, aggregations, and other extension types.
npx @tessl/cli install tessl/maven-org-wso2-siddhi--siddhi-annotations@4.5.0Siddhi 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 "";
}