You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/12/23 12:52:48 UTC
[2/6] camel git commit: Initial stub of PostgreSQL Async
notifications component.
Initial stub of PostgreSQL Async notifications component.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7ce44a69
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7ce44a69
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7ce44a69
Branch: refs/heads/master
Commit: 7ce44a69897ad13316027206e277a2c29b7a6f39
Parents: bf4ddfe
Author: Deven Phillips <de...@gmail.com>
Authored: Thu Sep 4 09:13:55 2014 -0400
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Dec 23 12:26:59 2014 +0100
----------------------------------------------------------------------
components/camel-pgasync/ReadMe.txt | 18 ++++
components/camel-pgasync/pom.xml | 100 +++++++++++++++++++
.../apache/camel/pgasync/PGAsyncComponent.java | 18 ++++
.../apache/camel/pgasync/PGAsyncConsumer.java | 39 ++++++++
.../apache/camel/pgasync/PGAsyncEndpoint.java | 35 +++++++
.../apache/camel/pgasync/PGAsyncProducer.java | 24 +++++
.../services/org/apache/camel/component/pgasync | 1 +
.../org/apache/camel/PGAsyncComponentTest.java | 28 ++++++
.../src/test/resources/log4j.properties | 14 +++
9 files changed, 277 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/7ce44a69/components/camel-pgasync/ReadMe.txt
----------------------------------------------------------------------
diff --git a/components/camel-pgasync/ReadMe.txt b/components/camel-pgasync/ReadMe.txt
new file mode 100644
index 0000000..8a79b62
--- /dev/null
+++ b/components/camel-pgasync/ReadMe.txt
@@ -0,0 +1,18 @@
+Camel PostgreSQL Async Notifications Component Project
+======================================================
+
+This component implements an Endpoint which can both
+produce and consume async notifications for PostgreSQL
+>= 9.2.
+
+
+==Building==
+To build this project use
+
+ mvn install
+
+==References==
+For more help see the Apache Camel documentation:
+
+ http://camel.apache.org/writing-components.html
+
http://git-wip-us.apache.org/repos/asf/camel/blob/7ce44a69/components/camel-pgasync/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-pgasync/pom.xml b/components/camel-pgasync/pom.xml
new file mode 100644
index 0000000..631221b
--- /dev/null
+++ b/components/camel-pgasync/pom.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+ <artifactId>components</artifactId>
+ <groupId>org.apache.camel</groupId>
+ <version>2.14-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>camel-pgasync</artifactId>
+ <packaging>bundle</packaging>
+ <name>Camel :: PgAsync</name>
+ <description>A component which can receive and send PostgreSQL Async notifications</description>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <camel.osgi.export.pkg>org.apache.camel.component.pgasync.*</camel.osgi.export.pkg>
+ <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=pgasync</camel.osgi.export.service>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-core</artifactId>
+ <version>2.13.2</version>
+ </dependency>
+
+ <!-- logging -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.7.7</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.17</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- testing -->
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test</artifactId>
+ <version>2.13.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <defaultGoal>install</defaultGoal>
+
+ <plugins>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.5.1</version>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.6</version>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ </configuration>
+ </plugin>
+
+ <!-- to generate the MANIFEST-FILE of the bundle -->
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>2.3.7</version>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-SymbolicName>org.apache.camel.camel-pgasync</Bundle-SymbolicName>
+ <Export-Service>org.apache.camel.spi.ComponentResolver;component=pgasync</Export-Service>
+ </instructions>
+ </configuration>
+ </plugin>
+
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/camel/blob/7ce44a69/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncComponent.java b/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncComponent.java
new file mode 100644
index 0000000..2066ad8
--- /dev/null
+++ b/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncComponent.java
@@ -0,0 +1,18 @@
+package org.apache.camel.pgasync;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.impl.DefaultComponent;
+
+/**
+ * Represents the component that manages {@link PGAsyncEndpoint}.
+ */
+public class PGAsyncComponent extends DefaultComponent {
+
+ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+ Endpoint endpoint = new PGAsyncEndpoint(uri, this);
+ setProperties(endpoint, parameters);
+ return endpoint;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/7ce44a69/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncConsumer.java b/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncConsumer.java
new file mode 100644
index 0000000..2f1bc9d
--- /dev/null
+++ b/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncConsumer.java
@@ -0,0 +1,39 @@
+package org.apache.camel.pgasync;
+
+import java.util.Date;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.impl.ScheduledPollConsumer;
+
+/**
+ * The pgasync consumer.
+ */
+public class PGAsyncConsumer extends ScheduledPollConsumer {
+ private final PGAsyncEndpoint endpoint;
+
+ public PGAsyncConsumer(PGAsyncEndpoint endpoint, Processor processor) {
+ super(endpoint, processor);
+ this.endpoint = endpoint;
+ }
+
+ @Override
+ protected int poll() throws Exception {
+ Exchange exchange = endpoint.createExchange();
+
+ // create a message body
+ Date now = new Date();
+ exchange.getIn().setBody("Hello World! The time is " + now);
+
+ try {
+ // send message to next processor in the route
+ getProcessor().process(exchange);
+ return 1; // number of messages polled
+ } finally {
+ // log exception if an exception occurred and was not handled
+ if (exchange.getException() != null) {
+ getExceptionHandler().handleException("Error processing exchange", exchange, exchange.getException());
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/7ce44a69/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncEndpoint.java b/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncEndpoint.java
new file mode 100644
index 0000000..e164e05
--- /dev/null
+++ b/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncEndpoint.java
@@ -0,0 +1,35 @@
+package org.apache.camel.pgasync;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.impl.DefaultEndpoint;
+
+/**
+ * Represents a pgasync endpoint.
+ */
+public class PGAsyncEndpoint extends DefaultEndpoint {
+
+ public PGAsyncEndpoint() {
+ }
+
+ public PGAsyncEndpoint(String uri, PGAsyncComponent component) {
+ super(uri, component);
+ }
+
+ public PGAsyncEndpoint(String endpointUri) {
+ super(endpointUri);
+ }
+
+ public Producer createProducer() throws Exception {
+ return new PGAsyncProducer(this);
+ }
+
+ public Consumer createConsumer(Processor processor) throws Exception {
+ return new PGAsyncConsumer(this, processor);
+ }
+
+ public boolean isSingleton() {
+ return true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/7ce44a69/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncProducer.java b/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncProducer.java
new file mode 100644
index 0000000..61d51aa6
--- /dev/null
+++ b/components/camel-pgasync/src/main/java/org/apache/camel/pgasync/PGAsyncProducer.java
@@ -0,0 +1,24 @@
+package org.apache.camel.pgasync;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.impl.DefaultProducer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The pgasync producer.
+ */
+public class PGAsyncProducer extends DefaultProducer {
+ private static final Logger LOG = LoggerFactory.getLogger(PGAsyncProducer.class);
+ private PGAsyncEndpoint endpoint;
+
+ public PGAsyncProducer(PGAsyncEndpoint endpoint) {
+ super(endpoint);
+ this.endpoint = endpoint;
+ }
+
+ public void process(Exchange exchange) throws Exception {
+ System.out.println(exchange.getIn().getBody());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/7ce44a69/components/camel-pgasync/src/main/resources/META-INF/services/org/apache/camel/component/pgasync
----------------------------------------------------------------------
diff --git a/components/camel-pgasync/src/main/resources/META-INF/services/org/apache/camel/component/pgasync b/components/camel-pgasync/src/main/resources/META-INF/services/org/apache/camel/component/pgasync
new file mode 100644
index 0000000..9020f10
--- /dev/null
+++ b/components/camel-pgasync/src/main/resources/META-INF/services/org/apache/camel/component/pgasync
@@ -0,0 +1 @@
+class=org.apache.camel.PGAsyncComponent
http://git-wip-us.apache.org/repos/asf/camel/blob/7ce44a69/components/camel-pgasync/src/test/java/org/apache/camel/PGAsyncComponentTest.java
----------------------------------------------------------------------
diff --git a/components/camel-pgasync/src/test/java/org/apache/camel/PGAsyncComponentTest.java b/components/camel-pgasync/src/test/java/org/apache/camel/PGAsyncComponentTest.java
new file mode 100644
index 0000000..68966d2
--- /dev/null
+++ b/components/camel-pgasync/src/test/java/org/apache/camel/PGAsyncComponentTest.java
@@ -0,0 +1,28 @@
+package org.apache.camel;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class PGAsyncComponentTest extends CamelTestSupport {
+
+ @Test
+ public void testpgasync() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMinimumMessageCount(1);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ from("pgasync://foo")
+ .to("pgasync://bar")
+ .to("mock:result");
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/7ce44a69/components/camel-pgasync/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/components/camel-pgasync/src/test/resources/log4j.properties b/components/camel-pgasync/src/test/resources/log4j.properties
new file mode 100644
index 0000000..3b1bd38
--- /dev/null
+++ b/components/camel-pgasync/src/test/resources/log4j.properties
@@ -0,0 +1,14 @@
+#
+# The logging properties used
+#
+log4j.rootLogger=INFO, out
+
+# uncomment the following line to turn on Camel debugging
+#log4j.logger.org.apache.camel=DEBUG
+
+# CONSOLE appender not used by default
+log4j.appender.out=org.apache.log4j.ConsoleAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n
+#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+