comment faire pour créer la source de données à l'aide de chameau?
Je viens de commencer l'apprentissage de Apache Camel. J'ai compris les bases de Routes et de Composants. Maintenant, je veux donner un essai en se connectant à la base de données Oracle, la lecture des enregistrements d'une table et d'écrire les enregistrements d'un fichier à l'aide de File
composant. À lire à partir de la base de données je suppose que j'ai besoin d'utiliser JDBC
composant et de donner la dataSourceName
.
Cependant, je ne pouvais pas trouver toutes les informations sur la façon de créer une source de données à l'aide de chameau. Toutes les infos que j'ai trouvé sur ce thème utilise Printemps DSL exemples. Je n'utilise pas le Printemps, et j'ai juste besoin de le tester à l'aide de cette simple application Java autonome.
Je suis en utilisant JDK7u25 avec Apache Camel 2.12.1.
Quelqu'un peut s'il vous plaît poster un exemple de lecture à partir de la table oracle et écrire dans un fichier?
[MODIFIER]
Après avoir vérifié plusieurs solutions sur le web, j'ai découvert deux approches suivantes:
- À dos de dromadaire pour exécuter en tant qu' autonome. Voici mon 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; } }
- À l'aide de l'approche évoquée par Claus lbsen. Voici le nouveau 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; } }
Mais dans les deux cas, je suis en dessous exception:
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.
OriginalL'auteur ParagJ | 2013-10-14
Vous devez vous connecter pour publier un commentaire.
Il est le SQL exemple qui montre comment installer un
DataSource
Oui que des exemples d'utilisation de Printemps XML. Mais comment vous configurez la source de données peut être effectuée dans du code Java. Ensuite, vous devez vous inscrire à la source de données dans le Chameau de Registre.
Par exemple, vous pouvez utiliser un
JndiRegistry
ou laSimpleRegistry
. Ce dernier est plus facile.Voici le pseudo-code montrant le principe de la création d'un registre, ajouter les haricots dans ce registre, et ensuite fournir le registre pour le constructeur de
DefaultCamelContext
.Vous devez ajouter camel jdbc JAR au classpath, et les dépendances de camel jdbc. Si vous utilisez Maven qui est facile, si pas, alors vous pouvez avoir besoin de télécharger et d'ajouter plus de Pots manuellement.
Pour OSGI users - fonction:installer camel jdbc
OriginalL'auteur Claus Ibsen
Si bête moi! Je n'avais pas inclus camel-jdbc-2.12.1.jar dans le CLASSPATH. Maintenant, au-dessus des exemples de travail.
OriginalL'auteur ParagJ
Printemps était là juste parce qu'il est très utile paradigme de travailler avec DB (principalement en raison de les modèles introduits par le Framework Spring.) Bien sûr, vous pouvez brancher la norme JDBC de connexion et de mettre en œuvre DAO par vous-même - rien de mal à cela.
OriginalL'auteur aviad