You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Christian Schneider <ch...@die-schneider.net> on 2014/02/13 11:08:10 UTC

Status of the jms transport rewrite, planned additional changes

Hi all,

I have finished one part of my rewrite of the jms transport:

- The spring dependencies are now gone. So the jms transport now only 
depends on the jms and jta specs as external libs.
- I have replaced the DefaultMessageListenerContainer with a simpler 
implementation. It uses one connection, one consumer and an 
ExecutorService. I am currently asking on the activemq list what I need 
to add to this for performance.
- As we are not using spring I removed the spring transaction support
- Currently there is no JTA transaction support but I plan to add it 
again. As I am not experienced in JTA and XA transactions I might need 
some help here. Any specialists?
- I removed the JMSEndpointType that is generated from XSD and replaced 
it by a simple Java bean in JMSEndpoint. I hope the xml serialization is 
not needed anywhere. If it is please speak up.


Now to my planned changes:

There are currently three ways to configure jms:

- Old style cxf proprietary config using conduit and wsdl extensors that 
were cxf specific
- JmsConfiguration which is also proprietary but allows some more 
injection friendly config
- SOAP/JMS spec support which combines some standardized wsdl extensors 
and uri based config

So I plan to:
1. Remove the old style config support as the soap/jms support should be 
a good replacement for it
2. Extend the uri based config with some context based resolver.

Some more details about the context based resolver:

The current uri based config looks like this:
jms:jndi:dynamicQueues/test.jmstransport.text?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactory&replyToName=dynamicQueues/test.jmstransport.response&jndiURL=tcp://localhost:61616&jndiConnectionFactoryName=ConnectionFactory

This is very verbose, requires jndi and does not fit well into a spring 
or blueprint config.

So I propose to lookup the connection factory and optionally a 
JmsConfiguration in the blueprint or spring context using the existing 
ConfiguredBeanLocator. A config with this style could look like this:

jms:queue:myqueue?ConnectionFactoryName=connectionFactory&Configuration=jmsConfig

So this would lookup the connection factory in the context using its 
bean id "connectionFactory". The jmsConfig would be also looked up by 
bean id.
The queue "myqueue" would be resolved by dynamic creation using the jms 
session like it is already done.

We could even shorten this to:
jms:queue:myqueue

In this case we could look up the connection factory using a default 
name "connectionFactory" and the jmsConfiguration with default name 
"jmsConfig".

This would use a topic for the service
jms:topic:mytopic?replyToName=myreplyqueuename

As far as I can say my proposed changes should be compatible with the 
spec even if they are not portable. I would be very happy to get some 
feedback about this and perhaps alternative designs.

For people that do not use blueprint or spring we should supply a 
ConfiguredBeanLocator that can be used as a kind of registry. So you can 
just put java objects into it.

Christian

-- 
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com


Re: Status of the jms transport rewrite, planned additional changes

Posted by Christian Schneider <ch...@die-schneider.net>.
Yes. At least anything bigger. I will try to get the connectionfactory 
and jmsconfig lookup in but only if all tests still pass.
I will delay the removal of the old style configs till after the m2.

Christian

Am 13.02.2014 11:14, schrieb Sergey Beryozkin:
> Hi Christian
>
> I'd like to propose to get the additional changes after 
> 3.0.0-milestone2 is out,
>
> Thanks, Sergey
>


-- 
  
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
Talend Application Integration Division http://www.talend.com


Re: Status of the jms transport rewrite, planned additional changes

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Christian

I'd like to propose to get the additional changes after 3.0.0-milestone2 
is out,

Thanks, Sergey


On 13/02/14 10:08, Christian Schneider wrote:
> Hi all,
>
> I have finished one part of my rewrite of the jms transport:
>
> - The spring dependencies are now gone. So the jms transport now only
> depends on the jms and jta specs as external libs.
> - I have replaced the DefaultMessageListenerContainer with a simpler
> implementation. It uses one connection, one consumer and an
> ExecutorService. I am currently asking on the activemq list what I need
> to add to this for performance.
> - As we are not using spring I removed the spring transaction support
> - Currently there is no JTA transaction support but I plan to add it
> again. As I am not experienced in JTA and XA transactions I might need
> some help here. Any specialists?
> - I removed the JMSEndpointType that is generated from XSD and replaced
> it by a simple Java bean in JMSEndpoint. I hope the xml serialization is
> not needed anywhere. If it is please speak up.
>
>
> Now to my planned changes:
>
> There are currently three ways to configure jms:
>
> - Old style cxf proprietary config using conduit and wsdl extensors that
> were cxf specific
> - JmsConfiguration which is also proprietary but allows some more
> injection friendly config
> - SOAP/JMS spec support which combines some standardized wsdl extensors
> and uri based config
>
> So I plan to:
> 1. Remove the old style config support as the soap/jms support should be
> a good replacement for it
> 2. Extend the uri based config with some context based resolver.
>
> Some more details about the context based resolver:
>
> The current uri based config looks like this:
> jms:jndi:dynamicQueues/test.jmstransport.text?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactory&replyToName=dynamicQueues/test.jmstransport.response&jndiURL=tcp://localhost:61616&jndiConnectionFactoryName=ConnectionFactory
>
>
> This is very verbose, requires jndi and does not fit well into a spring
> or blueprint config.
>
> So I propose to lookup the connection factory and optionally a
> JmsConfiguration in the blueprint or spring context using the existing
> ConfiguredBeanLocator. A config with this style could look like this:
>
> jms:queue:myqueue?ConnectionFactoryName=connectionFactory&Configuration=jmsConfig
>
>
> So this would lookup the connection factory in the context using its
> bean id "connectionFactory". The jmsConfig would be also looked up by
> bean id.
> The queue "myqueue" would be resolved by dynamic creation using the jms
> session like it is already done.
>
> We could even shorten this to:
> jms:queue:myqueue
>
> In this case we could look up the connection factory using a default
> name "connectionFactory" and the jmsConfiguration with default name
> "jmsConfig".
>
> This would use a topic for the service
> jms:topic:mytopic?replyToName=myreplyqueuename
>
> As far as I can say my proposed changes should be compatible with the
> spec even if they are not portable. I would be very happy to get some
> feedback about this and perhaps alternative designs.
>
> For people that do not use blueprint or spring we should supply a
> ConfiguredBeanLocator that can be used as a kind of registry. So you can
> just put java objects into it.
>
> Christian
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com