Re: JMS and Clojure?

2008-11-25 Thread falcon

Looks interesting.  I would try to limit external dependencies by
taking out Spring.  I have a tiny abstraction layer for JMS written in
Java (and another in JavaFX), where I feed in a Properties object with
all the parameters (server location, authentication, etc.) and get
quick access to various topic consumers and producers.  I suspect that
involving the properties object is not going to be very idiomatic
clojure.



On Nov 24, 8:50 pm, Luc Prefontaine [EMAIL PROTECTED]
wrote:
 We use a synchronous layer to JMS queues implemented in Java to hook our
 Clojure code to the messaging world.

 Two Java classes to implement a consumer and a producer with some common
 inheritance are used.
 We had already some Java implementation so we just beefed it up a bit to
 make more robust.

 We use Spring to load beans so loading a consumer look like this:

 (defn create-producer-consumer [name]
  (get-bean name)
 )

 The Spring bean being something similar to this:

         bean id=connectionFactoryBean
                 class=org.apache.activemq.pool.PooledConnectionFactory
                 property name=connectionFactory
 ref=connectionSimpleFactoryBean /
         /bean

         bean id=busMessageQConsumer
 class=com.softaddicts.products.higiebus.tools.jms.Consumer
                 property name=subject
                         
 value=HIGIEBUS.QUEUES.BUS_DATA?consumer.exclusive=true /
                 property name=connectionFactory 
 ref=connectionFactoryBean /
                 property name=transacted value=true /
                 property name=name value=HIGIEBUSRouting /
                 property name=ackMode value=CLIENT_ACKNOWLEDGE /
         /bean

 Now we have small wrappers in Clojure like these:

 (defn read-message
     Consume messages
     [consumer]
     (. consumer receive)
 )

 (deftrace send-message
 ;;    Send messages
     [producer msg]
     (. producer send msg)
 )

 (defn peek-text-message
     Peek at messages
     [consumer]
     (let [message (. consumer browse)]
      (if (not (nil? message)) (. message getText))
     )
 )

 and so on for commits, rollbacks, . The Java classes handle
 connection/release of resources, cleanup when the JVM exits, 
 We use the wrappers to protect ourselves from later changes in the
 implementation.

 We use ActiveMq 5.1 with master slave redundancy.

 Eventually we want to create a wrapper to allow Clojure functions to be
 called asynchronously but we are not there yet,
 mainly because we have other priorities.

 Using the Spring framework is certainly is a viable option,  we look at
 to reuse existing code and getting Clojure code called directly
 in an asynchronous fashion.

 We start the consumers in separate thread. polling for messages through
 read-message and consort. This at least gives us some
 asynchronous processing illusion for the moment.

 We expect to shrink the Java code down to a certain size in the next
 months and shift more stuff to Clojure
 but meanwhile we had to take the shortest path and that implied reusing
 existing stuff from the first stage prototype.
 We are scheduled to be in production in the next 8 weeks.
 Clojure was targeted for the routing layer in our message bus, that's
 were the immediate benefits are (dispatch logic, message cloning, ...)

 For now we have a resilient implementation ready for production so it's
 satisfactory considering I heard about Clojure in September...
 Since the beta book is in progress, i am also catching up rapidly about
 the language and expect to spit out more elegant code in the
 near future :)))

 Luc

 On Mon, 2008-11-24 at 16:36 -0800, falcon wrote:
  What is the best way of accessing Java Messaging Service though
  Clojure?

  Sounds like Rich has already experimented, with good results:
  rhickey: I did some playing (in Clojure) with JMS and OpenMQ and it was 
  awesome, easy, fun and vert fast, with pro level docs from Sun
  (http://clojure-log.n01se.net/date/2008-09-08.html)

  Thanks
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Clojure group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~--~~~~--~~--~--~---



JMS and Clojure?

2008-11-24 Thread falcon

What is the best way of accessing Java Messaging Service though
Clojure?

Sounds like Rich has already experimented, with good results:
rhickey: I did some playing (in Clojure) with JMS and OpenMQ and it was 
awesome, easy, fun and vert fast, with pro level docs from Sun
(http://clojure-log.n01se.net/date/2008-09-08.html)

Thanks
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Clojure group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~--~~~~--~~--~--~---



Re: JMS and Clojure?

2008-11-24 Thread Luc Prefontaine
We use a synchronous layer to JMS queues implemented in Java to hook our
Clojure code to the messaging world.

Two Java classes to implement a consumer and a producer with some common
inheritance are used.
We had already some Java implementation so we just beefed it up a bit to
make more robust.

We use Spring to load beans so loading a consumer look like this:

(defn create-producer-consumer [name]
 (get-bean name)
)

The Spring bean being something similar to this:

bean id=connectionFactoryBean
class=org.apache.activemq.pool.PooledConnectionFactory
property name=connectionFactory
ref=connectionSimpleFactoryBean /
/bean

bean id=busMessageQConsumer
class=com.softaddicts.products.higiebus.tools.jms.Consumer
property name=subject

value=HIGIEBUS.QUEUES.BUS_DATA?consumer.exclusive=true /
property name=connectionFactory ref=connectionFactoryBean 
/
property name=transacted value=true /
property name=name value=HIGIEBUSRouting /
property name=ackMode value=CLIENT_ACKNOWLEDGE /
/bean

Now we have small wrappers in Clojure like these:

(defn read-message
Consume messages
[consumer]
(. consumer receive)
)

(deftrace send-message
;;Send messages
[producer msg]
(. producer send msg)
)

(defn peek-text-message
Peek at messages
[consumer]
(let [message (. consumer browse)]
 (if (not (nil? message)) (. message getText))
)
)

and so on for commits, rollbacks, . The Java classes handle
connection/release of resources, cleanup when the JVM exits, 
We use the wrappers to protect ourselves from later changes in the
implementation.

We use ActiveMq 5.1 with master slave redundancy.

Eventually we want to create a wrapper to allow Clojure functions to be
called asynchronously but we are not there yet,
mainly because we have other priorities.

Using the Spring framework is certainly is a viable option,  we look at
to reuse existing code and getting Clojure code called directly
in an asynchronous fashion.

We start the consumers in separate thread. polling for messages through
read-message and consort. This at least gives us some 
asynchronous processing illusion for the moment.

We expect to shrink the Java code down to a certain size in the next
months and shift more stuff to Clojure
but meanwhile we had to take the shortest path and that implied reusing
existing stuff from the first stage prototype.
We are scheduled to be in production in the next 8 weeks.
Clojure was targeted for the routing layer in our message bus, that's
were the immediate benefits are (dispatch logic, message cloning, ...)

For now we have a resilient implementation ready for production so it's
satisfactory considering I heard about Clojure in September...
Since the beta book is in progress, i am also catching up rapidly about
the language and expect to spit out more elegant code in the
near future :)))

Luc


On Mon, 2008-11-24 at 16:36 -0800, falcon wrote:

 What is the best way of accessing Java Messaging Service though
 Clojure?
 
 Sounds like Rich has already experimented, with good results:
 rhickey: I did some playing (in Clojure) with JMS and OpenMQ and it was 
 awesome, easy, fun and vert fast, with pro level docs from Sun
 (http://clojure-log.n01se.net/date/2008-09-08.html)
 
 Thanks
  
 

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Clojure group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~--~~~~--~~--~--~---