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:44 UTC

[aries-journaled-events] branch master created (now f0da77e)

This is an automated email from the ASF dual-hosted git repository.

cschneider pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/aries-journaled-events.git.


      at f0da77e  Add Readme

This branch includes the following new commits:

     new 215c3ed  Add initial API
     new f0da77e  Add Readme

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[aries-journaled-events] 02/02: Add Readme

Posted by cs...@apache.org.
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 f0da77ebf5cd9c0467d76ddb27bb19613532e396
Author: Christian Schneider <cs...@adobe.com>
AuthorDate: Sun Dec 30 14:29:35 2018 +0100

    Add Readme
---
 Readme.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Readme.md b/Readme.md
new file mode 100644
index 0000000..3aea49d
--- /dev/null
+++ b/Readme.md
@@ -0,0 +1,3 @@
+# Apache Aries Journaled events
+
+This subproject provides an API (possibly as spec) and backends for journaled streams of events. These extend the publish/subscribe model with means to start consume from an point in the stored event stream history.


[aries-journaled-events] 01/02: Add initial API

Posted by cs...@apache.org.
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>