antelder 2002/06/07 01:42:29 Modified: java/test/async AsyncResponseHandler.java AsyncAddressBookTest.java AsyncTest.java java/src/org/apache/wsif/util/jms WSIFJMSDestination.java java/test/util wsiftestmqsetup.bat Added: java/test/async Stockquote.wsdl AddressBook.wsdl java/src/org/apache/wsif/util/jms JMSAsyncListener.java Removed: java/test/async QuoteHandler.java java/src/org/apache/wsif/util/jms WSIFJMSAsyncListener.java Log: Async operation changes Revision Changes Path 1.2 +4 -4 xml-axis-wsif/java/test/async/AsyncResponseHandler.java Index: AsyncResponseHandler.java =================================================================== RCS file: /home/cvs/xml-axis-wsif/java/test/async/AsyncResponseHandler.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AsyncResponseHandler.java 6 Jun 2002 08:28:54 -0000 1.1 +++ AsyncResponseHandler.java 7 Jun 2002 08:42:28 -0000 1.2 @@ -68,11 +68,11 @@ */ public class AsyncResponseHandler implements WSIFResponseHandler { - // These are static because as the QuoteHandler is serialized/unserialized - // by the correlation service the testcase looses its reference to the - // handler which processes the repoonse. Being static lets the testcase + // These are static because as the AsyncResponseHandler is serialized/unserialized + // by the correlation service the testcase loses its reference to the + // handler which processes the reponse. Being static lets the testcase // see when the response has been processed. - // Obviously only a single QuoteHandler should be used at a time! + // Obviously only a single AsyncResponseHandler should be used at a time! static private boolean done; static private int nrReplies; 1.2 +20 -27 xml-axis-wsif/java/test/async/AsyncAddressBookTest.java Index: AsyncAddressBookTest.java =================================================================== RCS file: /home/cvs/xml-axis-wsif/java/test/async/AsyncAddressBookTest.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AsyncAddressBookTest.java 6 Jun 2002 08:28:54 -0000 1.1 +++ AsyncAddressBookTest.java 7 Jun 2002 08:42:28 -0000 1.2 @@ -68,6 +68,9 @@ import org.apache.wsif.WSIFService; import org.apache.wsif.WSIFServiceFactory; import org.apache.wsif.WSIFServiceImpl; +import org.apache.wsif.util.jms.JMSAsyncListener; +import org.apache.wsif.util.WSIFDefaultCorrelationService; +import org.apache.wsif.util.WSIFCorrelationServiceLocator; import org.apache.wsif.providers.soap.apacheaxis.WSIFDynamicProvider_ApacheAxis; import addressbook.wsifservice.AddressBook; import addressbook.wsiftypes.Address; @@ -81,7 +84,7 @@ */ public class AsyncAddressBookTest extends TestCase { String wsdlLocation = - TestUtilities.getWsdlPath("java\\samples\\addressbook\\wsifservice") + TestUtilities.getWsdlPath("java\\test\\async") + "AddressBook.wsdl"; static String name1 = "Purdue Boilermaker"; @@ -141,33 +144,38 @@ new WSIFDynamicProvider_ApacheAxis()); } + JMSAsyncListener listener = null; + try { WSIFServiceFactory factory = WSIFServiceFactory.newInstance(); WSIFService service = factory.getService(wsdlLocation, null, // serviceNS - null, // serviceName - "http://wsifservice.addressbook/", // portTypeNS - "AddressBook"); // portTypeName + null, // serviceName + "http://wsifservice.addressbook/", // portTypeNS + "AddressBook"); // portTypeName // add some addresses AddressBook abStub = (AddressBook) service.getStub(portName, AddressBook.class); abStub.addEntry(name1, addr1); abStub.addEntry(firstName2, lastName2, addr2); - Address resp1 = abStub.getAddressFromName(name1); - assertTrue(new AddressUtility(addr1).equals(resp1)); + //Address resp1 = abStub.getAddressFromName(name1); + //assertTrue(new AddressUtility(addr1).equals(resp1)); // try an async call String inputName = "GetAddressFromNameRequest"; String outputName = "GetAddressFromNameResponse"; + + listener = new JMSAsyncListener( "AsyncReplyTo" ); AsyncResponseHandler abHandler = new AsyncResponseHandler(1); // 1 async calls + WSIFPort port = (portName == null) ? service.getPort() : service.getPort(portName); WSIFOperation op = port.createOperation("getAddressFromName", inputName, outputName); WSIFMessage inMsg = op.createInputMessage(); inMsg.setObjectPart("name", name1); + inMsg.setObjectPart( "partJmsReplyTo", "AsyncReplyTo" ); WSIFMessage outmsg = op.createOutputMessage(); WSIFMessage faultMsg = op.createFaultMessage(); - //input1.setObjectPart( "symbol", "IBM" ); try { WSIFCorrelationId id = op.executeRequestResponseAsync(inMsg, abHandler); @@ -179,13 +187,13 @@ System.out.println("async requests sent, waiting for responses..."); int i = 900; while (i-- > 0 && !abHandler.isDone()) { - //System.out.println( "async requests sent, waiting for responses - " + i ); + System.out.println( "waiting for async responses - " + i ); try { Thread.sleep(3000); } catch (InterruptedException ex) { } } - assertTrue(i > 0); // no responses in time + assertTrue("no response from async operation!",i > 0); // no responses in time System.out.println("async ops completed, testing responses..."); @@ -194,31 +202,16 @@ Address respAddr = (Address) outputs[0].getObjectPart("address"); - assertTrue("address response", addr1.equals(respAddr)); - - //float q1 = ((Float)outputs[0].getObjectPart( "quote" )).floatValue(); - //float q2 = ((Float)outputs[1].getObjectPart( "quote" )).floatValue(); - - //System.out.println( "Quote1 = " + q1 + " quote2 = " + q2 ); - - /* - AddressBook abStub=(AddressBook)service.getStub(portName, AddressBook.class); + assertTrue("incorrect address response!", addr1.equals(respAddr)); - abStub.addEntry(name1, addr1); - abStub.addEntry(firstName2, lastName2, addr2); - - Address resp1 = abStub.getAddressFromName (name1); - assertTrue(new AddressUtility(addr1).equals(resp1)); - - Address resp2 = abStub.getAddressFromName (firstName2+" "+lastName2); - assertTrue(new AddressUtility(addr2).equals(resp2)); - */ } catch (Exception e) { System.err.println("AddressBookTest(" + portName + ") caught exception " + e); e.printStackTrace(); assertTrue(false); } finally { + listener.stop(); + ((WSIFDefaultCorrelationService)WSIFCorrelationServiceLocator.getCorrelationService()).shutdown(); if (protocol.equals("axis")) { WSIFServiceImpl.setDynamicWSIFProvider( "http://schemas.xmlsoap.org/wsdl/soap/", 1.2 +31 -17 xml-axis-wsif/java/test/async/AsyncTest.java Index: AsyncTest.java =================================================================== RCS file: /home/cvs/xml-axis-wsif/java/test/async/AsyncTest.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AsyncTest.java 6 Jun 2002 08:28:54 -0000 1.1 +++ AsyncTest.java 7 Jun 2002 08:42:28 -0000 1.2 @@ -71,9 +71,12 @@ import org.apache.wsif.WSIFService; import org.apache.wsif.WSIFServiceFactory; import org.apache.wsif.WSIFServiceImpl; +import org.apache.wsif.util.WSIFDefaultCorrelationService; +import org.apache.wsif.util.WSIFCorrelationServiceLocator; import org.apache.wsif.providers.soap.apacheaxis.WSIFDynamicProvider_ApacheAxis; import org.apache.wsif.stub.WSIFUtils; import util.TestUtilities; +import org.apache.wsif.util.jms.JMSAsyncListener; /** * Junit test to test out the Asynchronous requests. @@ -81,7 +84,7 @@ */ public class AsyncTest extends TestCase { String wsdlLocation = - TestUtilities.getWsdlPath("java\\samples\\stockquote\\wsifservice") + "Stockquote.wsdl"; + TestUtilities.getWsdlPath("java\\test\\async") + "Stockquote.wsdl"; public AsyncTest(String name) { super(name); @@ -105,7 +108,7 @@ //public void testAxis () { doit("SOAPPort" ,"axis"); } //public void testSoap () { doit("SOAPPort" ,"soap"); } //public void testJava () { doit("JavaPort" ,"java"); } - //public void testSoapJms () { if (TestUtilities.areWeTesting("jms")) doit("SOAPJMSPort","soap"); } + public void testSoapJms () { if (TestUtilities.areWeTesting("jms")) doit("SOAPJMSPort","soap"); } public void testAxisJms() { if (TestUtilities.areWeTesting("jms")) doit("SOAPJMSPort", "axis"); @@ -128,8 +131,6 @@ e.printStackTrace(); assertTrue(false); } finally { - //((WSIFDefaultCorrelationService)WSIFCorrelationServiceLocator. - //getCorrelationService()).shutdown(); } } @@ -166,7 +167,8 @@ WSIFService dpf = factory.getService(def, service, portType); WSIFPort port = (portName == null) ? dpf.getPort() : dpf.getPort(portName); - QuoteHandler quoteHandler = new QuoteHandler(2); // 2 async calls + JMSAsyncListener listener = new JMSAsyncListener( "AsyncReplyTo" ); + AsyncResponseHandler quoteHandler = new AsyncResponseHandler(2); // 2 async calls // First do an async call to get a real quote from the remote service, ie slow System.out.println( @@ -178,10 +180,14 @@ WSIFMessage fault1 = operation1.createFaultMessage(); //input1.setObjectPart( "symbol", "IBM" ); input1.setObjectPart("symbol", ""); + + input1.setObjectPart( "partJmsReplyTo", "AsyncReplyTo" ); + WSIFCorrelationId id1 = operation1.executeRequestResponseAsync(input1, quoteHandler); - System.out.println("IBM operation id1=" + id1.getCorrelationId()); - + String id = (id1==null)? "null" : id1.getCorrelationId(); + System.out.println("IBM operation id1=" + id ); +/* // Now do a sync call to get a null -1 quote, ie fast System.out.println( "Executing synchronous operation for null: " + operationName); @@ -190,6 +196,7 @@ WSIFMessage input3 = operation3.createInputMessage(); WSIFMessage output3 = operation3.createOutputMessage(); WSIFMessage fault3 = operation3.createFaultMessage(); + input3.setObjectPart( "partJmsReplyTo", "" ); input3.setObjectPart("symbol", ""); boolean ok = operation3.executeRequestResponseOperation(input3, output3, fault3); @@ -198,7 +205,7 @@ if (!ok || q3 != -1.0F) { assertTrue(false); } - +*/ // Now do an async call to get a null -1 quote, ie fast System.out.println( "Executing asynchronous operation 2 for null: " + operationName); @@ -208,6 +215,9 @@ WSIFMessage output2 = operation2.createOutputMessage(); WSIFMessage fault2 = operation2.createFaultMessage(); input2.setObjectPart("symbol", ""); + + input2.setObjectPart( "partJmsReplyTo", "AsyncReplyTo" ); + WSIFCorrelationId id2 = operation2.executeRequestResponseAsync(input2, quoteHandler); System.out.println("null operation id2=" + id2.getCorrelationId()); @@ -233,15 +243,19 @@ System.out.println("Quote1 = " + q1 + " quote2 = " + q2); - /* - if ( q1 == -1.0F && ( q2 > 50 && q2 < 100 ) ) { - assertTrue(true); - } else if ( q2 == -1.0F && ( q1 > 50 && q1 < 100 ) ) { - assertTrue(true); - } else { - assertTrue(false); - } - */ + //if ( q1 == -1.0F && ( q2 > 50 && q2 < 100 ) ) { + if ( q1 == -1.0F && ( q2 == -1.0F ) ) { + assertTrue(true); + //} else if ( q2 == -1.0F && ( q1 > 50 && q1 < 100 ) ) { + } else if ( q2 == -1.0F && ( q1 == -1.0F ) ) { + assertTrue(true); + } else { + assertTrue(false); + } + + listener.stop(); + ((WSIFDefaultCorrelationService)WSIFCorrelationServiceLocator.getCorrelationService()).shutdown(); + if ("axis".equals(protocol)) { WSIFServiceImpl.setDynamicWSIFProvider( "http://schemas.xmlsoap.org/wsdl/soap/", 1.1 xml-axis-wsif/java/test/async/Stockquote.wsdl Index: Stockquote.wsdl =================================================================== <?xml version="1.0" ?> <definitions targetNamespace="http://wsifservice.stockquote/" xmlns:tns="http://wsifservice.stockquote/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:jms="http://schemas.xmlsoap.org/wsdl/jms" xmlns:format="http://schemas.xmlsoap.org/wsdl/formatbinding/" xmlns:java="http://schemas.xmlsoap.org/wsdl/java/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <message name="GetQuoteInput"> <part name="symbol" type="xsd:string"/> <part name="partJmsReplyTo" type="xsd:string"/> </message> <message name="GetQuoteOutput"> <part name="quote" type="xsd:float"/> </message> <portType name="StockquotePT"> <operation name="getQuote"> <input message="tns:GetQuoteInput"/> <output message="tns:GetQuoteOutput"/> </operation> </portType> <binding name="JavaBinding" type="tns:StockquotePT"> <java:binding/> <format:typeMapping encoding="Java" style="Java"> <format:typeMap typeName="xsd:string" formatType="java.lang.String" /> </format:typeMapping> <operation name="getQuote"> <java:operation methodName="getQuote" parameterOrder="symbol" methodType="instance" /> <input/> <output/> </operation> </binding> <binding name="SOAPHttpBinding" type="tns:StockquotePT"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="getQuote"> <soap:operation soapAction="http://example.com/GetTradePrice"/> <input> <soap:body use="encoded" namespace="urn:xmltoday-delayed-quotes" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:xmltoday-delayed-quotes" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <binding name="SOAPJmsBinding" type="tns:StockquotePT"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/jms"/> <operation name="getQuote"> <soap:operation soapAction="http://example.com/GetTradePrice"/> <input> <jms:property name="JMSReplyTo" part="partJmsReplyTo"/> <soap:body use="encoded" namespace="urn:xmltoday-delayed-quotes" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:xmltoday-delayed-quotes" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <binding name="NativeJmsBinding" type="tns:StockquotePT"> <jms:binding type="ObjectMessage"/> <format:typeMapping encoding="Java"> <format:typeMap formatType="java.lang.String" typeName="xsd:string"/> </format:typeMapping> <operation name="getQuote"> <input> <jms:property name="JMSReplyTo" part="partJmsReplyTo"/> <jms:property name="JMSPriority" part="partJmsPriority"/> <jms:body parts="symbol" use="encoded"/> </input> <output> <!-- <jms:property name="JMSExpiration" part="expiration"/> --> <jms:body parts="quote" use="encoded"/> </output> </operation> </binding> <service name="StockquoteService"> <documentation>Stock quote service</documentation> <port name="SOAPPort" binding="tns:SOAPHttpBinding"> <soap:address location="http://localhost:8080/soap/servlet/rpcrouter"/> </port> <port name="JavaPort" binding="tns:JavaBinding"> <java:address className="stockquote.wsiftypes.StockQuote"/> </port> <port name="SOAPJMSPort" binding="tns:SOAPJmsBinding"> <jms:address jndiDestinationName="SoapJmsStockquoteQueue" destinationStyle="queue" jndiConnectionFactoryName="WSIFSampleQCF" initialContextFactory="com.sun.jndi.fscontext.RefFSContextFactory" jndiProviderURL="file://C:/JNDI-Directory"/> </port> <port name="NativeJmsPort" binding="tns:NativeJmsBinding"> <jms:address jndiDestinationName="JmsStockQuoteQueue" destinationStyle="queue" jndiConnectionFactoryName="WSIFSampleQCF" initialContextFactory="com.sun.jndi.fscontext.RefFSContextFactory" jndiProviderURL="file://C:/JNDI-Directory"/> </port> </service> </definitions> 1.1 xml-axis-wsif/java/test/async/AddressBook.wsdl Index: AddressBook.wsdl =================================================================== <?xml version="1.0" ?> <definitions targetNamespace="http://wsifservice.addressbook/" xmlns:tns="http://wsifservice.addressbook/" xmlns:typens="http://wsiftypes.addressbook/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:format="http://schemas.xmlsoap.org/wsdl/formatbinding/" xmlns:java="http://schemas.xmlsoap.org/wsdl/java/" xmlns:jms="http://schemas.xmlsoap.org/wsdl/jms/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <!-- type defs --> <types> <xsd:schema targetNamespace="http://wsiftypes.addressbook/" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <xsd:complexType name="phone"> <xsd:element name="areaCode" type="xsd:int"/> <xsd:element name="exchange" type="xsd:string"/> <xsd:element name="number" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="address"> <xsd:element name="streetNum" type="xsd:int"/> <xsd:element name="streetName" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string"/> <xsd:element name="zip" type="xsd:int"/> <xsd:element name="phoneNumber" type="typens:phone"/> </xsd:complexType> </xsd:schema> </types> <!-- message declns --> <message name="AddEntryWholeNameRequestMessage"> <part name="name" type="xsd:string"/> <part name="address" type="typens:address"/> </message> <message name="AddEntryFirstAndLastNamesRequestMessage"> <part name="firstName" type="xsd:string"/> <part name="lastName" type="xsd:string"/> <part name="address" type="typens:address"/> </message> <message name="GetAddressFromNameRequestMessage"> <part name="name" type="xsd:string"/> <part name="partJmsReplyTo" type="xsd:string"/> </message> <message name="GetAddressFromNameResponseMessage"> <part name="address" type="typens:address"/> </message> <!-- port type declns --> <portType name="AddressBook"> <operation name="addEntry"> <input name="AddEntryWholeNameRequest" message="tns:AddEntryWholeNameRequestMessage"/> </operation> <operation name="addEntry"> <input name="AddEntryFirstAndLastNamesRequest" message="tns:AddEntryFirstAndLastNamesRequestMessage"/> </operation> <operation name="getAddressFromName"> <input name="GetAddressFromNameRequest" message="tns:GetAddressFromNameRequestMessage"/> <output name="GetAddressFromNameResponse" message="tns:GetAddressFromNameResponseMessage"/> </operation> </portType> <!-- binding declns --> <binding name="SOAPHttpBinding" type="tns:AddressBook"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="addEntry"> <soap:operation soapAction=""/> <input name="AddEntryWholeNameRequest"> <soap:body use="encoded" namespace="http://wsifservice.addressbook/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> </operation> <operation name="addEntry"> <soap:operation soapAction=""/> <input name="AddEntryFirstAndLastNamesRequest"> <soap:body use="encoded" namespace="http://wsifservice.addressbook/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> </operation> <operation name="getAddressFromName"> <soap:operation soapAction=""/> <input name="GetAddressFromNameRequest"> <soap:body use="encoded" namespace="http://wsifservice.addressbook/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output name="GetAddressFromNameResponse"> <soap:body use="encoded" namespace="http://wsifservice.addressbook/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <binding name="SOAPJmsBinding" type="tns:AddressBook"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/jms"/> <operation name="addEntry"> <soap:operation soapAction=""/> <input name="AddEntryWholeNameRequest"> <soap:body use="encoded" namespace="http://wsifservice.addressbook/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> </operation> <operation name="addEntry"> <soap:operation soapAction=""/> <input name="AddEntryFirstAndLastNamesRequest"> <soap:body use="encoded" namespace="http://wsifservice.addressbook/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> </operation> <operation name="getAddressFromName"> <soap:operation soapAction=""/> <input name="GetAddressFromNameRequest"> <jms:property name="JMSReplyTo" part="partJmsReplyTo"/> <soap:body use="encoded" namespace="http://wsifservice.addressbook/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output name="GetAddressFromNameResponse"> <soap:body use="encoded" namespace="http://wsifservice.addressbook/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <binding name="JavaBinding" type="tns:AddressBook"> <java:binding/> <format:typeMapping encoding="Java" style="Java"> <format:typeMap typeName="typens:address" formatType="addressbook.wsiftypes.Address" /> <format:typeMap typeName="xsd:string" formatType="java.lang.String" /> </format:typeMapping> <operation name="addEntry"> <java:operation methodName="addEntry" parameterOrder="name address" methodType="instance" /> <input name="AddEntryWholeNameRequest"/> </operation> <operation name="addEntry"> <java:operation methodName="addEntry" parameterOrder="firstName lastName address" methodType="instance" /> <input name="AddEntryFirstAndLastNamesRequest"/> </operation> <operation name="getAddressFromName"> <java:operation methodName="getAddressFromName" parameterOrder="name" methodType="instance" returnPart="address" /> <input name="GetAddressFromNameRequest"/> <output name="GetAddressFromNameResponse"/> </operation> </binding> <binding name="NativeJmsBinding" type="tns:AddressBook"> <jms:binding type="TextMessage"/> <!-- executeInputOnlyOperation(WSIFMessage) --> <operation name="addEntry"> <input name="AddEntryWholeNameRequest"/> </operation> </binding> <binding name="NativeJmsBinding2" type="tns:AddressBook"> <jms:binding type="ObjectMessage"/> <operation name="getAddressFromName"> <!-- executeRequestResponseAsync(WSIFMessage,WSIFResponseHandler) --> <input name="GetAddressFromNameRequest"/> <output name="GetAddressFromNameResponse"/> </operation> </binding> <!-- service decln --> <service name="AddressBookService"> <port name="SOAPPort" binding="tns:SOAPHttpBinding"> <soap:address location="http://localhost:8080/soap/servlet/rpcrouter"/> </port> <port name="JavaPort" binding="tns:JavaBinding"> <java:address className="addressbook.wsiftypes.AddressBook"/> </port> <port name="SOAPJMSPort" binding="tns:SOAPJmsBinding"> <jms:address jndiDestinationName="SoapJmsAddressBookQueue" destinationStyle="queue" jndiConnectionFactoryName="WSIFSampleQCF" initialContextFactory="com.sun.jndi.fscontext.RefFSContextFactory" jndiProviderURL="file://C:/JNDI-Directory"/> </port> <port name="NativeJmsPort" binding="tns:NativeJmsBinding"> <jms:address jndiDestinationName="NativeJmsAddressBookQueue" destinationStyle="queue" jndiConnectionFactoryName="WSIFSampleQCF" initialContextFactory="com.sun.jndi.fscontext.RefFSContextFactory" jndiProviderURL="file://C:/JNDI-Directory"/> </port> <port name="NativeJmsPort2" binding="tns:NativeJmsBinding2"> <jms:address jndiDestinationName="NativeJmsAddressBookQueue" destinationStyle="queue" jndiConnectionFactoryName="WSIFSampleQCF" initialContextFactory="com.sun.jndi.fscontext.RefFSContextFactory" jndiProviderURL="file://C:/JNDI-Directory"/> </port> </service> </definitions> 1.2 +4 -21 xml-axis-wsif/java/src/org/apache/wsif/util/jms/WSIFJMSDestination.java Index: WSIFJMSDestination.java =================================================================== RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/util/jms/WSIFJMSDestination.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- WSIFJMSDestination.java 6 Jun 2002 08:28:52 -0000 1.1 +++ WSIFJMSDestination.java 7 Jun 2002 08:42:29 -0000 1.2 @@ -91,7 +91,6 @@ protected QueueSender sender = null; protected boolean asyncMode = false; - protected WSIFJMSAsyncListener asyncListener = null; protected Queue syncTempQueue = null; protected WSIFJMSProperties inProps; @@ -296,8 +295,6 @@ sender.send(msg); msgId = msg.getJMSMessageID(); - if (asyncMode) - asyncListener.startListening(msgId); } catch (JMSException je) { throw WSIFJMSConstants.ToWsifException(je); } finally { // If properties were set, trash the sender so we get the default props next time. @@ -391,16 +388,11 @@ try { if (syncTempQueue == null) syncTempQueue = session.createTemporaryQueue(); - - if (asyncMode) - tmp = asyncListener.getReadTempQ(); - else - tmp = syncTempQueue; } catch (JMSException je) { throw WSIFJMSConstants.ToWsifException(je); } - readQ = tmp; // So we don't overwrite readQ if there was an error. + readQ = syncTempQueue; // So we don't overwrite readQ if there was an error. replyToName = null; Tr.exit(); } @@ -428,8 +420,6 @@ readQ = finder.findQueue(replyTo); replyToName = replyTo; - if (asyncMode) - asyncListener.setReadQ(readQ); Tr.exit(); } @@ -444,15 +434,9 @@ public void setAsyncMode(boolean b) throws WSIFException { Tr.entry(this, b); areWeClosed(); - if (asyncMode != b) - try { - asyncMode = b; - - if (asyncMode && asyncListener == null) - asyncListener = new WSIFJMSAsyncListener(finder.getFactory()); - } catch (JMSException je) { - throw WSIFJMSConstants.ToWsifException(je); - } + if (asyncMode != b) { + asyncMode = b; + } Tr.exit(); } @@ -573,7 +557,6 @@ buff += " writeQ: " + writeQ; buff += " sender: " + sender; buff += " asyncMode: " + asyncMode; - buff += " asyncListener: " + asyncListener; buff += " syncTempQueue: " + syncTempQueue; buff += " inProps: " + inProps; buff += " outProps: " + outProps; 1.1 xml-axis-wsif/java/src/org/apache/wsif/util/jms/JMSAsyncListener.java Index: JMSAsyncListener.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "WSIF" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 2001, 2002, International * Business Machines, Inc., http://www.apache.org. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package org.apache.wsif.util.jms; import java.util.ArrayList; import java.util.Arrays; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Queue; import javax.jms.QueueReceiver; import org.apache.wsif.WSIFException; import org.apache.wsif.logging.Tr; import org.apache.wsif.util.jms.*; import org.apache.wsif.util.*; import org.apache.wsif.*; import org.apache.wsif.util.jms.WSIFJMSCorrelationId; import java.io.Serializable; /** * A simple JMS listener which can be used to test async operations * @author ant elder <[EMAIL PROTECTED]> */ public class JMSAsyncListener extends JMS2HTTPBridgeDestination { static final String startType = JMS2HTTPBridgeDestination.COLDSTART; static final String initialContextFactory = "com.sun.jndi.fscontext.RefFSContextFactory"; static final String jndiUrl = "file://C:/JNDI-Directory"; static final String sampleName = null; static final String queueConnectionFactory = "WSIFSampleQCF"; static final String readQueue = null; static final String httpUrlString = "http://localhost:8080/soap/servlet/rpcrouter"; private Thread listener; private WSIFJMSListener list = new WSIFJMSListener() { public void onException(JMSException arg1) { Tr.entry(this, arg1); System.out.println("Caught an exception!"); arg1.printStackTrace(); Tr.exit(); } public void onMessage(Message message) { Tr.entry(this, message); processResponse(message); Tr.exit(); } }; public JMSAsyncListener(String msgQ) throws WSIFException { super( new WSIFJMSFinderForJndi( null, initialContextFactory, jndiUrl, WSIFJMSFinder.STYLE_QUEUE, queueConnectionFactory, msgQ), null, WSIFJMSConstants.WAIT_FOREVER, startType); listener = new Thread() { public void run() { try { listen( list ); } catch (WSIFException ex) { ex.printStackTrace(); } } }; listener.start(); } /** * Create a listener thread to listen for messages. This waits forever until it gets * an InterruptedException. * @param listener is the JMS message and exception callback interface implementation * @param queue to listen on */ public void listen(WSIFJMSListener listener, Queue queue) throws WSIFException { Tr.entry(this, listener, queue); areWeClosed(); try { QueueReceiver qr = session.createReceiver(queue); qr.setMessageListener(listener); connection.setExceptionListener(listener); connection.start(); for (int i = 1; !Thread.interrupted(); i++) { Thread.yield(); Thread.sleep(5000); System.out.println("JMSAsyncListener waiting... " + i); } } catch (JMSException je) { throw WSIFJMSConstants.ToWsifException(je); } catch (InterruptedException ignored) { System.out.println("JMSAsyncListener Exitting"); } Tr.exit(); } private void processResponse(Message msg) { Serializable so; try { System.out.println( "WSIFJmsAsyncListener.processResponse called" ); WSIFCorrelationService cs = WSIFCorrelationServiceLocator.getCorrelationService(); WSIFCorrelationId cid = new WSIFJMSCorrelationId( msg.getJMSCorrelationID() ); synchronized( cs ) { so = cs.get( cid ); } if ( so != null && so instanceof WSIFOperation ) { cs.remove( cid ); ((WSIFOperation) so).fireAsyncResponse( msg ); } } catch (Exception ex) { ex.printStackTrace(); } } public void stop() { listener.interrupt(); } } 1.2 +1 -0 xml-axis-wsif/java/test/util/wsiftestmqsetup.bat Index: wsiftestmqsetup.bat =================================================================== RCS file: /home/cvs/xml-axis-wsif/java/test/util/wsiftestmqsetup.bat,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- wsiftestmqsetup.bat 6 Jun 2002 08:29:00 -0000 1.1 +++ wsiftestmqsetup.bat 7 Jun 2002 08:42:29 -0000 1.2 @@ -9,6 +9,7 @@ echo + Creating script for object creation within MQ echo DEFINE QLOCAL('AddressBookReplyTo') REPLACE > wsiftestmqsetup.mqs +echo DEFINE QLOCAL('AsyncReplyTo') REPLACE > wsiftestmqsetup.mqs echo + Calling runmqsc in batch mode to create objects @REM w/o queue manger - use system default queuemanager