You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by an...@apache.org on 2015/04/14 23:21:09 UTC

karaf-decanter git commit: Added the JDBC-appender.

Repository: karaf-decanter
Updated Branches:
  refs/heads/master 3831aed25 -> a142a9906


Added the JDBC-appender.


Project: http://git-wip-us.apache.org/repos/asf/karaf-decanter/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-decanter/commit/a142a990
Tree: http://git-wip-us.apache.org/repos/asf/karaf-decanter/tree/a142a990
Diff: http://git-wip-us.apache.org/repos/asf/karaf-decanter/diff/a142a990

Branch: refs/heads/master
Commit: a142a990606ea6f7bf25d2eaf238f59ce2b64748
Parents: 3831aed
Author: mhautman <mo...@gmail.com>
Authored: Tue Apr 14 13:55:58 2015 +0200
Committer: mhautman <mo...@gmail.com>
Committed: Tue Apr 14 22:26:22 2015 +0200

----------------------------------------------------------------------
 appender/jdbc/pom.xml                           | 90 ++++++++++++++++++++
 .../karaf/decanter/appender/jdbc/Activator.java | 48 +++++++++++
 .../decanter/appender/jdbc/JdbcAppender.java    | 60 +++++++++++++
 appender/pom.xml                                |  2 +-
 4 files changed, 199 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/a142a990/appender/jdbc/pom.xml
----------------------------------------------------------------------
diff --git a/appender/jdbc/pom.xml b/appender/jdbc/pom.xml
new file mode 100644
index 0000000..39d4b33
--- /dev/null
+++ b/appender/jdbc/pom.xml
@@ -0,0 +1,90 @@
+<?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/xsd/maven-4.0.0.xsd">
+
+    <!--
+
+        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.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.karaf.decanter</groupId>
+        <artifactId>appender</artifactId>
+        <version>3.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <groupId>org.apache.karaf.decanter.appender</groupId>
+    <artifactId>org.apache.karaf.decanter.appender.jdbc</artifactId>
+    <packaging>bundle</packaging>
+    <name>Apache Karaf :: Decanter :: Appender :: JDBC</name>
+
+    <dependencies>
+
+        <!-- Decanter API -->
+        <dependency>
+            <groupId>org.apache.karaf.decanter</groupId>
+            <artifactId>org.apache.karaf.decanter.api</artifactId>
+        </dependency>
+
+        <!-- OSGi -->
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+        </dependency>
+
+        <!-- SLF4J -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-dbcp2</artifactId>
+            <version>2.1</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <inherited>true</inherited>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+                        <Bundle-Version>${project.version}</Bundle-Version>
+                        <Bundle-Activator>org.apache.karaf.decanter.appender.jdbc.Activator</Bundle-Activator>
+                        <Import-Package>
+                            org.apache.karaf.decanter.api;version=${project.version},
+                            org.slf4j;version="[1.7,2)";resolution:=optional,
+                            *
+                        </Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/a142a990/appender/jdbc/src/main/java/org/apache/karaf/decanter/appender/jdbc/Activator.java
----------------------------------------------------------------------
diff --git a/appender/jdbc/src/main/java/org/apache/karaf/decanter/appender/jdbc/Activator.java b/appender/jdbc/src/main/java/org/apache/karaf/decanter/appender/jdbc/Activator.java
new file mode 100644
index 0000000..ddacac7
--- /dev/null
+++ b/appender/jdbc/src/main/java/org/apache/karaf/decanter/appender/jdbc/Activator.java
@@ -0,0 +1,48 @@
+package org.apache.karaf.decanter.appender.jdbc;
+
+import org.osgi.framework.*;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedService;
+import org.osgi.service.event.EventAdmin;
+import org.osgi.service.event.EventConstants;
+import org.osgi.service.event.EventHandler;
+import org.osgi.util.tracker.ServiceTracker;
+import org.slf4j.LoggerFactory;
+import org.slf4j.Logger;
+
+import javax.sql.DataSource;
+import java.util.Collection;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Properties;
+
+public class Activator implements BundleActivator{
+
+    private static Logger logger = LoggerFactory.getLogger(Activator.class);
+    private JdbcAppender appender;
+    private static final String CONFIG_PID = "org.apache.karaf.decanter.appender.elasticsearch";
+    private ServiceTracker<DataSource, ServiceRegistration> tracker;
+
+    @Override
+    public void start(final BundleContext bundleContext) throws Exception {
+        tracker = new ServiceTracker<DataSource, ServiceRegistration>(bundleContext,bundleContext.createFilter("(name=jdbc-appender)"),null){
+            @Override
+            public ServiceRegistration<?> addingService(ServiceReference reference) {
+                Properties properties = new Properties();
+                DataSource dataSource = (DataSource) bundleContext.getService(reference);
+                JdbcAppender appender = new JdbcAppender(dataSource);
+                return bundleContext.registerService(JdbcAppender.class , appender, (Dictionary) properties);
+            }
+
+            @Override
+            public void removedService(ServiceReference<DataSource> reference, ServiceRegistration service) {
+                service.unregister();
+                super.removedService(reference, service);
+            }
+        };
+        tracker.open();
+    }
+
+    @Override
+    public void stop(BundleContext bundleContext) throws Exception {if(tracker!=null)tracker.close();}
+}

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/a142a990/appender/jdbc/src/main/java/org/apache/karaf/decanter/appender/jdbc/JdbcAppender.java
----------------------------------------------------------------------
diff --git a/appender/jdbc/src/main/java/org/apache/karaf/decanter/appender/jdbc/JdbcAppender.java b/appender/jdbc/src/main/java/org/apache/karaf/decanter/appender/jdbc/JdbcAppender.java
new file mode 100644
index 0000000..dd61d6a
--- /dev/null
+++ b/appender/jdbc/src/main/java/org/apache/karaf/decanter/appender/jdbc/JdbcAppender.java
@@ -0,0 +1,60 @@
+package org.apache.karaf.decanter.appender.jdbc;
+
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.sql.DataSource;
+import java.sql.*;
+
+public class JdbcAppender implements EventHandler{
+
+    private final Logger logger = LoggerFactory.getLogger(JdbcAppender.class);
+    private DataSource dataSource;
+    private Connection connection;
+    private Statement statement;
+    private PreparedStatement preparedStatement;
+    private final String createQuery =
+            "CREATE TABLE IF NOT EXISTS `decanter` (" +
+            "`event_name` VARCHAR(255) NOT NULL," +
+            "`event_value` LONGBLOB NOT NULL," +
+            "PRIMARY KEY (`event_name`));";
+    private final String insertQuery = "INSERT INTO `decanter`(event_name,event_value) VALUES('?','?')";
+
+
+    public JdbcAppender(DataSource dataSource){
+        this.dataSource = dataSource;
+    }
+
+    @Override
+    public void handleEvent(Event event) {
+        try {
+            connection = dataSource.getConnection();
+            statement = connection.createStatement();
+            statement.executeUpdate(createQuery);
+            logger.debug("Database table \"decanter\" has been created or already exists");
+            for(String name : event.getPropertyNames())
+            {
+                preparedStatement = connection.prepareStatement(insertQuery);
+                preparedStatement.setString(0,name);
+                preparedStatement.setObject(1, event.getProperty(name));
+                preparedStatement.executeUpdate();
+            }
+            connection.commit();
+            logger.debug("Data was inserted into \"decanter\" table.");
+        } catch (SQLException e) {
+            try {
+                if(connection!= null) connection.rollback();
+            } catch (SQLException e1) {
+                logger.debug("An error occured and the rollback also failed.");
+                logger.error(e.getMessage());
+            }
+            logger.error("An error occured during the JDBC appending , be sure the connection from the datasource \"jdbc-appender\" provided is right.");
+        }finally {
+            try { if (statement != null) statement.close(); } catch(Exception e) {logger.error("Problem closing the database creation Statement.");}
+            try { if (preparedStatement != null) preparedStatement.close(); } catch(Exception e) {logger.error("Problem closing the PreparedStatement to insert data.");}
+            try { if (connection != null) connection.close(); } catch(Exception e) {logger.error("Problem closing the Connection.");}
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/a142a990/appender/pom.xml
----------------------------------------------------------------------
diff --git a/appender/pom.xml b/appender/pom.xml
index 3805113..989d4a7 100644
--- a/appender/pom.xml
+++ b/appender/pom.xml
@@ -37,7 +37,7 @@
         <module>log</module>
         <module>elasticsearch</module>
         <!-- TODO add redis appender -->
-        <!-- TODO add jdbc appender -->
+        <module>jdbc</module><!-- TODO add jdbc appender -->
         <!-- TODO jms/activemq appender -->
         <!-- TODO camel appender -->
     </modules>