I guess you could reuse the EJB3 annotations for stateless / stateful metadata?
On 8/21/06, Philip Dodds <[EMAIL PROTECTED]> wrote:
The destination annotation looks great ! I assume the main body of the JBI POJO here is the request/answer annotations. What I'm not sure about here is the use of fields - so this is a stateful class? I was thinking that async would be a hybrid of the destination and the processor? public class Example1 { @Destination(uri="service:urn:service", request="myFirstRequest") private Destination service1; public void sendRequest() { service1.send(new Message()); } @ExchangeProcessor(request="myFirstRequest") public void sendRequest(@MessageContent Document in) { // Got response } } The premise being that if you have a async reply then you need to be stateless? P On 8/21/06, Guillaume Nodet <[EMAIL PROTECTED]> wrote: > Here is something i'd like to be able to do. > This is really pseudo code, and some kind of beanflow oriented annotations. > > This service would simply send two concurrent requests and wait for their > answers to reply to the main request. Of course, this would be much easier > if you use syncSend but you would not have a real workflow ;) > > public class MyWorkflow { > > Message request; > Message answer1; > Message answer2; > > @Destination(uri="service:urn:service") > private Destination service1; > > @Destination(uri="service:urn:service") > private Destination service2; > > @Request > @NextStep(steps = { invokeService, invokerService2 }) // This > would auto-fork > public void receiveRequest(Message message) throws Exception { > request = message; > } > > @NextStep(step = receiveService1) > public void invokeService1() { > service1.send(copy(request)); > // return response to "receiveService1" > } > > public void receiveService1(Message message) { > answer1 = message; > } > > @NextStep(step = receiveService2) > public void invokeService2() { > service2.send(copy(request)); > } > > public void receiveService2(Message message) { > answer2 = message; > } > > @Join(steps = { receiveService1, receiveService2 }) > @Answer() > public void answer() { > // Do something with answer1 and answer2 > return new Message() > } > } > > > On 8/21/06, Guillaume Nodet <[EMAIL PROTECTED]> wrote: > > While I fully agree to simplify the annotations used, > > if you begin to map parameters to properties or xml content, > > you end up to jsr181 component. > > > > I have already planned to add annotations a la jaxws to allow > > properties to be mapped to parameters in jsr181. A kind of > > JBI annotations set for jaxws (compared to the existing SOAP annotations). > > But if we begin to handle xml mapping here, we would end > > with 2 components with little differences. > > > > For example, the > > @ExchangeProcessor > > public SomeResponse doSomething(@MessageBody SomeRequest foo) { ... } > > > > could be further simplified to > > > > @WebMethod > > public SomeResponse doSomething(@WebParam SomeRequest foo) { ... } > > > > which is exactly what the jsr181 component do ;) > > > > Note that the jsr181 component should already by able to > > handle Source types as a parameter (which would map to > > the full payload), and we should be able to add a MessageExchange > > parameter which would receive the exchange without disturbing > > other parameters (xfire already does that for xfire specific > > classes, such as the context). > > > > We need to clearly agree on what we want to show and hide from > > the jbi spec in this component. I don't think we need another SE > > that do xml marshalling (we'd better enhance the existing one). > > > > The main things to define imho are: > > * how to return the answer if using an InOut > > * when the pojo acts as a consumer, how will it receive the answer > > from an InOut exchange it has previsouly sent > > > > I really think there is something to do with beanflow. > > I will try to think about that a bit more. > > > > On 8/21/06, James Strachan <[EMAIL PROTECTED]> wrote: > > > Just a bit of brainstorming of ideas here. > > > > > > I was looking at this example > > > > > > @ExchangeProcessor(patterns = { MessageExchangePattern.INOUT }, > > > parameterMappings = { ParameterMapping.IN_MESSAGE_CONTENT }) > > > public void myInOutProcessor(MessageExchange me) { > > > // Do something here > > > } > > > > > > @ExchangeProcessor(patterns = { MessageExchangePattern.INONLY, > > > MessageExchangePattern.ROBUSTINOULY }, parameterMappings = { > > > ParameterMapping.IN_MESSAGE_CONTENT }) > > > public void myInOnlyProcessor(Source payload) { > > > // Do something here > > > } > > > > > > and wondering how to simplify a little. > > > > > > My first thought was to use an annotation for each kind of exchange to > > > be supported... > > > > > > @InOnlyExchange @RobustInOnlyExchange > > > public void foo(MessageExchange exchange) { > > > } > > > > > > (I realised we'd get class name clashes so added the 'Exchange' > > > postfix to the annotation names. Then I figured it might be simpler to > > > just use a typesafe API... > > > > > > @ExchangeProcessor > > > public void foo(InOnly exchange) { > > > } > > > > > > @ExchangeProcessor > > > public void bar(RobustInOnly exchange) { > > > } > > > > > > I guess sometimes folks might not want to see/use the exchange or > > > might wish to support multiple patterns for one method so some kinda > > > annotation to indicate the exchange pattern is still useful. > > > > > > > > > Also how about annotating parameters as being bound to the exchange... > > > > > > @ExchangeProcessor > > > public void foo(@MessageProperty('cheese') String foo, > > > @ExchangeProperty("beer") Integer bar, @MessageContent Source payload) > > > { > > > } > > > > > > While the @MessageContent may at first not appear that useful, we > > > could allow some automatic tranformations from common types to message > > > contents such as DOM or JAXB marshalling etc > > > > > > e.g. > > > > > > @ExchangeProcessor > > > public SomeResponse doSomething(@MessageBody SomeRequest foo) { ... } > > > > > > where SomeRequest and SomeResponse could be marshalled to/from Source via JAXB2. > > > > > > This would allow folks to process exchanges without using any of the > > > JBI APIs if they wish - or inject a MessageExchange or > > > NormalizedMessage into a parameter if required. > > > > > > > > > On 8/21/06, James Strachan <[EMAIL PROTECTED]> wrote: > > > > Great stuff Philip! > > > > > > > > More feedback as I start digesting this fully and reading this whole > > > > thread but my first reaction is could we try to stick to standard > > > > annotations where possible - such as those defined in JSR 250? e.g. > > > > > > > > http://geronimo.apache.org/xbean/annotation-based-dependency-injection.html > > > > > > > > so > > > > > > > > @ServiceStartup -> @PostConstruct > > > > > > > > @ServiceShutdown -> @PreDestroy > > > > > > > > am also wondering how many of the other annotations are really > > > > required on injected fields - could we just use @Resource to indicate > > > > stuff that is mandatory to be dependency injected (like EJB3s). I'm > > > > sure some of the annotations are required though; am just wondering > > > > how many of them are > > > > > > > > > > > > On 8/18/06, Philip Dodds <[EMAIL PROTECTED]> wrote: > > > > > I have knocked up some thoughts on a JBI POJO engine that could be > > > > > used to provide a mechanism for annotating POJO specifically for more > > > > > messaging level operations that the JSR181 service engine is aimed > > > > > for. > > > > > > > > > > The idea is to provide a simple framework to replace the Spring Client > > > > > Toolkit that is now defunt. > > > > > > > > > > Have a look at the idea - > > > > > http://goopen.org/confluence/display/SM/JBI+Pojo+Service+Engine > > > > > > > > > > And all comments/thoughts are welcome!! > > > > > > > > > > P > > > > > > > > > > > > > > > > > -- > > > > > > > > James > > > > ------- > > > > http://radio.weblogs.com/0112098/ > > > > > > > > > > > > > -- > > > > > > James > > > ------- > > > http://radio.weblogs.com/0112098/ > > > > > > > > > -- > > Cheers, > > Guillaume Nodet > > > > > -- > Cheers, > Guillaume Nodet >
-- James ------- http://radio.weblogs.com/0112098/