Package com.opengamma.component.spring

Source Code of com.opengamma.component.spring.OpenGammaSpringServlet

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.component.spring;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.ws.rs.core.Application;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opengamma.component.ComponentRepository;
import com.opengamma.util.rest.HttpMethodFilter;
import com.opengamma.util.rest.NoCachingFilter;
import com.opengamma.util.rest.UrlSuffixFilter;
import com.sun.jersey.api.core.DefaultResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
import com.sun.jersey.spi.container.WebApplication;
import com.sun.jersey.spi.container.servlet.WebConfig;
import com.sun.jersey.spi.spring.container.SpringComponentProviderFactory;
import com.sun.jersey.spi.spring.container.servlet.SpringServlet;

/**
* The OpenGamma servlet that integrates Jetty, Spring and OpenGamma components.
* <p>
* This servlet is only needed to start Spring such that a context is loaded directly
* by the servlet and that context can directly contain Jax-RS resources.
*/
public class OpenGammaSpringServlet extends SpringServlet {

  /** Serialization version. */
  private static final long serialVersionUID = 1L;
  /** Logger. */
  private static final Logger s_logger = LoggerFactory.getLogger(OpenGammaSpringServlet.class);

  public OpenGammaSpringServlet() {
    super();
  }

  @Override
  public void init() throws ServletException {
    super.init();
  }

  @Override
  public void init(ServletConfig config) throws ServletException {
    super.init(config);
  }

  @Override
  protected ResourceConfig getDefaultResourceConfig(Map<String, Object> props, WebConfig webConfig) throws ServletException {
    DefaultResourceConfig cfg = new DefaultResourceConfig();
    if (props.containsKey(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS) == false) {
      props.put(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, new ArrayList<Object>(Arrays.asList(new HttpMethodFilter(), new UrlSuffixFilter())));
    }
    if (props.containsKey(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS) == false) {
      props.put(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, new ArrayList<Object>(Arrays.asList(new NoCachingFilter())));
    }
    cfg.setPropertiesAndFeatures(props);
    return cfg;
  }

  @Override
  protected void initiate(ResourceConfig rc, WebApplication wa) {
    Application app = createApplication();
    try {
      // initialize the Jetty system
      rc.add(app);
      wa.initiate(rc, new SpringComponentProviderFactory(rc, getContext()));
     
    } catch (RuntimeException ex) {
      s_logger.error("Exception occurred during intialization", ex);
      throw ex;
    }
  }

  /**
   * Creates the JaxRs application from the repository.
   *
   * @return the application, not null
   */
  protected Application createApplication() {
    ComponentRepository repo = ComponentRepository.getFromServletContext(getServletContext());
    final Set<Object> singletons = repo.getRestComponents().buildJaxRsSingletons();
    final Set<Class<?>> classes = repo.getRestComponents().buildJaxRsClasses();
    Application app = new Application() {
      @Override
      public Set<Class<?>> getClasses() {
        return classes;
      }
      @Override
      public Set<Object> getSingletons() {
        return singletons;
      }
    };
    return app;
  }

}
TOP

Related Classes of com.opengamma.component.spring.OpenGammaSpringServlet

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.