> 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"; } } 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. * * * 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