och.front.web.FrontAppProvider.java Source code

Java tutorial

Introduction

Here is the source code for och.front.web.FrontAppProvider.java

Source

/*
 * Copyright 2015 Evgeny Dolganov (evgenij.dolganov@gmail.com).
 *
 * 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 och.front.web;

import static och.api.model.PropKey.*;
import static och.comp.web.AppProviderUtil.*;
import static och.service.props.PropsOps.*;
import static och.util.Util.*;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;

import och.front.service.FrontApp;
import och.service.props.Props;
import och.service.props.impl.MultiProps;
import och.service.props.impl.NetPropsClient;

import org.apache.commons.logging.Log;

public class FrontAppProvider {

    private static Log log = getLog(FrontAppProvider.class);

    public static volatile Props directProps = null;
    public static volatile FrontApp lastCreated;

    public static synchronized FrontApp get(ServletContext servletContext) throws ServletException {

        try {
            if (servletContext == null)
                throw new IllegalArgumentException("servletContext must be not null");

            FrontApp app = (FrontApp) servletContext.getAttribute("FrontApp");

            if (app == null) {
                app = createApp(servletContext);
                servletContext.setAttribute("FrontApp", app);
                lastCreated = app;
            }
            return app;

        } catch (Throwable t) {
            log.error("can't get app", t);
            throw new ServletException("can't init: " + t, t);
        }
    }

    private static FrontApp createApp(ServletContext servletContext) throws Exception {

        Props props = directProps;

        //from file and net
        if (props == null) {
            String webInfPath = servletContext.getRealPath("./WEB-INF");

            String configPath = System.getProperty("och.chat.propsDir");
            if (configPath == null) {
                configPath = webInfPath;
            }

            Props startProps = createProps(configPath + "/front.properties", webInfPath);
            if (System.getProperty("och.skipNetProps") != null) {
                props = startProps;
            } else {

                NetPropsClient netPropsClient = new NetPropsClient(startProps.getStrVal(netProps_front_host),
                        startProps.getIntVal(netProps_front_port), startProps.getStrVal(netProps_front_secureKey),
                        startProps.getBoolVal(netPropsClient_waitConnect),
                        startProps.getLongVal(netPropsClient_updateTime));

                addUpdateSecureKeyListener(startProps, netPropsClient, netProps_front_secureKey);

                Props netProps = netPropsClient.getProps();

                props = new MultiProps(startProps, netProps);
            }
        }

        return FrontApp.create(props, servletContext);
    }

}