You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Sven Richter <sv...@googlemail.com> on 2013/05/13 16:40:27 UTC
Camel-mongodb with Scala and JndiRegistry
Hi,
i am fairly new to camel and scala and try to get the hang of it. For
this i want to write a small scala application which takes some input
and writes it into a mongodb database.
Looking at the camel-mongodb documentation i see i have to define a
Mongo bean somewhere in my application so that camel can connect to
it. This is my code which tries to achieve this:
// application
def createDefaultContextJndiRegistry(): DefaultCamelContext = {
def reg = new JndiRegistry(new JndiContext())
def connectionBean = new Mongo("localhost", 27017)
reg.bind("myConnection", connectionBean)
def context = new DefaultCamelContext(reg)
context
}
camelContext.addRoutes(new RssRouteBuilder)
camelContext.start
//rssRouteBuilder
class RssRouteBuilder() extends RouteBuilder{
def configure(){
from("direct:insert").to("log:de.sveri.talk.rss?level=DEBUG").to("mongodb:myConnection?database=talk&collection=rss&operation=insert")
}
}
When i execute that code i get an error message [1] saying that it
cannot find "myConnection". So i guess i dont use the JndiRegistry in
the right way. I also tried to use the SimpleRegistry, but that threw
the same error.
So my question is basically how to use the Registry and camel-mongodb
when i dont use spring.
Best Regards,
Sven
[1]
Exception in thread "main"
org.apache.camel.FailedToCreateRouteException: Failed to create route
route2 at: >>> To[mongodb:myConnection?database=talk&collection=rss&operation=insert]
<<< in route: Route(route2)[[From[direct:insert]] ->
[To[log:de.sveri.talk... because of Failed to resolve endpoint:
mongodb://myConnection?collection=rss&database=talk&operation=insert
due to: No bean could be found in the registry for: myConnection of
type: com.mongodb.Mongo
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:883)
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:176)
at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:750)
at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:1829)
at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1609)
at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1478)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1446)
at de.sveri.talk.Server$delayedInit$body.apply(Server.scala:61)
at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:71)
at scala.App$$anonfun$main$1.apply(App.scala:71)
at scala.collection.immutable.List.foreach(List.scala:318)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
at scala.App$class.main(App.scala:71)
at de.sveri.talk.Server$.main(Server.scala:11)
at de.sveri.talk.Server.main(Server.scala)
Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to
resolve endpoint:
mongodb://myConnection?collection=rss&database=talk&operation=insert
due to: No bean could be found in the registry for: myConnection of
type: com.mongodb.Mongo
at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:508)
at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:62)
at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:191)
at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:108)
at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:114)
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:479)
at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:197)
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:880)
... 17 more
Caused by: org.apache.camel.NoSuchBeanException: No bean could be
found in the registry for: myConnection of type: com.mongodb.Mongo
at org.apache.camel.util.CamelContextHelper.mandatoryLookup(CamelContextHelper.java:142)
at org.apache.camel.component.mongodb.MongoDbComponent.createEndpoint(MongoDbComponent.java:43)
at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:119)
at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:488)
... 26 more
Re: Camel-mongodb with Scala and JndiRegistry
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
Ah yeah I am pretty sure you are not the only one who went down wrong
with var/val/def in Scala.
On Thu, May 16, 2013 at 12:09 AM, Sven Richter <sv...@googlemail.com> wrote:
> Well, like i said i am fairly new, instead of using val for variables
> i used "def", which is a very stupid mistake.
> This code works:
> val reg = new SimpleRegistry()
> val connectionBean = new Mongo("localhost", 27017)
> reg.put("myConnection", connectionBean)
> val camelContext = new DefaultCamelContext(reg)
> camelContext.addRoutes(new RssRouteBuilder)
> camelContext.start
>
> Best Regards,
> Sven
>
> On Mon, May 13, 2013 at 4:40 PM, Sven Richter <sv...@googlemail.com> wrote:
>> Hi,
>>
>> i am fairly new to camel and scala and try to get the hang of it. For
>> this i want to write a small scala application which takes some input
>> and writes it into a mongodb database.
>> Looking at the camel-mongodb documentation i see i have to define a
>> Mongo bean somewhere in my application so that camel can connect to
>> it. This is my code which tries to achieve this:
>> // application
>> def createDefaultContextJndiRegistry(): DefaultCamelContext = {
>> def reg = new JndiRegistry(new JndiContext())
>> def connectionBean = new Mongo("localhost", 27017)
>> reg.bind("myConnection", connectionBean)
>> def context = new DefaultCamelContext(reg)
>>
>> context
>> }
>>
>> camelContext.addRoutes(new RssRouteBuilder)
>> camelContext.start
>>
>> //rssRouteBuilder
>> class RssRouteBuilder() extends RouteBuilder{
>> def configure(){
>> from("direct:insert").to("log:de.sveri.talk.rss?level=DEBUG").to("mongodb:myConnection?database=talk&collection=rss&operation=insert")
>> }
>> }
>>
>> When i execute that code i get an error message [1] saying that it
>> cannot find "myConnection". So i guess i dont use the JndiRegistry in
>> the right way. I also tried to use the SimpleRegistry, but that threw
>> the same error.
>> So my question is basically how to use the Registry and camel-mongodb
>> when i dont use spring.
>>
>> Best Regards,
>> Sven
>>
>> [1]
>> Exception in thread "main"
>> org.apache.camel.FailedToCreateRouteException: Failed to create route
>> route2 at: >>> To[mongodb:myConnection?database=talk&collection=rss&operation=insert]
>> <<< in route: Route(route2)[[From[direct:insert]] ->
>> [To[log:de.sveri.talk... because of Failed to resolve endpoint:
>> mongodb://myConnection?collection=rss&database=talk&operation=insert
>> due to: No bean could be found in the registry for: myConnection of
>> type: com.mongodb.Mongo
>> at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:883)
>> at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:176)
>> at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:750)
>> at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:1829)
>> at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1609)
>> at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1478)
>> at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
>> at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1446)
>> at de.sveri.talk.Server$delayedInit$body.apply(Server.scala:61)
>> at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
>> at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
>> at scala.App$$anonfun$main$1.apply(App.scala:71)
>> at scala.App$$anonfun$main$1.apply(App.scala:71)
>> at scala.collection.immutable.List.foreach(List.scala:318)
>> at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
>> at scala.App$class.main(App.scala:71)
>> at de.sveri.talk.Server$.main(Server.scala:11)
>> at de.sveri.talk.Server.main(Server.scala)
>> Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to
>> resolve endpoint:
>> mongodb://myConnection?collection=rss&database=talk&operation=insert
>> due to: No bean could be found in the registry for: myConnection of
>> type: com.mongodb.Mongo
>> at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:508)
>> at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:62)
>> at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:191)
>> at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:108)
>> at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:114)
>> 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:479)
>> at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:197)
>> at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:880)
>> ... 17 more
>> Caused by: org.apache.camel.NoSuchBeanException: No bean could be
>> found in the registry for: myConnection of type: com.mongodb.Mongo
>> at org.apache.camel.util.CamelContextHelper.mandatoryLookup(CamelContextHelper.java:142)
>> at org.apache.camel.component.mongodb.MongoDbComponent.createEndpoint(MongoDbComponent.java:43)
>> at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:119)
>> at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:488)
>> ... 26 more
--
Claus Ibsen
-----------------
www.camelone.org: The open source integration conference.
Red Hat, Inc.
FuseSource is now part of Red Hat
Email: cibsen@redhat.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
Re: Camel-mongodb with Scala and JndiRegistry
Posted by Sven Richter <sv...@googlemail.com>.
Well, like i said i am fairly new, instead of using val for variables
i used "def", which is a very stupid mistake.
This code works:
val reg = new SimpleRegistry()
val connectionBean = new Mongo("localhost", 27017)
reg.put("myConnection", connectionBean)
val camelContext = new DefaultCamelContext(reg)
camelContext.addRoutes(new RssRouteBuilder)
camelContext.start
Best Regards,
Sven
On Mon, May 13, 2013 at 4:40 PM, Sven Richter <sv...@googlemail.com> wrote:
> Hi,
>
> i am fairly new to camel and scala and try to get the hang of it. For
> this i want to write a small scala application which takes some input
> and writes it into a mongodb database.
> Looking at the camel-mongodb documentation i see i have to define a
> Mongo bean somewhere in my application so that camel can connect to
> it. This is my code which tries to achieve this:
> // application
> def createDefaultContextJndiRegistry(): DefaultCamelContext = {
> def reg = new JndiRegistry(new JndiContext())
> def connectionBean = new Mongo("localhost", 27017)
> reg.bind("myConnection", connectionBean)
> def context = new DefaultCamelContext(reg)
>
> context
> }
>
> camelContext.addRoutes(new RssRouteBuilder)
> camelContext.start
>
> //rssRouteBuilder
> class RssRouteBuilder() extends RouteBuilder{
> def configure(){
> from("direct:insert").to("log:de.sveri.talk.rss?level=DEBUG").to("mongodb:myConnection?database=talk&collection=rss&operation=insert")
> }
> }
>
> When i execute that code i get an error message [1] saying that it
> cannot find "myConnection". So i guess i dont use the JndiRegistry in
> the right way. I also tried to use the SimpleRegistry, but that threw
> the same error.
> So my question is basically how to use the Registry and camel-mongodb
> when i dont use spring.
>
> Best Regards,
> Sven
>
> [1]
> Exception in thread "main"
> org.apache.camel.FailedToCreateRouteException: Failed to create route
> route2 at: >>> To[mongodb:myConnection?database=talk&collection=rss&operation=insert]
> <<< in route: Route(route2)[[From[direct:insert]] ->
> [To[log:de.sveri.talk... because of Failed to resolve endpoint:
> mongodb://myConnection?collection=rss&database=talk&operation=insert
> due to: No bean could be found in the registry for: myConnection of
> type: com.mongodb.Mongo
> at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:883)
> at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:176)
> at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:750)
> at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:1829)
> at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1609)
> at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1478)
> at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
> at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1446)
> at de.sveri.talk.Server$delayedInit$body.apply(Server.scala:61)
> at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
> at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
> at scala.App$$anonfun$main$1.apply(App.scala:71)
> at scala.App$$anonfun$main$1.apply(App.scala:71)
> at scala.collection.immutable.List.foreach(List.scala:318)
> at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
> at scala.App$class.main(App.scala:71)
> at de.sveri.talk.Server$.main(Server.scala:11)
> at de.sveri.talk.Server.main(Server.scala)
> Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to
> resolve endpoint:
> mongodb://myConnection?collection=rss&database=talk&operation=insert
> due to: No bean could be found in the registry for: myConnection of
> type: com.mongodb.Mongo
> at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:508)
> at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:62)
> at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:191)
> at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:108)
> at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:114)
> 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:479)
> at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:197)
> at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:880)
> ... 17 more
> Caused by: org.apache.camel.NoSuchBeanException: No bean could be
> found in the registry for: myConnection of type: com.mongodb.Mongo
> at org.apache.camel.util.CamelContextHelper.mandatoryLookup(CamelContextHelper.java:142)
> at org.apache.camel.component.mongodb.MongoDbComponent.createEndpoint(MongoDbComponent.java:43)
> at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:119)
> at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:488)
> ... 26 more