A UI and camel will only very rarely be a good match. So the first thing
you should check is if you really need camel. Often
you only need an eventing mechanism.
One of the best methods to check for this is to try to implement
something with camel and with pure java.
If the java solution is only a little more lines of code than the camel
then better do not use camel.
So if you are sure camel is a good match then you have some nice
integration points for your application.
An important one is pojo messaging
(http://camel.apache.org/pojo-messaging-example.html). It allows to
connect your UI with camel while still keeping both nicely separated.
When looking at the annotation examples keep in mind that annotations
also make you depend on camel. (Here is another link that shows how to
use interfaces to decouple your UI code from camel:
http://liquid-reality.de/display/liquid/2011/10/19/Using+Camel+to+do+light+weight+messaging+over+any+protocol).
So for example if you want to send an Order then create an interface
OrderReceiver with one method void onOrder(Order order).
You can let camel use this interface on sender as well as on receiver
side. So from your UI code you either call onOrder to send out an Order
or implement the interface to receive one.
(To decouple messaging using such an interface is btw. also a good
practice if you do not use camel).
So the above gives you a general method to attach your UI to camel.
Now how about having one sender and several receivers. This is a typical
messaging / eventing problem. So one simple solution is to use an
embedded in memory ActiveMQ for this. Send an order to jms:topicname and
receive it at several points using from("jms:topicname"). If you just
need this in process there are even lighter weigthed solutions than
activemq.
Christian
On 14.07.2014 18:26, Jon Mithe wrote:
Hello,
I'm learning about camel but I'm struggling to write a complete swing
desktop application with it nicely.
All of the examples/tutorials I have read always have a route from listening
to a port or a queue to being transformed and outputted into a
database/webservice etc but what about if the endpoints are going to be a
GUI? I could see maybe a custom bean / endpoint being a consumer/producer?
Also, how this works in a bigger application, so for example in the cafe
example http://camel.apache.org/cafe-example.html:
ProducerTemplate template = camelContext.createProducerTemplate();
Order order = create order
template.sendBody("direct:cafe", order);
Would you really call camelContext.createProducerTemplate();? I dont see how
that works bar there is only one route in camel that has an order.
For example, what happens here if there is a second route to save an order
halfway through it so it can be completed later, or for example another to
fire off an update / amendment for an existing order?
Likewise, if the Barista's had an application / order screen that they see
the incomming orders so they could make them.
If it were a simple list I could see maybe writing a bean and sending it to
that / that updates the gui. Are there any patterns for if there were n
things that need updated (say the app had a counter on the menu bar counting
total drinks made, or another widget to report stock levels up to the
barista)
I could see how a recipient list could be used, however, what happens if the
system is very modular / the thing receiving them doesnt know who is
interested -- I suppose this may be regarded as bad design / use but I can
see that being a problem applying / improving a legacy system. I see some
things with eventbus that maybe useful to fire off generic events into the
system but unsure.
Any help / insight would be great thanks, I think I'm getting a reasonable
grip with some EIP's and routes / flows and it really does look good, but
having a black spot on tieing it together into within a desktop application.
Thanks,
Jon
--
View this message in context:
http://camel.465427.n5.nabble.com/Desktop-applications-tp5753788.html
Sent from the Camel - Users mailing list archive at Nabble.com.
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
http://www.talend.com