1 17 18 package org.apache.geronimo.console.jmsmanager.renderers; 19 20 import java.io.IOException ; 21 import java.util.ArrayList ; 22 import java.util.Collections ; 23 import java.util.Enumeration ; 24 import java.util.Hashtable ; 25 import java.util.List ; 26 import java.util.Map ; 27 28 import javax.jms.Destination ; 29 import javax.jms.JMSException ; 30 import javax.jms.Message ; 31 import javax.jms.MessageListener ; 32 import javax.jms.Queue ; 33 import javax.jms.QueueBrowser ; 34 import javax.jms.QueueConnection ; 35 import javax.jms.QueueConnectionFactory ; 36 import javax.jms.QueueSession ; 37 import javax.jms.Topic ; 38 import javax.management.ObjectName ; 39 import javax.portlet.PortletException; 40 import javax.portlet.RenderRequest; 41 import javax.portlet.RenderResponse; 42 43 import org.apache.geronimo.console.jmsmanager.AbstractJMSManager; 44 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; 45 import org.apache.geronimo.gbean.AbstractName; 46 import org.apache.commons.logging.Log; 47 import org.apache.commons.logging.LogFactory; 48 49 public class ViewMessagesRenderer extends AbstractJMSManager implements 50 PortletRenderer { 51 52 private static final Log log = LogFactory.getLog(ViewMessagesRenderer.class); 53 54 private static final TopicListener topicListener = new TopicListener(); 55 56 public String render(RenderRequest request, RenderResponse response) 57 throws PortletException, IOException { 58 List messageList = getMessageList(request, response); 59 request.setAttribute("messages", messageList); 60 return "/WEB-INF/view/jmsmanager/viewmessages.jsp"; 61 } 62 63 public List getMessageList(RenderRequest request, RenderResponse response) 64 throws PortletException { 65 String destinationApplicationName = request 66 .getParameter("destinationApplicationName"); 67 String destinationModuleName = request 68 .getParameter("destinationModuleName"); 69 String destinationName = request.getParameter("destinationName"); 70 71 List ret = new ArrayList (); 72 try { 73 AbstractName adminObjectName = null; Destination dest = (Destination ) kernel.invoke(adminObjectName, 78 "$getResource"); 79 if (dest instanceof Queue ) { 80 Queue queue = (Queue ) dest; 81 QueueConnectionFactory qConFactory = null; 82 QueueConnection qConnection = null; 83 QueueSession qSession = null; 84 QueueBrowser qBrowser = null; 85 try { 86 qConFactory = (QueueConnectionFactory ) kernel.invoke( 87 JCA_MANAGED_CONNECTION_FACTORY_NAME, 88 "$getResource"); 89 qConnection = qConFactory.createQueueConnection(); 90 qSession = qConnection.createQueueSession(false, 91 QueueSession.AUTO_ACKNOWLEDGE); 92 qBrowser = qSession.createBrowser(queue); 93 qConnection.start(); 94 for (Enumeration e = qBrowser.getEnumeration(); e 95 .hasMoreElements();) { 96 Object o = e.nextElement(); 97 ret.add(o); 98 } 99 qConnection.stop(); 100 } catch (Exception e) { 101 log.error(e.getMessage(), e); 102 } finally { 103 try { 104 if (qBrowser != null) { 105 qBrowser.close(); 106 } 107 } catch (JMSException ignore) { 108 } 109 try { 110 if (qSession != null) { 111 qSession.close(); 112 } 113 } catch (JMSException ignore) { 114 } 115 try { 116 if (qConnection != null) { 117 qConnection.close(); 118 } 119 } catch (JMSException ignore) { 120 } 121 } 122 } else if (dest instanceof Topic ) { 123 AbstractName tBrowserObjName = null; ret = (List ) kernel.invoke(tBrowserObjName, "getMessages"); 129 } 130 } catch (Exception e) { 131 log.error(e.getMessage(), e); 132 } 133 return ret; 134 } 135 136 static class TopicListener implements MessageListener { 137 141 private Map messagesMap = new Hashtable (); 142 143 public final String name = this.toString(); 144 145 public synchronized void onMessage(Message message) { 146 try { 147 Destination dest = message.getJMSDestination(); 148 List messages = null; 149 if (!messagesMap.containsKey(dest)) { 150 register((Topic ) dest); 151 } 152 messages = (List ) messagesMap.get(dest); 153 154 if (!messages.contains(message)) { 155 messages.add(message); 156 } 157 messagesMap.put(dest, messages); 158 } catch (JMSException e) { 159 log.error(e.getMessage(), e); 160 } 161 } 162 163 public void register(Topic topic) { 164 if (!messagesMap.containsKey(topic)) { 165 List messages = new ArrayList (); 166 messagesMap.put(topic, messages); 167 } 168 } 169 170 public List getMessages(Topic topic) { 171 List ret; 172 if (messagesMap.containsKey(topic)) { 173 ret = (List ) messagesMap.get(topic); 174 } else { 175 ret = Collections.EMPTY_LIST; 176 } 177 return Collections.unmodifiableList(ret); 178 } 179 180 public boolean isListeningTo(Topic topic) { 181 return messagesMap.containsKey(topic); 182 } 183 } 184 185 } 186 | Popular Tags |