KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > wsif > util > jms > JMSAsyncListener


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 2002 The Apache Software Foundation. All rights
6  * reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Apache Software Foundation (http://www.apache.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "WSIF" and "Apache Software Foundation" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact apache@apache.org.
31  *
32  * 5. Products derived from this software may not be called "Apache",
33  * nor may "Apache" appear in their name, without prior written
34  * permission of the Apache Software Foundation.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the Apache Software Foundation and was
52  * originally based on software copyright (c) 2001, 2002, International
53  * Business Machines, Inc., http://www.apache.org. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  */

57
58 package org.apache.wsif.util.jms;
59
60 import java.io.Serializable JavaDoc;
61
62 import javax.jms.JMSException JavaDoc;
63 import javax.jms.Message JavaDoc;
64 import javax.jms.Queue JavaDoc;
65 import javax.jms.QueueReceiver JavaDoc;
66
67 import org.apache.wsif.WSIFCorrelationId;
68 import org.apache.wsif.WSIFCorrelationService;
69 import org.apache.wsif.WSIFException;
70 import org.apache.wsif.WSIFOperation;
71 import org.apache.wsif.logging.Trc;
72 import org.apache.wsif.util.WSIFCorrelationServiceLocator;
73 import util.TestUtilities;
74 /**
75  * A simple JMS listener which can be used to test async operations
76  * @author ant elder <antelder@apache.org>
77  */

78 public class JMSAsyncListener extends JMS2HTTPBridgeDestination {
79
80     static final String JavaDoc startType = JMS2HTTPBridgeDestination.COLDSTART;
81     static final boolean VERBOSE = TestUtilities.isJmsVerbose();
82
83     private Thread JavaDoc listenerThread;
84     
85     private WSIFJMSListener list = new WSIFJMSListener() {
86         public void onException(JMSException JavaDoc arg1) {
87             Trc.entry(this, arg1);
88             arg1.printStackTrace();
89             Trc.exit();
90         }
91
92         public void onMessage(Message JavaDoc message) {
93             Trc.entry(this, message);
94             processResponse(message);
95             Trc.exit();
96         }
97     };
98
99     public JMSAsyncListener(String JavaDoc msgQ) throws WSIFException {
100         super(
101             new WSIFJMSFinderForJndi(
102                 null,
103                 TestUtilities.getWsifProperty(
104                     "wsif.jms2httpbridge.initialcontextfactory"),
105                 TestUtilities.getWsifProperty(
106                     "wsif.jms2httpbridge.jndiproviderurl"),
107                 WSIFJMSFinder.STYLE_QUEUE,
108                 TestUtilities.getWsifProperty(
109                     "wsif.jms2httpbridge.jndiconnectionfactoryname"),
110                 msgQ,
111                 null),
112             null,
113             WSIFJMSConstants.WAIT_FOREVER,
114             startType,
115             VERBOSE);
116                 
117         listenerThread = new Thread JavaDoc() {
118             public void run() {
119                 try {
120                    listen( list );
121                 } catch (WSIFException ex) {
122                    ex.printStackTrace();
123                 }
124             }
125         };
126         listenerThread.start();
127     }
128     /**
129      * Create a listener thread to listen for messages. This waits forever
130      * until it gets an InterruptedException.
131      * @param listener is the JMS message and exception callback interface implementation
132      * @param queue to listen on
133      */

134     public void listen(WSIFJMSListener listener, Queue JavaDoc queue)
135         throws WSIFException {
136         Trc.entry(this, listener, queue);
137         areWeClosed();
138
139         try {
140             QueueReceiver JavaDoc qr = session.createReceiver(queue);
141             qr.setMessageListener(listener);
142             connection.setExceptionListener(listener);
143
144             connection.start();
145
146             for (int i = 1; !Thread.interrupted(); i++) {
147                 Thread.yield();
148                 Thread.sleep(5000);
149                 if (VERBOSE)
150                     System.out.println("JMSAsyncListener waiting... " + i);
151             }
152         } catch (JMSException JavaDoc je) {
153             throw WSIFJMSConstants.ToWsifException(je);
154         } catch (InterruptedException JavaDoc ignored) {
155             if ( VERBOSE ) System.out.println("JMSAsyncListener Exitting");
156         }
157         Trc.exit();
158     }
159     
160     private void processResponse(Message JavaDoc msg) {
161         Serializable JavaDoc so;
162         try {
163             if (VERBOSE)
164                 System.out.println(
165                     "WSIFJmsAsyncListener.processResponse called");
166
167             WSIFCorrelationService cs =
168                 WSIFCorrelationServiceLocator.getCorrelationService();
169             WSIFCorrelationId cid =
170                 new WSIFJMSCorrelationId(msg.getJMSCorrelationID());
171             synchronized (cs) {
172                 so = cs.get(cid);
173             }
174             if (so != null && so instanceof WSIFOperation) {
175                 cs.remove(cid);
176                 ((WSIFOperation) so).fireAsyncResponse(msg);
177             }
178         } catch (Exception JavaDoc ex) {
179             ex.printStackTrace();
180         }
181     }
182
183     public void stop() {
184         listenerThread.interrupt();
185     }
186
187 }
Popular Tags