On Wed, Mar 4, 2009 at 10:16 AM, Simon Laws <[email protected]>wrote:
> > > On Tue, Mar 3, 2009 at 2:34 PM, Dave Sowerby <[email protected]>wrote: > >> Ok, I've played around with this some more. >> >> It looks like there's two issues here.... >> >> The first is that the error messages I'm seeing from binding.ws are >> misleading "- No JMS connection factories are defined.Will not listen >> for any JMS messages" is not an indication that the SOAP/JMS service >> is not bound and listening, the service is in fact working. >> >> Also, with this second entry, I definitely don't see the jms binding >> within the generated WSDL, despite the service itself functioning - >> I've raised TUSCANY-2900 to reflect this. >> >> Cheers, >> >> Dave. >> - Show quoted text - >> >> On Tue, Mar 3, 2009 at 7:16 AM, Dave Sowerby <[email protected]> >> wrote: >> > Hey Simon, >> > >> > Thanks for the reply. >> > >> > I've updated my composite to read: >> > >> > <service name="HelloWorldService"> >> > <interface.java interface="helloworld.HelloWorldService" /> >> > <binding.ws name="SOAPJMSBinding" uri="jms:/..." /> >> > <binding.ws name="SOAPHTTPBinding" /> >> > </service> >> > >> > Upon startup the node initialisation outputs the following: >> > >> > 03-Mar-2009 07:03:00 >> > org.apache.tuscany.sca.binding.ws.axis2.Axis2ServiceProvider start >> > INFO: Axis2 JMS >> > >> URL=jms:/jms/HelloWorldRequestQueue?transport.jms.ConnectionFactoryJNDIName=HelloWorldConnectionFactory&java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory&java.naming.provider.url=t3://localhost:10402 >> > - Mapping JNDI name : jms/HelloWorldRequestQueue and JMS Destination >> > name : hwResMod!HelloWorldRequestQueue against service : >> > jms/HelloWorldRequestQueue >> > - JMS Transport Receiver (Listener) initialized... >> > - Connection factory : TuscanyQueueConnectionFactory initialized... >> > - No JMS connection factories are defined.Will not listen for any JMS >> messages >> > 03-Mar-2009 07:03:00 >> > org.apache.tuscany.sca.host.webapp.WebAppServletHost addServletMapping >> > INFO: Added Servlet mapping: /helloworld/HelloWorldServiceComponent >> > - No JMS connection factories are defined.Will not listen for any JMS >> messages >> > >> > From the output it appears that it's getting confused about the >> > ConnectionFactory still. The ?wsdl service is still available, but >> > with only one wsdl:binding present in the generated wsdl. >> > >> > If I remove the <binding.ws name="SOAPHTTPBinding" /> entry, the >> > SOAP/JMS service starts absolute fine, without any of the complaints >> > about the Connection Factory. >> > >> > Any ideas? >> > >> > Cheers, >> > >> > Dave. >> > >> > >> > On Mon, Mar 2, 2009 at 6:26 PM, Simon Laws <[email protected]> >> wrote: >> >> >> >> >> >> On Mon, Mar 2, 2009 at 5:41 PM, Dave Sowerby <[email protected]> >> wrote: >> >>> >> >>> Hi all, >> >>> >> >>> I have a functional service which is already accessible with >> >>> binding.ws, I'd like to make the same service available with SOAP/JMS >> >>> too. >> >>> >> >>> I've tried this (as an example) with helloworld-ws-reference-jms by >> >>> changing the service tag as follows: >> >>> >> >>> <service name="HelloWorldService"> >> >>> <interface.java interface="helloworld.HelloWorldService" /> >> >>> <binding.ws uri="jms:/..." /> >> >>> <binding.ws /> >> >>> </service> >> >>> >> >>> When I attempt to start this, I get the following error: >> >>> >> >>> WARNING: Multiple bindings with the same name for a service: Service = >> >>> HelloWorldService Binding name = HelloWorldService >> >>> >> >>> Then I get the JMS bound service attempting to start but issues then >> >>> occur whilst it attempts to locate the Connection Factory. In the end >> >>> the only service which is available is the SOAP/HTTP service, so that >> >>> I can see the service running and the wsdl in the usual ?wsdl URI. >> >>> >> >>> This behaviour leads me to believe that multiple bindings of the same >> >>> type cannot be used - is this so? Ideally I'd like to have the two >> >>> bindings from the same service - I'd hope to see both bindings in the >> >>> generated wsdl. >> >>> >> >>> Does anyone have any thoughts on whether this should work? >> >>> >> >>> Cheers, >> >>> >> >>> Dave. >> >> >> >> HI Dave >> >> >> >> This should work but the spec defined rules for how the bindings are >> named >> >> and hence distinguished. This kicks in when multiple bindings share the >> same >> >> scheme which doesn't appear the case here. So we'll have to have a look >> at >> >> how the binding name is being calculated as it would appear that they >> are >> >> both adopting the default which is the service name. Can you try giving >> the >> >> bindings an explicit name="" attribute with different names and see >> what >> >> happens. >> >> >> >> Regards >> >> >> >> Simon >> >> >> > >> > > Hi Dave > > Thanks for doing some more prodding. > > On the first issue, we have a JMS transport defined by default in our Axis > config regardless of whether JMS is in use so it's complaining that no > connection factories are specified for the transport in the case where > binding.ws is used with no JMS configuration. I've made a small change > locally that moves this configuration to the code so the message doesn't > appear. Testing now. > > Re. the WSDL problem. I've been thinking about this a bit and need to > discuss with the others here. I see the same effect as you do in that a > component defined as follows: > > <component name="HelloWorldServiceComponent"> > <implementation.java class="helloworld.HelloWorldImpl" /> > <service name="HelloWorldService"> > <interface.wsdl interface=" > http://helloworld#wsdl.interface(HelloWorld)<http://helloworld#wsdl.interface%28HelloWorld%29>" > /> > <binding.ws wsdlElement=" > http://helloworld#wsdl.binding(HelloWorldSoapJmsBinding)<http://helloworld#wsdl.binding%28HelloWorldSoapJmsBinding%29> > " > > uri="jms:/queue.sample?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61619"/> > <binding.ws/> > </service> > </component> > > Where the WSDL in the cntribution has both WS and JMS bindings. When I ping > > http://l3aw203:8080/HelloWorldServiceComponent?wsdl > > What I see is > > <?xml version="1.0" encoding="UTF-8"?> > <wsdl:definitions name="HelloWorldServiceComponent.HelloWorldService" > targetNamespace="http://helloworld/HelloWorldServiceComponent/HelloWorldService" > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > xmlns:tns="http://helloworld/HelloWorldServiceComponent/HelloWorldService" > xmlns:ns0="http://helloworld" > xmlns:SOAP11="http://schemas.xmlsoap.org/wsdl/soap/"> > > <wsdl:import namespace="http://helloworld" > location="/HelloWorldServiceComponent?wsdl=wsdl/helloworld.wsdl"> > > </wsdl:import> > <wsdl:binding name="HelloWorldBinding" type="ns0:HelloWorld"> > > <SOAP11:binding style="document" > transport="http://schemas.xmlsoap.org/soap/http"/> > > <wsdl:operation name="getGreetings"> > <SOAP11:operation soapAction="urn:getGreetings"/> > > <wsdl:input name="getGreetingsRequest"> > <SOAP11:body use="literal"/> > > </wsdl:input> > <wsdl:output name="getGreetingsResponse"> > > <SOAP11:body use="literal"/> > </wsdl:output> > > </wsdl:operation> > </wsdl:binding> > <wsdl:service name="HelloWorldService"> > > <wsdl:port name="HelloWorldPort" binding="tns:HelloWorldBinding"> > > <SOAP11:address > location="http://192.168.247.1:8080/HelloWorldServiceComponent"/> > > </wsdl:port> > </wsdl:service> > </wsdl:definitions> > > > Now this is interesting as the address I'm pointing my browser at, i.e. > http://l3aw203:8080/HelloWorldServiceComponent, is the endpoint exposed by > binding.ws (rather than binding.ws uri="jms:/...") so maybe I would expect > just to see the WSDL ws binding information. > > Asking the question in a slightly different way. If I have just < > binding.ws uri="jms:/..."/> where would I have to point my browser at to > get the WSDL. Maybe you would expect some proper meta-data exchange protocol > for the component service as a whole but we don't have that at the moment. > I'll have a chat with the spec people. > > Regards > > Simon > So looking at the SCA web service binding spec [1] it - says all ws bindings for a service will be included in generated WSDL - assumes that the transport is soap/http - does though say that.. "265 Additional ports and bindings may be generated in this WSDL document for non-web service 266 bindings, or web service bindings with non-SOAP requirements. The manner in which that is 267 done is undefined." So I guess we have to do something Tuscany specific here and generate a JMS binding entry as appropriate. Regards Simon
