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 2008/11/12 20:58:15 UTC

svn commit: r713480 - in /activemq/camel/branches/camel-1.x: ./ components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/ components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/

Author: davsclaus
Date: Wed Nov 12 11:58:14 2008
New Revision: 713480

URL: http://svn.apache.org/viewvc?rev=713480&view=rev
Log:
Merged revisions 713475 via svnmerge from 
https://svn.apache.org/repos/asf/activemq/camel/trunk

........
  r713475 | davsclaus | 2008-11-12 20:41:26 +0100 (on, 12 nov 2008) | 1 line
  
  CAMEL-1081: Polished camel-jdbc to be aligned with camel-sql. option readSize is now default 0 to support getting all data out-of-the-box.
........

Added:
    activemq/camel/branches/camel-1.x/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java
      - copied unchanged from r713475, activemq/camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcOptionsTest.java
Modified:
    activemq/camel/branches/camel-1.x/   (props changed)
    activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcComponent.java
    activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java
    activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
    activemq/camel/branches/camel-1.x/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcAnotherRouteTest.java
    activemq/camel/branches/camel-1.x/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcRouteTest.java

Propchange: activemq/camel/branches/camel-1.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Nov 12 11:58:14 2008
@@ -1 +1 @@
-/activemq/camel/trunk:709850,711200,711206,711219-711220,711523,711531,711756,711784,711859,711874,711962,711971,712064,712119,712148,712662,712692,712925,713013,713107,713273,713290,713292,713295,713314
+/activemq/camel/trunk:709850,711200,711206,711219-711220,711523,711531,711756,711784,711859,711874,711962,711971,712064,712119,712148,712662,712692,712925,713013,713107,713273,713290,713292,713295,713314,713475

Propchange: activemq/camel/branches/camel-1.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcComponent.java?rev=713480&r1=713479&r2=713480&view=diff
==============================================================================
--- activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcComponent.java (original)
+++ activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcComponent.java Wed Nov 12 11:58:14 2008
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jdbc;
 
 import java.util.Map;
+import javax.sql.DataSource;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
@@ -27,6 +28,7 @@
  * @version $Revision:520964 $
  */
 public class JdbcComponent extends DefaultComponent<DefaultExchange> {
+    private DataSource ds;
 
     public JdbcComponent() {
     }
@@ -37,7 +39,26 @@
 
     @Override
     protected Endpoint<DefaultExchange> createEndpoint(String uri, String remaining, Map parameters) throws Exception {
-        return new JdbcEndpoint(uri, remaining, this);
+        DataSource dataSource;
+
+        if (ds != null) {
+            // use data source set by setter
+            dataSource = ds;
+        } else {
+            // lookup in registry instead
+            dataSource = getCamelContext().getRegistry().lookup(remaining, DataSource.class);
+            if (dataSource == null) {
+                throw new IllegalArgumentException("DataSource " + remaining + " not found in registry");
+            }
+        }
+
+        JdbcEndpoint jdbc = new JdbcEndpoint(uri, this, dataSource);
+        setProperties(jdbc, parameters);
+        return jdbc;
+    }
+
+    public void setDataSource(DataSource dataSource) {
+        this.ds = dataSource;
     }
 
 }

Modified: activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java?rev=713480&r1=713479&r2=713480&view=diff
==============================================================================
--- activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java (original)
+++ activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java Wed Nov 12 11:58:14 2008
@@ -16,13 +16,13 @@
  */
 package org.apache.camel.component.jdbc;
 
-import java.net.URI;
-import java.net.URISyntaxException;
+import javax.sql.DataSource;
 
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.Component;
+import org.apache.camel.util.IntrospectionSupport;
 import org.apache.camel.impl.DefaultEndpoint;
 import org.apache.camel.impl.DefaultExchange;
 
@@ -30,46 +30,24 @@
  * @version $Revision:520964 $
  */
 public class JdbcEndpoint extends DefaultEndpoint<DefaultExchange> {
+    private int readSize;
+    private DataSource dataSource;
 
-    private URI uri;
-    private String remaining;
-    /** The maximum size for reading a result set <code>readSize</code> */
-    private int readSize = 20000;
-
-    protected JdbcEndpoint(String endpointUri, String remaining, JdbcComponent component) throws URISyntaxException {
+    public JdbcEndpoint(String endpointUri, Component component, DataSource dataSource) {
         super(endpointUri, component);
-        this.uri = new URI(endpointUri);
-        this.remaining = remaining;
-    }
-
-    public JdbcEndpoint(String endpointUri, String remaining) throws URISyntaxException {
-        super(endpointUri);
-        this.remaining = remaining;
-        this.uri = new URI(endpointUri);
+        this.dataSource = dataSource;
     }
 
     public boolean isSingleton() {
-        return false;
+        return true;
     }
 
     public Consumer<DefaultExchange> createConsumer(Processor processor) throws Exception {
-        throw new RuntimeCamelException("A JDBC Consumer would be the server side of database! No such support here");
+        throw new UnsupportedOperationException("Not supported");
     }
 
     public Producer<DefaultExchange> createProducer() throws Exception {
-        return new JdbcProducer(this, remaining, readSize);
-    }
-
-    public String getName() {
-        String path = uri.getPath();
-        if (path == null) {
-            path = uri.getSchemeSpecificPart();
-        }
-        return path;
-    }
-
-    public int getReadSize() {
-        return this.readSize;
+        return new JdbcProducer(this, dataSource, readSize);
     }
 
     public void setReadSize(int readSize) {

Modified: activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
URL: http://svn.apache.org/viewvc/activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java?rev=713480&r1=713479&r2=713480&view=diff
==============================================================================
--- activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java (original)
+++ activemq/camel/branches/camel-1.x/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java Wed Nov 12 11:58:14 2008
@@ -38,23 +38,18 @@
  * @version $Revision$
  */
 public class JdbcProducer extends DefaultProducer<DefaultExchange> {
-
     private static final transient Log LOG = LogFactory.getLog(JdbcProducer.class);
-    private DataSource source;
-
-    /** The maximum size for reading a result set <code>readSize</code> */
-    private int readSize = 2000;
+    private DataSource dataSource;
+    private int readSize;
 
-    public JdbcProducer(JdbcEndpoint endpoint, String remaining, int readSize) throws Exception {
+    public JdbcProducer(JdbcEndpoint endpoint, DataSource dataSource, int readSize) throws Exception {
         super(endpoint);
+        this.dataSource = dataSource;
         this.readSize = readSize;
-        source = (DataSource) getEndpoint().getCamelContext().getRegistry().lookup(remaining);
     }
 
     /**
      * Execute sql of exchange and set results on output
-     *
-     * @see org.apache.camel.Processor#process(org.apache.camel.Exchange)
      */
     public void process(Exchange exchange) throws Exception {
         String sql = exchange.getIn().getBody(String.class);
@@ -62,8 +57,11 @@
         Statement stmt = null;
         ResultSet rs = null;
         try {
-            conn = source.getConnection();
+            conn = dataSource.getConnection();
             stmt = conn.createStatement();
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Executing JDBC statement: " + sql);
+            }
             if (stmt.execute(sql)) {
                 rs = stmt.getResultSet();
                 setResultSet(exchange, rs);
@@ -88,15 +86,10 @@
         }
     }
 
-    public int getReadSize() {
-        return this.readSize;
-    }
-
-    public void setReadSize(int readSize) {
-        this.readSize = readSize;
-    }
-
-    public void setResultSet(Exchange exchange, ResultSet rs) throws SQLException {
+    /**
+     * Sets the result from the ResultSet to the Exchange as its OUT body.
+     */
+    protected void setResultSet(Exchange exchange, ResultSet rs) throws SQLException {
         ResultSetMetaData meta = rs.getMetaData();
 
         HashMap<String, Object> props = new HashMap<String, Object>();
@@ -106,7 +99,7 @@
         int count = meta.getColumnCount();
         List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
         int rowNumber = 0;
-        while (rs.next() && rowNumber < readSize) {
+        while (rs.next() && (readSize == 0 || rowNumber < readSize)) {
             HashMap<String, Object> row = new HashMap<String, Object>();
             for (int i = 0; i < count; i++) {
                 int columnNumber = i + 1;
@@ -116,6 +109,7 @@
             data.add(row);
             rowNumber++;
         }
+
         exchange.getOut().setBody(data);
     }
 

Modified: activemq/camel/branches/camel-1.x/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcAnotherRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/branches/camel-1.x/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcAnotherRouteTest.java?rev=713480&r1=713479&r2=713480&view=diff
==============================================================================
--- activemq/camel/branches/camel-1.x/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcAnotherRouteTest.java (original)
+++ activemq/camel/branches/camel-1.x/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcAnotherRouteTest.java Wed Nov 12 11:58:14 2008
@@ -34,7 +34,6 @@
     private String user = "sa";
     private String password = "";
     private DataSource ds;
-    private JdbcTemplate jdbc;
 
     public void testTimerInvoked() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");

Modified: activemq/camel/branches/camel-1.x/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/branches/camel-1.x/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcRouteTest.java?rev=713480&r1=713479&r2=713480&view=diff
==============================================================================
--- activemq/camel/branches/camel-1.x/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcRouteTest.java (original)
+++ activemq/camel/branches/camel-1.x/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcRouteTest.java Wed Nov 12 11:58:14 2008
@@ -37,9 +37,8 @@
     private String user = "sa";
     private String password = "";
     private DataSource ds;
-    private JdbcTemplate jdbc;
 
-    public void testPojoRoutes() throws Exception {
+    public void testJdbcRoutes() throws Exception {
         // START SNIPPET: invoke
         // first we create our exchange using the endpoint
         Endpoint endpoint = context.getEndpoint("direct:hello");