001/*
002 * Copyright 2013 Atteo.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.atteo.moonshine.jolokia;
017
018import javax.inject.Singleton;
019import javax.xml.bind.annotation.XmlElement;
020import javax.xml.bind.annotation.XmlIDREF;
021import javax.xml.bind.annotation.XmlRootElement;
022
023import org.atteo.moonshine.TopLevelService;
024import org.atteo.moonshine.services.ImportService;
025import org.atteo.moonshine.webserver.ServletContainer;
026import org.jolokia.http.AgentServlet;
027import org.jolokia.restrictor.AllowAllRestrictor;
028
029import com.google.inject.Module;
030import com.google.inject.PrivateModule;
031
032/**
033 * Jolokia - JMX-HTTP bridge.
034 */
035@XmlRootElement(name = "jolokia")
036@Singleton
037public class JolokiaService extends TopLevelService {
038    @XmlElement
039    @XmlIDREF
040    @ImportService
041    private ServletContainer servletContainer;
042
043    /**
044     * URL prefix under which Jolokia should be served.
045     */
046    @XmlElement
047    private String pattern = "/jolokia/*";
048
049    @Override
050    public Module configure() {
051        return new PrivateModule() {
052            @Override
053            protected void configure() {
054                bind(AgentServlet.class).toInstance(new AgentServlet(new AllowAllRestrictor()));
055                servletContainer.addServlet(getProvider(AgentServlet.class), pattern);
056            }
057        };
058    }
059}