Reputation: 11
Hi I am new to apache camel framework (so most probobly the code I wrote is really bad :) ). I want to connect to my local database and run the sql query and then show up the results in consol. So far I have this:
import javax.sql.DataSource;
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.SimpleRegistry;
import org.apache.commons.dbcp2.BasicDataSource;
public class sqlENEIA3 {
public static void main(String[] args) throws Exception {
String url = "jdbc:oracle:thin:@localhost:1521:ENETEST";
DataSource dataSource = setupDataSource(url);
SimpleRegistry reg = new SimpleRegistry();
reg.put("myDataSource",dataSource);
CamelContext context = new DefaultCamelContext(reg);
context.addRoutes(new sqlENEIA3().new MyRouteBuilder());
context.start();
Thread.sleep(5000);
context.stop();
}
class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("timer://Timer?period=60000").to("sql:select * from projects").to("stream:out");
}
}
private static DataSource setupDataSource(String connectURI) {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("org.apache.commons.dbcp.BasicDataSource");
ds.setUsername("System");
ds.setPassword("Igor_1");
ds.setUrl(connectURI);
return ds;
}
}
The error message I get is this:
250 [main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel 2.16.3 (CamelContext: camel-1) is starting
260 [main] INFO org.apache.camel.management.ManagedManagementStrategy - JMX is enabled
492 [main] INFO org.apache.camel.impl.converter.DefaultTypeConverter - Loaded 186 type converters
542 [main] INFO org.apache.camel.impl.DefaultRuntimeEndpointRegistry - Runtime endpoint registry is in extended mode gathering usage statistics of all incoming and outgoing endpoints (cache limit: 1000)
632 [main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel 2.16.3 (CamelContext: camel-1) is shutting down
642 [main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel 2.16.3 (CamelContext: camel-1) uptime 0.382 seconds
642 [main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel 2.16.3 (CamelContext: camel-1) is shutdown in 0.000 seconds
Exception in thread "main" org.apache.camel.FailedToCreateRouteException: Failed to create route route1 at: >>> To[sql:select * from projects] <<< in route: Route(route1)[[From[timer://Timer?period=60000]] -> [To[sql:... because of Failed to resolve endpoint: sql://select%20*%20from%20projects due to: DataSource must be configured
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1072)
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:196)
at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:944)
at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:3260)
at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:2983)
at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:175)
at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2814)
at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2810)
at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2833)
at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2810)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2779)
at com.ericsson.custom.opl.sqlENEIA3.main(sqlENEIA3.java:30)
Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: sql://select%20*%20from%20projects due to: DataSource must be configured
at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:587)
at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:79)
at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:211)
at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:107)
at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:113)
at org.apache.camel.model.SendDefinition.resolveEndpoint(SendDefinition.java:62)
at org.apache.camel.model.SendDefinition.createProcessor(SendDefinition.java:56)
at org.apache.camel.model.ProcessorDefinition.makeProcessorImpl(ProcessorDefinition.java:535)
at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:496)
at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:220)
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1069)
... 12 more
Caused by: java.lang.IllegalArgumentException: DataSource must be configured
at org.apache.camel.component.sql.SqlComponent.createEndpoint(SqlComponent.java:74)
at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:114)
at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:5 67)
... 22 more
I assume that the problem is in my route, but every solution I found give the same result. Any help or advice will be helpful.
Upvotes: 1
Views: 4182
Reputation: 1771
You have to configure datasource:
from("timer://Timer?period=60000")
.to("sql:select * from projects?dataSource=myDataSource")
.to("stream:out");
You can use sql component like polling consumer (using of the timer is unnecessary). Some more info can be found here: (http://camel.apache.org/polling-consumer.html)
UPDATED 1:
Try to use datasource as shown below:
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value= "oracle.jdbc.pool.OracleDataSource" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:ENETEST" />
<property name="username" value="System" />
<property name="password" value="Igor_1" />
<property name="maxIdle" value="1" />
</bean>
Upvotes: 3