cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Kulp <dk...@apache.org>
Subject Re: Either my new JMS sample is confused or I am ...
Date Sun, 19 Sep 2010 17:41:19 GMT
On Sunday 19 September 2010 1:33:41 pm Benson Margulies wrote:
> Next question: does this work java-first via the JAX-WS API?

In theory, yes.  :-)  Just use the full jms: url defined in the spec.  I think 
some of the transport system tests do this, but not 100% sure.


Dan


> 
> On Wed, Sep 15, 2010 at 10:34 PM, Daniel Kulp <dkulp@apache.org> wrote:
> > On Wednesday 15 September 2010 2:33:47 pm Benson Margulies wrote:
> >> This is from the java_first_jms sample that I cleaned up. Why is the URL
> >> in the server factory trivial? Why doesn't it need to state the host
> >> and the port? Is 61616 some sort of a default?
> > 
> > This is part of what Willem and I were debating about earlier today.
> > 
> > A bit of history of the JMS transport:
> > 
> > In the OLD OLD JMS transport (2.0.x and early 2.1.x), the ONLY way to
> > configure JMS stuff was via custom JMS extensions in the WSDL which
> > interated with JNDI.   Thus, it only worked for wsdl first use cases.
> >  The jms_pubsub and jms_queue demos are configured this way.
> > 
> > At some point in there, we added SOME ability to configure things via
> > spring config.  It's the same wsdl extensors, but configurable in spring
> > config. That allowed some Java-first cases to work as the custom config
> > could be specified in a spring cxf.xml config file.   That is how your
> > 'new' sample is configured.   See src/main/resources/cxf.xml.  That's
> > where the 61616 is configured into the cxf stuff.
> > 
> > During 2.1.x timeframe, Christian re-wrote the JMS transport to allow use
> > of the "normal" Spring JMS/Template stuff.  We don't have a sample for
> > that, but the docs are at:
> > http://cxf.apache.org/docs/using-the-jmsconfigfeature.html
> > This made it much more intuitive for a Spring user to configure the JMS
> > stuff and wire in the Spring JMS things (for things like the Spring
> > transactions and stuff).
> > 
> > In ALL of the above cases, the configuration for the broker URL and queue
> > names and such are all part of the configuration elements.   The "jms://"
> > URL was pretty much irrelevant.  It's ONLY purpose was to trigger the
> > use of the JMS transport if you don't manually configure in a transport
> > ID onto the service factory.
> > 
> > With 2.3, we've implemented the SOAP over JMS specification.  Part of
> > that specification actually provides for a URL format for the jms://
> > URL.   With that spec, we can now completely do JMS without any of the
> > above configuration and wsdl extensors and such.  It also allows pure
> > Java first use case of SOAP over JMS without any config.  The
> > jms-spec-demo shows use of the spec stuff, but it's still a wsdl first
> > thing.  See the docs at:
> > http://cxf.apache.org/docs/soap-over-jms-10-support.html
> > 
> > It would be GOOD to update the java_first_jms sample to use the new
> > soap/jms spec URL instead of the config.   Not required, but for 2.3, it
> > would probably be the way we should promote the java-first case for JMS.
> > 
> > Does that answer your question?
> > 
> > Dan
> > 
> >> Also, how would this look using the JAX-WS Endpoint class?
> >> 
> >> 
> >>  boolean amqBroker = args.length > 0 &&
> >> "-activemqbroker".equals(args[0]); if (amqBroker) {
> >>             /*
> >>              * The following make it easier to run this against
> >> something other than ActiveMQ. You will have
> >>              * to get a JMS broker onto the right port of localhost.
> >>              */
> >>             Class<?> brokerClass = ServerJMS.class.getClassLoader()
> >>                 .loadClass("org.apache.activemq.broker.BrokerService");
> >>             if (brokerClass == null) {
> >>                 System.err.println("ActiveMQ is not in the classpath,
> >> cannot launch broker.");
> >>                 return;
> >>             }
> >>             Object broker = brokerClass.newInstance();
> >>             Method addConnectorMethod =
> >> brokerClass.getMethod("addConnector", String.class);
> >>             addConnectorMethod.invoke(broker, "tcp://localhost:61616");
> >>             Method startMethod = brokerClass.getMethod("start");
> >>             startMethod.invoke(broker);
> >>         }
> >> 
> >>         Object implementor = new HelloWorldImpl();
> >>         JaxWsServerFactoryBean svrFactory = new
> >> JaxWsServerFactoryBean(); svrFactory.setServiceClass(HelloWorld.class);
> >>         svrFactory.setAddress("jms://");
> >>         svrFactory.setServiceBean(implementor);
> >>         svrFactory.create();
> >> 
> >>         System.out.println("Server ready... Press any key to exit");
> >>         System.in.read();
> >>         System.out.println("Server exiting");
> >>         System.exit(0);
> > 
> > --
> > Daniel Kulp
> > dkulp@apache.org
> > http://dankulp.com/blog

-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog

Mime
View raw message