001    /**
002     *  Licensed to the Apache Software Foundation (ASF) under one or more
003     *  contributor license agreements.  See the NOTICE file distributed with
004     *  this work for additional information regarding copyright ownership.
005     *  The ASF licenses this file to You under the Apache License, Version 2.0
006     *  (the "License"); you may not use this file except in compliance with
007     *  the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     *  Unless required by applicable law or agreed to in writing, software
012     *  distributed under the License is distributed on an "AS IS" BASIS,
013     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     *  See the License for the specific language governing permissions and
015     *  limitations under the License.
016     */
017    
018    package org.apache.geronimo.console.jmsmanager.renderers;
019    
020    import java.io.IOException;
021    import java.lang.reflect.Field;
022    import java.util.ArrayList;
023    import java.util.Enumeration;
024    import java.util.List;
025    
026    import javax.jms.Connection;
027    import javax.jms.ConnectionFactory;
028    import javax.jms.Destination;
029    import javax.jms.Queue;
030    import javax.jms.QueueBrowser;
031    import javax.jms.Session;
032    import javax.management.ObjectName;
033    import javax.portlet.PortletException;
034    import javax.portlet.RenderRequest;
035    import javax.portlet.RenderResponse;
036    
037    //import org.activemq.service.DeadLetterPolicy;
038    import org.apache.geronimo.console.jmsmanager.AbstractJMSManager;
039    import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
040    import org.apache.geronimo.gbean.AbstractName;
041    import org.apache.commons.logging.Log;
042    import org.apache.commons.logging.LogFactory;
043    
044    public class ViewDLQRenderer extends AbstractJMSManager implements PortletRenderer {
045    
046        private static final Log log = LogFactory.getLog(ViewDLQRenderer.class);
047    
048        private Destination dlq = null;
049    
050        private QueueBrowser dlqBrowser = null;
051    
052        private Connection connection = null;
053    
054        private Session session = null;
055    
056        private String dlqName;
057    
058        public ViewDLQRenderer() {
059        }
060    
061        public void setup(RenderRequest request, RenderResponse response) {
062            /*
063            String destinationApplicationName = request
064                    .getParameter("destinationApplicationName");
065            String destinationModuleName = request
066                    .getParameter("destinationModuleName");
067            String destinationName = request.getParameter("destinationName");
068    
069            try {
070                //TODO configid disabled
071                AbstractName adminObjectName = null;//NameFactory.getComponentName(null,
072    //                    null, destinationApplicationName, NameFactory.JCA_RESOURCE,
073    //                    destinationModuleName, destinationName, null, baseContext);
074                Destination destination = (Destination) kernel.invoke(adminObjectName,
075                        "$getResource");
076                ConnectionFactory connectionFactory = (ConnectionFactory) kernel
077                        .invoke(JCA_MANAGED_CONNECTION_FACTORY_NAME,
078                                "$getResource");
079                connection = connectionFactory.createConnection();
080                session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
081    
082                DeadLetterPolicy dlp = new DeadLetterPolicy();
083    
084                //dlqName =
085                // dlp.getDeadLetterNameFromDestination((ActiveMQDestination)
086                // destination);
087                // This is a hack to get around the fact that the code commented
088                // above throws a ClassCastException due to ClassLoader weirdness.
089                Field f = dlp.getClass().getDeclaredField(
090                        "deadLetterPerDestinationName");
091                f.setAccessible(true);
092                boolean deadLetterPerDestinationName = f.getBoolean(dlp);
093                f = dlp.getClass().getDeclaredField("deadLetterPrefix");
094                f.setAccessible(true);
095                String deadLetterPrefix = "" + f.get(dlp);
096                if (deadLetterPerDestinationName) {
097                    dlqName = deadLetterPrefix
098                            + destination.getClass().getMethod("getPhysicalName",
099                                    null).invoke(destination, null);
100                } else {
101                    dlqName = deadLetterPrefix + deadLetterPrefix;
102                }
103    
104                dlq = session.createQueue(dlqName);
105                dlqBrowser = session.createBrowser((Queue) dlq);
106    
107                connection.start();
108    
109            } catch (Exception e) {
110                log.error(e.getMessage(), e);
111            }
112            */
113        }
114    
115        public List getDLQContents(QueueBrowser qb) {
116    
117            List list = new ArrayList();
118    
119            try {
120                for (Enumeration e = qb.getEnumeration(); e.hasMoreElements();) {
121                    Object o = e.nextElement();
122                    list.add(o);
123                }
124    
125                connection.stop();
126                dlqBrowser.close();
127                session.close();
128                connection.close();
129    
130            } catch (Exception e) {
131                log.error(e.getMessage(), e);
132            }
133    
134            return list;
135        }
136    
137        public String render(RenderRequest request, RenderResponse response)
138                throws PortletException, IOException {
139    
140            setup(request, response);
141            List dlqContents = getDLQContents(dlqBrowser);
142            request.setAttribute("dlqcontents", dlqContents);
143            request.setAttribute("dlqname", dlqName);
144    
145            return "/WEB-INF/view/jmsmanager/viewDLQ.jsp";
146        }
147    
148    }