camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From georgiosgeorgiadis <georgiosgeorgia...@yahoo.co.uk>
Subject Re: Camel TCP receiver endpoint
Date Wed, 13 Feb 2008 11:56:26 GMT

Thanks, though still it seems it is not working. I am sending a snippet of my
code just in case I do something wrong. 

First I send my Receiver class: 

public class Receiver{ 

  public static void main(String [] s){ 

    try{ 
                
          CamelContext context = new DefaultCamelContext(); 

          context.addRoutes(new RouteBuilder() { 
            public void configure() { 
                from("mina:tcp://localhost:6123").process(new Processor() { 
                    public void process(Exchange e) { 
                    System.out.println("Received exchange: " +
e.getIn().getBody()); 
                    e.getOut().setBody("tcp reply"); 
                    } 
                }); 
            } 
        }); 
                
        context.start(); 

    }catch(Throwable ex){ 
      ex.printStackTrace(); 
    } 
  } 
} 

When I start the receiver program, indeed a TCP server at port 6123
startslistening for calls. 

Now my Sender program: 

public class Sender{ 

  public static void main(String [] s){ 

     try{ 

        CamelContext context = new DefaultCamelContext(); 
                
        context.start(); 
                
        Endpoint endpoint =
context.getEndpoint("mina:tcp://localhost:6123"); 
        
        MinaExchange exchange =
(MinaExchange)endpoint.createExchange(ExchangePattern.InOut); 
        
        Message in = exchange.getIn(); 
        
        in.setBody("tcp request"); 

        Producer producer = endpoint.createProducer(); 
        
        producer.start(); 
        
        producer.process(exchange); 
        
        Message out = exchange.getOut(); 
        
        System.out.println(out.getBody()); 
        
        producer.stop(); 
        
        context.stop();     

    }catch(Throwable ex){ 
      ex.printStackTrace(); 
    } 

  } 
} 

When I start the sender, the request is received by the receiver, thus I see 
"Received exchange: tcp request" 
printed on the receiver side. 

The sender blocks at Producer.process() method and after 10 seconds throws 

java.lang.RuntimeException: No response from server within 10000 millisecs 
        at
org.apache.camel.component.mina.MinaProducer.process(MinaProducer.java:76) 
        at Sender.main(Sender.java:33) 

And the exchange.getOut().getBody() is null. 

I am sure that I am doing something wrong, but I acnnot seem to see it. The
requiremnet is as simple as the above communication. 

The two snippets above should compile and run as is. 

Very best regards 

Georgios 




Hadrian Zbarcea wrote:
> 
> Hi Georgios,
> 
> I would be interested to know how your route looks like.  Camel is  
> actually a router that implements the EIP patterns, so in general it's  
> used to route messages to a server.  For implementing your server you  
> might want to take a look at Apache CXF.
> 
> That said it is possible to implement your servers directly in Camel  
> by implementing your own Processor or using for instance the camel- 
> bean component.  Your route would look something like:
> from("mina:tcp://localhost:9000").to("bean:myBean?method=myMethod");
> 
> And your bean something like:
> public class MyBean  {
>      public Object myMethod(Object body) {
>          // process your body here, e.g. below
>          System.out.println(">>>> " + body);
>          // ... then produce and return your output (not necessarily a  
> String)
>          String answer = "cheese";
>          return answer;
>      }
> 
> There are quite a few examples in the camel-bean component you could  
> look at or the camel examples.  If you decide to go with a processor,  
> you'd have to set the output body as Gary suggested.
> 
> I hope this helps,
> Hadrian
> 
> 
> On Feb 12, 2008, at 2:06 PM, Tully, Gary wrote:
> 
>> Hi Georgios,
>> I am new to this so apologies if I put you wrong but I think what you
>> need is to access the exchange Out message in your process method:
>>
>>  public void process(Exchange e) {
>>       e.getOut().setBody("some text");
>>  }
>>
>> Gary.
>>
>>> -----Original Message-----
>>> From: georgiosgeorgiadis [mailto:georgiosgeorgiadis@yahoo.co.uk]
>>> Sent: 12 February 2008 17:17
>>> To: camel-user@activemq.apache.org
>>> Subject: Re: Camel TCP receiver endpoint
>>>
>>>
>>> Hi James, thanks the examples helped a lot. I managed to
>>> create a Mina TCP receiver which routes the call to a
>>> component. Then I created a sender that calls the Mina TCP
>>> component and passes it a serializable object, which managed
>>> to reach my component at the other side of the TCP call. Till
>>> here all worked fine. Yeepee. My problem now is a response
>>> back to the caller. I have set up the sender to use Exchange
>>> of type InOut, but I am sure how to prompt the receiver to
>>> return a value via TCP to sender. The sender of course
>>> times-out after 10 seconds telling me that the
>>> Exchange.getOut() Message is null.
>>>
>>> Any suggestions?
>>>
>>> The InOut example from the Camel MINA examples works, but it
>>> uses a local variable which is accessed directly by both the
>>> receiver and sender (see protected Exchange receivedExchange;
>>> in MinaTcpWithInOutTest.java). In my case the receiver and
>>> sender in completely separate machines. I can see that my
>>> sender blocks for a timeout period of 10 seconds (can we control this
>>> parameter?) and returns. My receiver is added as a route
>>> listeningto the TCP port but the process method of processor
>>> is void thus there is no way to forward back a response.
>>>
>>> Hope all this makes sense.
>>>
>>> Thanks again for the huge help.
>>>
>>> Georgios
>>>
>>>
>>>
>>> James.Strachan wrote:
>>>>
>>>> On 12/02/2008, georgiosgeorgiadis
>>> <georgiosgeorgiadis@yahoo.co.uk> wrote:
>>>>>
>>>>> Thanks again James,
>>>>>
>>>>> I will give it a try and will keep posted.
>>>>>
>>>>> One last thing:
>>>>>
>>>>> Are there any MINA-Camel examples that I can look through
>>> somewhere?
>>>>
>>>> There's a bunch of test cases here...
>>>>
>>> https://svn.apache.org/repos/asf/activemq/camel/trunk/components/ 
>>> camel
>>>> -mina/
>>>>
>>>> in here...
>>>>
>>> https://svn.apache.org/repos/asf/activemq/camel/trunk/components/ 
>>> camel
>>>> -mina/src/test/java/org/apache/camel/component/mina/
>>>>
>>>> though these all use the default Codecs and don't configure
>>> their own.
>>>>
>>>> To ease the configuration of your codec, you could create
>>> an extension
>>>> of the MinaComponent that customizes the Codec to use and then bind
>>>> that new component to some URI scheme of your choosing.
>>>>
>>>> e.g. if you chose 'foo' as your new protocol scheme you could then
>>>> route in Camel via...
>>>>
>>>> from("foo://localhost:1234").to("something");
>>>>
>>>> See
>>>> http://activemq.apache.org/camel/writing-components.html
>>>> --
>>>> James
>>>> -------
>>>> http://macstrac.blogspot.com/
>>>>
>>>> Open Source Integration
>>>> http://open.iona.com
>>>>
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Camel-TCP-receiver-endpoint-tp15430834s2
>> 2882p15436595.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>
>> ----------------------------
>> IONA Technologies PLC (registered in Ireland)
>> Registered Number: 171387
>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,  
>> Ireland
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Camel-TCP-receiver-endpoint-tp15430834s22882p15456625.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message