com.athena.peacock.agent.Starter.java Source code

Java tutorial

Introduction

Here is the source code for com.athena.peacock.agent.Starter.java

Source

/* 
 * Copyright 2013 The Athena-Peacock Project.
 *
 * 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.
 *
 * Revision History
 * Author         Date            Description
 * ---------------   ----------------   ------------
 * Sang-cheon Park   2013. 7. 30.      First Draft.
 */
package com.athena.peacock.agent;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.Assert;

import com.athena.peacock.agent.util.AgentConfigUtil;
import com.athena.peacock.agent.util.PeacockAgentIDGenerator;
import com.athena.peacock.agent.util.PropertyUtil;
import com.athena.peacock.common.constant.PeacockConstant;

/**
 * <pre>
 * Peacock Agent ??  Starter ?? ? ? ? .
 *    <ul>
 *       <li>config/context.properties ?? ? ${peacock.agent.config.file.name} ?   load .</li>
 *       <li>Agent ID ??  ${peacock.agent.agent.file.name} ?   ?,  ?? ?   Agent ID ? ?? .</li>
 *       <li>Spring Context ?? load ?    ? Quartz? ? 1   ??   .</li>
 *    </ul>
 * </pre>
 * @author Sang-cheon Park
 * @version 1.0
 */
public class Starter {

    private static final Logger logger = LoggerFactory.getLogger(Starter.class);

    /**
     * <pre>
     * 
     * </pre>
     * @param args
     */
    @SuppressWarnings("resource")
    public static void main(String[] args) {

        int rand = (int) (Math.random() * 100) % 50;
        System.setProperty("random.seconds", Integer.toString(rand));

        String configFile = null;

        try {
            configFile = PropertyUtil.getProperty(PeacockConstant.CONFIG_FILE_KEY);
        } catch (Exception e) {
            // nothing to do.
        } finally {
            if (StringUtils.isEmpty(configFile)) {
                configFile = "/peacock/agent/config/agent.conf";
            }
        }

        /**
         * ${peacock.agent.config.file.name} ?? load  ? ??   ? ?  ? .
         */
        String errorMsg = "\n\"" + configFile + "\" file does not exist or cannot read.\n" + "Please check \""
                + configFile + "\" file exists and can read.";

        Assert.isTrue(AgentConfigUtil.exception == null, errorMsg);
        Assert.notNull(AgentConfigUtil.getConfig(PeacockConstant.SERVER_IP), "ServerIP cannot be empty.");
        Assert.notNull(AgentConfigUtil.getConfig(PeacockConstant.SERVER_PORT), "ServerPort cannot be empty.");

        /**
         * Agent ID ??  ${peacock.agent.agent.file.name} ?   ?, 
         *  ?? ?   Agent ID ? ?? .
         */
        String agentFile = null;
        String agentId = null;

        try {
            agentFile = PropertyUtil.getProperty(PeacockConstant.AGENT_ID_FILE_KEY);
        } catch (Exception e) {
            // nothing to do.
        } finally {
            if (StringUtils.isEmpty(agentFile)) {
                agentFile = "/peacock/agent/.agent";
            }
        }

        File file = new File(agentFile);
        boolean isNew = false;

        if (file.exists()) {
            try {
                agentId = IOUtils.toString(file.toURI());

                // ? ? agent ID  agent ID? ? 36? ?   ?.
                if (StringUtils.isEmpty(agentId) || agentId.length() != 36) {
                    throw new IOException();
                }
            } catch (IOException e) {
                logger.error(agentFile + " file cannot read or saved invalid agent ID.", e);

                agentId = PeacockAgentIDGenerator.generateId();
                isNew = true;
            }
        } else {
            agentId = PeacockAgentIDGenerator.generateId();
            isNew = true;
        }

        if (isNew) {
            logger.info("New Agent-ID({}) be generated.", agentId);

            try {
                file.setWritable(true);
                OutputStreamWriter output = new OutputStreamWriter(new FileOutputStream(file));
                output.write(agentId);
                file.setReadOnly();
                IOUtils.closeQuietly(output);
            } catch (UnsupportedEncodingException e) {
                logger.error("UnsupportedEncodingException has occurred : ", e);
            } catch (FileNotFoundException e) {
                logger.error("FileNotFoundException has occurred : ", e);
            } catch (IOException e) {
                logger.error("IOException has occurred : ", e);
            }
        }

        // Spring Application Context Loading
        logger.debug("Starting application context...");
        AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "classpath:spring/context-*.xml");
        applicationContext.registerShutdownHook();
    }//end of main()

}
//end of Starter.java