Acabo de empezar a aprender Apache Camel. He entendido los conceptos básicos de las Rutas y de los Componentes. Ahora quiero dar un intento por conectar a la base de datos de Oracle, la lectura de los registros de una tabla en particular y escribir los registros a un archivo mediante File componente. Para leer de la base de datos supongo que tengo que usar JDBC componente y dar la dataSourceName.

Sin embargo, no pude encontrar ninguna información sobre cómo crear un origen de datos mediante el camello. Toda la info que he encontrado relacionado con este tema se utiliza la Primavera DSL ejemplos. Yo no uso la Primavera y necesito probar este sencillo de uso independiente de la aplicación Java.

Estoy usando JDK7u25 con Apache Camel 2.12.1.

Puede alguien por favor enviar una muestra a leer a partir de la tabla de oracle y escribir en un archivo?

[EDITAR]

Después de comprobar varias soluciones en la web, me vine a saber acerca de los siguientes dos enfoques:

  1. Camello para que se ejecute como independiente. Aquí está mi código:
    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;
        }
    }
  2. Utilizando el enfoque mencionado por Claus lbsen. Aquí está de nuevo el código:
    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;
        }
    }

Pero en ambos casos me estoy poniendo debajo de excepción:

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.
Hey Parag, he requisito similar, estoy utilizando la misma base de código que has publicado, pero no estoy consiguiendo nada en la ruta mencionada.cualquier cambio que se requiere en el mismo código? He comprobado mi origen de datos y se establece la conexión. Por favor, ayudar. si es necesario voy a publicar mi código.

OriginalEl autor ParagJ | 2013-10-14

3 Comentarios

  1. 6

    No es el SQL de ejemplo que muestra cómo configurar una DataSource

    Sí que ejemplos de utilización de la Primavera XML. Pero, ¿cómo configurar el origen de datos se puede hacer en el código de Java también. Entonces usted necesita para registrar el origen de datos en el Camello de Registro.

    Por ejemplo, usted puede utilizar un JndiRegistry o la SimpleRegistry. La última es más fácil.

    Aquí hay algunos pseudo código que muestra el principio de la creación de un registro, agregar los frijoles en este registro, y luego proporcionar el registro para el constructor de DefaultCamelContext.

    SimpleRegistry registry = new SimpleRegistry();
    
    //code to create data source here
    DateSource ds = ...
    
    registry.put("myDataSource", ds);
    
    CamelContext camel = new DefaultCamelContext(registry);
    lbsen: Gracias por la info. Sí, he probado que el uso de SimpleRegistry pero me estoy haciendo una excepción. Por favor vea la pregunta, he actualizado.
    Usted necesita agregar camello-jdbc JAR al classpath, y las dependencias de camello-jdbc. Si se utiliza Maven que es fácil, si no, entonces usted necesita para descargar y agregar más Frascos de forma manual.
    Para OSGI usuarios – característica:instalar camello-jdbc

    OriginalEl autor Claus Ibsen

  2. 2

    Tan tonto de mí! Yo no había incluido camel-jdbc-2.12.1.jar en el CLASSPATH. Ahora ejemplos anteriores de trabajo.

    OriginalEl autor ParagJ

  3. 0

    Primavera se mencionó no sólo porque es muy útil paradigma de trabajo con base de datos (principalmente debido a plantillas introducido por el Framework Spring.) Por supuesto, usted puede conectar el estándar JDBC conexión e implementar DAO por sí mismo – no hay nada de malo con eso.

    OriginalEl autor aviad

Dejar respuesta

Please enter your comment!
Please enter your name here