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>