Package de.scoopgmbh.copper.monitoring.server

Source Code of de.scoopgmbh.copper.monitoring.server.SpringRemotingServer

/*
* Copyright 2002-2013 SCOOP Software GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.scoopgmbh.copper.monitoring.server;

import java.util.EnumSet;

import javax.servlet.DispatcherType;

import org.apache.shiro.spring.remoting.SecureRemoteInvocationExecutor;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.NCSARequestLog;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.server.handler.RequestLogHandler;
import org.eclipse.jetty.server.nio.NetworkTrafficSelectChannelConnector;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.servlets.GzipFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter;
import org.springframework.remoting.support.RemoteInvocationExecutor;
import org.springframework.web.context.support.GenericWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import de.scoopgmbh.copper.monitoring.core.CopperMonitoringService;
import de.scoopgmbh.copper.monitoring.core.LoginService;

public class SpringRemotingServer {
 
  static final Logger logger = LoggerFactory.getLogger(SpringRemotingServer.class);
  private Server server;
  private final CopperMonitoringService copperMonitoringService;
  private final int port;
  private final String host;
  private final LoginService loginService;
 
  private RemoteInvocationExecutor remoteInvocationExecutor = new SecureRemoteInvocationExecutor();
 
  public SpringRemotingServer(CopperMonitoringService copperMonitoringService, int port, String host, LoginService loginService) {
    super();
    this.copperMonitoringService = copperMonitoringService;
    this.port = port;
    this.host = host;
    this.loginService = loginService;
  }

  public void start() {
    logger.info("Starting Copper-Monitor-Server (jetty)");

    server = new Server();
    NetworkTrafficSelectChannelConnector connector = new NetworkTrafficSelectChannelConnector();
    connector.setPort(port);
    connector.setHost(host);
//    connector.addNetworkTrafficListener();
   
    server.setConnectors(new Connector[] { connector });

    ServletContextHandler servletContextHandler = new ServletContextHandler(server, "/", true, false);
 
    //Servlet adress is defined with the bean name
    //try to avoid xml config (dont sacrifice type safety)
    GenericWebApplicationContext genericWebApplicationContext = new GenericWebApplicationContext();
    genericWebApplicationContext.registerBeanDefinition("/loginService",
        BeanDefinitionBuilder.genericBeanDefinition(HttpInvokerServiceExporter.class).
        addPropertyValue("service", loginService).
        addPropertyValue("serviceInterface", LoginService.class.getName()).
        getBeanDefinition());
    genericWebApplicationContext.registerBeanDefinition("/copperMonitoringService",
        BeanDefinitionBuilder.genericBeanDefinition(HttpInvokerServiceExporter.class).
        addPropertyValue("service", copperMonitoringService).
        addPropertyValue("serviceInterface", CopperMonitoringService.class.getName()).
        addPropertyValue("remoteInvocationExecutor", remoteInvocationExecutor).
        getBeanDefinition());
    genericWebApplicationContext.refresh();
   
    DispatcherServlet dispatcherServlet = new DispatcherServlet(genericWebApplicationContext);
    ServletHolder servletHolder = new ServletHolder(dispatcherServlet);
    servletContextHandler.addServlet(servletHolder, "/*");
   
    FilterHolder filterHolder = new FilterHolder();
    GzipFilter filter = new GzipFilter();
    filterHolder.setFilter(filter);
    EnumSet<DispatcherType> types = EnumSet.allOf(DispatcherType.class);
    servletContextHandler.addFilter(filterHolder, "/*", types);
   
    HandlerCollection handlers = new HandlerCollection();
    final RequestLogHandler requestLogHandler = new RequestLogHandler();
    NCSARequestLog requestLog = new NCSARequestLog();
    requestLog.setAppend(true);
    requestLog.setExtended(true);
    requestLog.setLogLatency(true);
    requestLogHandler.setRequestLog(requestLog);
    handlers.setHandlers(new Handler[] {servletContextHandler, requestLogHandler});
    server.setHandler(handlers);
   
 
    try {
      server.start();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  public void stop() {
    try {
      server.stop();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  public boolean isRunning() {
    return server.isRunning();
  }

  public void setRemoteInvocationExecutor(RemoteInvocationExecutor remoteInvocationExecutor) {
    this.remoteInvocationExecutor = remoteInvocationExecutor;
  }

}
TOP

Related Classes of de.scoopgmbh.copper.monitoring.server.SpringRemotingServer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.