001    /** 
002     * 
003     * Copyright 2004 Protique Ltd
004     * 
005     * Licensed under the Apache License, Version 2.0 (the "License"); 
006     * you may not use this file except in compliance with the License. 
007     * 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.activemq.web;
019    
020    import org.activemq.broker.BrokerContainer;
021    import org.activemq.spring.SpringBrokerContainerFactory;
022    import org.springframework.core.io.Resource;
023    import org.springframework.web.context.support.ServletContextResource;
024    
025    import javax.jms.JMSException;
026    import javax.servlet.ServletContext;
027    import javax.servlet.ServletException;
028    import javax.servlet.http.HttpServlet;
029    import javax.servlet.http.HttpServletRequest;
030    import javax.servlet.http.HttpServletResponse;
031    import java.io.IOException;
032    
033    /**
034     * This servlet when initialized will create an ActiveMQ message broker
035     *
036     * @version $Revision: 1.1 $
037     */
038    public class SpringBrokerServlet extends HttpServlet {
039        private BrokerContainer brokerContainer;
040    
041        public void init() throws ServletException {
042            log("Creating ActiveMQ Broker");
043            brokerContainer = createBroker(getServletContext());
044    
045            log("Starting ActiveMQ Broker");
046            try {
047                brokerContainer.start();
048    
049                log("Started ActiveMQ Broker");
050            }
051            catch (JMSException e) {
052                throw new ServletException("Failed to start ActiveMQ broker: " + e, e);
053            }
054        }
055    
056        public void destroy() {
057            if (brokerContainer != null) {
058                try {
059                    brokerContainer.stop();
060                }
061                catch (JMSException e) {
062                    log("Failed to stop the ActiveMQ Broker: " + e, e);
063                }
064            }
065            super.destroy();
066        }
067    
068        public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
069            getServletContext().log("Attempt to call service method on SpringBrokerServlet as [" +
070                    request.getRequestURI() + "] was ignored");
071            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
072        }
073    
074        public String getServletInfo() {
075            return "SpringBrokerServlet for deploying the ActiveMQ Broker in a servlet engine";
076        }
077    
078    
079        /**
080         * Factory method to create a new ActiveMQ Broker
081         */
082        protected BrokerContainer createBroker(ServletContext context) {
083            String brokerURI = context.getInitParameter("brokerURI");
084            if (brokerURI == null) {
085                brokerURI = "activemq.xml";
086            }
087    
088            log("Loading ActiveMQ Broker configuration from: " + brokerURI);
089    
090            Resource resource = new ServletContextResource(context, brokerURI);
091            return SpringBrokerContainerFactory.newInstance(resource);
092        }
093    
094    }