On Wed, Jul 13, 2011 at 7:45 PM, Jason Dillon <ja...@planet57.com> wrote:
>> I think support for Future was added in Camel 2.8.
>> http://camel.apache.org/camel-280-release.html
>>
>> Which is also documented here with example
>> http://camel.apache.org/using-camelproxy.html
>
> Yes I've seen+read all of this documentation.
>>
>>> When using proxies and beans to hide all Camel details from the 
>>> application-layer, how does one implement the bean-side of the Future 
>>> returning request?
>>>
>>> public interface SimpleService
>>> {
>>>    Future<String> test();
>>> }
>
>
> My question/point is that you can't really implement this SimpleService 
> interface on the server-side using Camel bean components:
>
>>> public class SimpleServiceImpl
>>>    implements SimpleService
>>> {
>>>    public Future<String> test() {
>>>        return ???
>>>    }
>>> }
>
> You would have to have:
>
> public interface SimpleServiceServer
> {
>    String test();
> }
>
> and:
>
> public class SimpleServiceServerImpl
>    implements SimpleServiceServer
> {
>    public String test() {
>        return "test";
>    }
> }
>

See this unit test, where you dont have to implement any interface at all
http://svn.apache.org/viewvc?rev=1146964&view=rev


> But when you try then to use a camel-proxy for SimpleService w/ 
> Future<String> test() the invocation fails, unable to find the correct method:
>
> <snip>
> java.util.concurrent.ExecutionException: java.lang.IllegalAccessException: 
> Class org.apache.camel.component.bean.MethodInfo can not access a member of 
> class com.sonatype.overlord.xpi.AsyncProxyBeanCamelTest$1 with modifiers 
> "public"
>        at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
>        at java.util.concurrent.FutureTask.get(FutureTask.java:83)
>        at 
> com.sonatype.overlord.xpi.AsyncProxyBeanCamelTest.simpleService(AsyncProxyBeanCamelTest.java:94)
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>        at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       ....
> Caused by: java.lang.IllegalAccessException: Class 
> org.apache.camel.component.bean.MethodInfo can not access a member of class 
> com.sonatype.overlord.xpi.AsyncProxyBeanCamelTest$1 with modifiers "public"
>        at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
>        at 
> org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:329)
>        at 
> org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:231)
>        at 
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:169)
> </snip>
>
> Not a super helpful exception either.
>
>  * * *

I have been trying to reproduce this exception. Can you help me a bit
with showing some of your code that cased this exception?

>
> So it appears that the Future-based async support that has just been added 
> can only be used on the client-side of a proxy-bean usecase in Camel.
>
> I was hoping to be able to use Camel's proxy + bean features as a replacement 
> for Lingo-style (http://lingo.codehaus.org/) usecases.  But looks like this 
> isn't easily possible to use with async implemented asis.  Granted the 
> future-based async is richer than Lingo's oneway bits, though ATM that is all 
> I'm looking for for async, fire and forget events.
>
> I think there is enough plumbing in Camel to make it work, its just that the 
> current proxy + bean impls wouldn't be usable.  Or am I wrong in my analysis?
>
> --jason
>
>
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to