You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2018/12/30 13:29:45 UTC
[aries-journaled-events] 01/02: Add initial API
This is an automated email from the ASF dual-hosted git repository.
cschneider pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-journaled-events.git
commit 215c3edf18add24aa5c397187d61a615d10d07a2
Author: Christian Schneider <cs...@adobe.com>
AuthorDate: Sun Dec 30 14:27:10 2018 +0100
Add initial API
---
.gitignore | 14 +
org.apache.aries.events.api/pom.xml | 9 +
.../java/org/apache/aries/events/api/Message.java | 17 ++
.../org/apache/aries/events/api/Messaging.java | 50 ++++
.../java/org/apache/aries/events/api/Position.java | 9 +
.../java/org/apache/aries/events/api/Seek.java | 8 +
.../org/apache/aries/events/api/Subscription.java | 9 +
.../org/apache/aries/events/api/TopicPosition.java | 11 +
.../org/apache/aries/events/api/package-info.java | 4 +
pom.xml | 333 +++++++++++++++++++++
10 files changed, 464 insertions(+)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ca2256e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,14 @@
+*.i??
+.DS_Store
+.checkstyle
+.classpath
+.pmd
+.project
+.ruleset
+.settings/
+target/
+velocity.log
+*.md.html
+.idea/
+generated/
+
diff --git a/org.apache.aries.events.api/pom.xml b/org.apache.aries.events.api/pom.xml
new file mode 100644
index 0000000..2a26c27
--- /dev/null
+++ b/org.apache.aries.events.api/pom.xml
@@ -0,0 +1,9 @@
+<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>
+ <parent>
+ <groupId>org.apache.aries.events</groupId>
+ <artifactId>org.apache.aries.events</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.apache.aries.events.api</artifactId>
+</project>
\ No newline at end of file
diff --git a/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Message.java b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Message.java
new file mode 100644
index 0000000..9dd2df3
--- /dev/null
+++ b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Message.java
@@ -0,0 +1,17 @@
+package org.apache.aries.events.api;
+
+import java.util.Map;
+
+/**
+ * TODO If we allow wild card consumption then a message also needs a topic
+ */
+public interface Message {
+ byte[] getPayload();
+
+ /**
+ * Position of the message in the topic
+ * @return
+ */
+ Position getPosition();
+ Map<String, String> getProperties();
+}
diff --git a/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Messaging.java b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Messaging.java
new file mode 100644
index 0000000..7432799
--- /dev/null
+++ b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Messaging.java
@@ -0,0 +1,50 @@
+package org.apache.aries.events.api;
+
+import java.util.Map;
+import java.util.function.Consumer;
+
+/**
+ * Journaled messaging API
+ */
+public interface Messaging {
+ /**
+ * Send a message to a topic. When this method returns the message
+ * is safely persisted.
+ */
+ void send(String topic, Message message);
+
+ /**
+ * Subscribe to a topic. The callback is called for each message received.
+ *
+ * @param topic to consume from. TODO Do we allow wild cards?
+ * @param position in the topic to start consuming from
+ * @param seek where to start from when position is not valid or null
+ * @param callback will be called for each message received
+ * @return Returned subscription must be closed by the caller to unsubscribe
+ */
+ Subscription subscribe(String topic, TopicPosition position, Seek seek, Consumer<Message> callback);
+
+ /**
+ * Create a message with payload and metadata
+ * @param payload
+ * @param props
+ * @return
+ */
+ Message newMessage(byte[] payload, Map<String, String> props);
+
+ /**
+ * Deserialize the position from the string
+ *
+ * @param position
+ * @return
+ */
+ Position positionFromString(String position);
+
+ /**
+ * Serialize position for storage
+ *
+ * @param position
+ * @return
+ */
+ String positionToString(Position position);
+}
diff --git a/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Position.java b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Position.java
new file mode 100644
index 0000000..4e1c8ee
--- /dev/null
+++ b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Position.java
@@ -0,0 +1,9 @@
+package org.apache.aries.events.api;
+
+/**
+ * Implementation dependent position in a the topic.
+ * E.g. For a kafka implementation this would be a list of (partition, offset)
+ */
+public interface Position {
+
+}
diff --git a/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Seek.java b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Seek.java
new file mode 100644
index 0000000..e763c31
--- /dev/null
+++ b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Seek.java
@@ -0,0 +1,8 @@
+package org.apache.aries.events.api;
+
+/**
+ * Starting position when no Position is available
+ */
+public enum Seek {
+ earliest, latest;
+}
diff --git a/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Subscription.java b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Subscription.java
new file mode 100644
index 0000000..97352af
--- /dev/null
+++ b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/Subscription.java
@@ -0,0 +1,9 @@
+package org.apache.aries.events.api;
+
+import java.io.Closeable;
+
+public interface Subscription extends Closeable {
+
+ @Override
+ void close();
+}
diff --git a/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/TopicPosition.java b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/TopicPosition.java
new file mode 100644
index 0000000..8416163
--- /dev/null
+++ b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/TopicPosition.java
@@ -0,0 +1,11 @@
+package org.apache.aries.events.api;
+
+import java.util.Set;
+
+/**
+ * Implementation dependent position in a the topic.
+ * E.g. For a kafka implementation this would be a list of (partition, offset)
+ */
+public interface TopicPosition {
+ Set<Position> getPositions();
+}
diff --git a/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/package-info.java b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/package-info.java
new file mode 100644
index 0000000..ad7a20b
--- /dev/null
+++ b/org.apache.aries.events.api/src/main/java/org/apache/aries/events/api/package-info.java
@@ -0,0 +1,4 @@
+@org.osgi.annotation.bundle.Export
+@org.osgi.annotation.versioning.Version("0.1.0")
+package org.apache.aries.events.api;
+
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..d300cac
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,333 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for additional
+ information regarding copyright ownership. The ASF licenses this file to
+ you under the Apache License, Version 2.0 (the "License"); you may not use
+ this file except in compliance with the License. You may obtain a copy of
+ the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+ by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ OF ANY KIND, either express or implied. See the License for the specific
+ language governing permissions and limitations under the License. -->
+<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/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>20</version>
+ <relativePath />
+ </parent>
+
+ <groupId>org.apache.aries.events</groupId>
+ <artifactId>org.apache.aries.events</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Aries Journaled Events Parent</name>
+
+ <scm>
+ <connection>scm:git@github.com:apache/aries-journaled-events.git</connection>
+ <developerConnection>scm:git@github.com:apache/aries-journaled-events.git</developerConnection>
+ <tag>HEAD</tag>
+ </scm>
+
+ <issueManagement>
+ <system>jira</system>
+ <url>https://issues.apache.org/jira/browse/ARIES</url>
+ </issueManagement>
+
+ <prerequisites>
+ <maven>3.5</maven>
+ </prerequisites>
+
+ <inceptionYear>2018</inceptionYear>
+
+ <modules>
+ <module>org.apache.aries.events.api</module>
+ </modules>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <bnd.version>4.1.0</bnd.version>
+ <slf4j.version>1.7.14</slf4j.version>
+ <log4j.version>1.2.6</log4j.version>
+ <exam.version>4.12.0</exam.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.core</artifactId>
+ <version>6.0.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.cmpn</artifactId>
+ <version>6.0.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.annotation.versioning</artifactId>
+ <version>1.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.annotation.bundle</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-jdk14</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>2.20.0</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-core</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.awaitility</groupId>
+ <artifactId>awaitility</artifactId>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-library</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-core</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicemix.bundles</groupId>
+ <artifactId>org.apache.servicemix.bundles.hamcrest</artifactId>
+ <version>1.3_1</version>
+ </dependency>
+ </dependencies>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-jdk14</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.aries.rsa</groupId>
+ <artifactId>org.apache.aries.rsa.spi</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.12</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.awaitility</groupId>
+ <artifactId>awaitility</artifactId>
+ <version>3.1.0</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <build>
+ <defaultGoal>install</defaultGoal>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>4.1.0</version>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.8.0</version>
+ <configuration>
+ <source>1.7</source>
+ <target>1.7</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>3.1.0</version>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>3.0.1</version>
+ <configuration>
+ <attach>true</attach>
+ <quiet>true</quiet>
+ <encoding>UTF-8</encoding>
+ <additionalparam>-Xdoclint:none</additionalparam>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>2.5.3</version>
+ <configuration>
+ <releaseProfiles>apache-release</releaseProfiles>
+ <autoVersionSubmodules>true</autoVersionSubmodules>
+ <mavenExecutorId>forked-path</mavenExecutorId>
+ <tagNameFormat>org.apache.aries.events-@{project.version}</tagNameFormat>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.8.0</version>
+ <configuration>
+ <source>1.8</source>
+ <target>1.8</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>biz.aQute.bnd</groupId>
+ <artifactId>bnd-maven-plugin</artifactId>
+ <version>${bnd.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>bnd-process</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.1.0</version>
+ <configuration>
+ <archive>
+ <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ <version>2.22</version>
+ <configuration>
+ <aggregate>true</aggregate>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <repositories>
+ <repository>
+ <id>apache.snapshots</id>
+ <name>Apache Maven Snapshot Repository</name>
+ <url>http://repository.apache.org/content/groups/snapshots/</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+
+ </repositories>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>apache.snapshots</id>
+ <name>Apache Maven Snapshot Repository</name>
+ <url>http://repository.apache.org/content/groups/snapshots/</url>
+ <layout>default</layout>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <profiles>
+ <profile>
+ <id>release-sign-artifacts</id>
+ <activation>
+ <property>
+ <name>performRelease</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-gpg-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>sign-artifacts</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>