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