title: how to create datasource using camel?
body: <p>I have just started learning Apache Camel. I understood the basics of Routes and Components. Now I want to give a try by connecting to Oracle database, reading records from one particular table and write those records to a file using <code>File</code> component. To read from database I assume I need to use <code>JDBC</code> component and give the <code>dataSourceName</code>.</p>
  
  <p>However, I couldn't find any info on how to create a dataSource using camel. All info that I found related to this topic uses Spring DSL examples. I don't use Spring and I just need to test this using simple standalone Java application.</p>
  
  <p>I am using JDK7u25 with Apache Camel 2.12.1.</p>
  
  <p>Can someone please post a sample to read from the oracle table and write to a file?</p>
  
  <p><strong>[EDIT]</strong></p>
  
  <p>After checking several solutions on the web, I came to know about following two approaches:</p>
  
  <ol>
  <li><p>Camel to run as <a href="http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html" rel="noreferrer">standalone</a>. Here is my code:</p>
  
  <pre><code>import javax.sql.DataSource;    
  import org.apache.camel.main.Main;
  import org.apache.camel.builder.RouteBuilder;
  import org.apache.commons.dbcp.BasicDataSource;
  
  public class JDBCExample {
  
      private Main main;
  
      public static void main(String[] args) throws Exception {
          JDBCExample example = new JDBCExample();
          example.boot();
      }
  
      public void boot() throws Exception {
          // create a Main instance
          main = new Main();
          // enable hangup support so you can press ctrl + c to terminate the JVM
          main.enableHangupSupport();
  
          String url = "jdbc:oracle:thin:@MYSERVER:1521:myDB";
          DataSource dataSource = setupDataSource(url);
  
          // bind dataSource into the registery
          main.bind("myDataSource", dataSource);
  
          // add routes
          main.addRouteBuilder(new MyRouteBuilder());
  
          // run until you terminate the JVM
          System.out.println("Starting Camel. Use ctrl + c to terminate the JVM.\n");
          main.run();
      }
  
      class MyRouteBuilder extends RouteBuilder {
          public void configure() {
              String dst = "C:/Local Disk E/TestData/Destination";
              from("direct:myTable")
                 .setBody(constant("select * from myTable"))
                 .to("jdbc:myDataSource")
                  .to("file:" + dst);
          }
      }
  
      private DataSource setupDataSource(String connectURI) {
          BasicDataSource ds = new BasicDataSource();
          ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
          ds.setUsername("sa");
          ds.setPassword("devon1");
          ds.setUrl(connectURI);
          return ds;
      }
  }
  </code></pre></li>
  <li><p>Using the approach mentioned by Claus lbsen. Here is the code again:</p>
  
  <pre><code>import javax.sql.DataSource;
  import org.apache.camel.CamelContext;
  import org.apache.camel.impl.DefaultCamelContext;
  import org.apache.camel.impl.SimpleRegistry;
  import org.apache.camel.main.Main;
  import org.apache.camel.builder.RouteBuilder;
  import org.apache.commons.dbcp.BasicDataSource;
  
  public class JDBCExample {
  
      private Main main;
  
      public static void main(String[] args) throws Exception {
          String url = "jdbc:oracle:thin:@MYSERVER:1521:myDB";
          DataSource dataSource = setupDataSource(url);
  
          SimpleRegistry reg = new SimpleRegistry() ;
          reg.put("myDataSource",dataSource);
  
          CamelContext context = new DefaultCamelContext(reg);
          context.addRoutes(new JDBCExample().new MyRouteBuilder());
          context.start();
          Thread.sleep(5000);
          context.stop();
      }
  
      class MyRouteBuilder extends RouteBuilder {
          public void configure() {
              String dst = "C:/Local Disk E/TestData/Destination";
              from("direct:myTable")
                 .setBody(constant("select * from myTable"))
                 .to("jdbc:myDataSource")
                  .to("file:" + dst);
          }
      }
  
      private static DataSource setupDataSource(String connectURI) {
          BasicDataSource ds = new BasicDataSource();
          ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
          ds.setUsername("sa");
          ds.setPassword("devon1");
          ds.setUrl(connectURI);
          return ds;
      }
  }
  </code></pre></li>
  </ol>
  
  <p>But in both the cases I am getting below exception:</p>
  
  <pre><code>Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: jdbc://myDataSource due to: No component found with scheme: jdbc
      at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:534)
      at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:63)
      at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:192)
      at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:106)
      at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:112)
      at org.apache.camel.model.SendDefinition.resolveEndpoint(SendDefinition.java:61)
      at org.apache.camel.model.SendDefinition.createProcessor(SendDefinition.java:55)
      at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:500)
      at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:213)
      at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:909)
      ... 12 more
  [Thread-0] INFO org.apache.camel.main.MainSupport$HangupInterceptor - Received hang up - stopping the main instance.
  </code></pre>