acromusashi.stream.client.DrpcRequestClient.java Source code

Java tutorial

Introduction

Here is the source code for acromusashi.stream.client.DrpcRequestClient.java

Source

/**
* Copyright (c) Acroquest Technology Co, Ltd. All Rights Reserved.
* Please read the associated COPYRIGHTS file for more details.
*
* THE SOFTWARE IS PROVIDED BY Acroquest Technolog Co., Ltd.,
* WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDER BE LIABLE FOR ANY
* CLAIM, DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*/
package acromusashi.stream.client;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
import org.apache.storm.thrift.transport.TTransportException;
import org.apache.storm.utils.DRPCClient;
import org.apache.storm.utils.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * DRPCServer????
 * 
 * @author kimura
 */
public class DrpcRequestClient {
    /** ? */
    private static final int DEFAULT_PORT = 3772;

    /**  */
    private static final int DEFAULT_TIMEOUT = 30000;

    /** logger */
    private static final Logger logger = LoggerFactory.getLogger(DrpcRequestClient.class);

    /**
     * ?????
     */
    public DrpcRequestClient() {
    }

    /**
     * ?<br>
     * <br>
     * ?/?<br>
     * <ul>
     * <li>-h DRPCServer(</li>
     * <li>-p DRPCServer?(? 3772)</li>
     * <li>-t DRPC(??)(? 30000)</li>
     * <li>-f DRPC(function)()</li>
     * <li>-s DRPC()</li>
     * <li>-sh </li>
     * </ul>
     * 
     * @param args 
     */
    public static void main(String... args) {
        DrpcRequestClient client = new DrpcRequestClient();
        client.startSendRequest(args);
    }

    /**
     * DRPC??
     * 
     * @param args 
     */
    public void startSendRequest(String... args) {
        Options cliOptions = createOptions();
        CommandLineParser parser = new PosixParser();
        CommandLine commandLine = null;
        HelpFormatter help = new HelpFormatter();

        try {
            commandLine = parser.parse(cliOptions, args);
        } catch (ParseException pex) {
            help.printHelp(DrpcRequestClient.class.getName(), cliOptions, true);
            return;
        }

        if (commandLine.hasOption("sh")) {
            // ??????????
            help.printHelp(DrpcRequestClient.class.getName(), cliOptions, true);
            return;
        }

        // ??
        String drpcHost = commandLine.getOptionValue("h");
        String function = commandLine.getOptionValue("f");
        String funcArg = commandLine.getOptionValue("a");

        int drpcPort = DEFAULT_PORT;
        if (commandLine.hasOption("p") == true) {
            drpcPort = Integer.parseInt(commandLine.getOptionValue("p"));
        }

        int timeout = DEFAULT_TIMEOUT;
        if (commandLine.hasOption("t") == true) {
            timeout = Integer.parseInt(commandLine.getOptionValue("t"));
        }

        sendRequest(drpcHost, drpcPort, timeout, function, funcArg);
    }

    /**
     * DRPC??
     * 
     * @param host DRPCServer
     * @param port DRPCServer?
     * @param timeout DRPC(??)
     * @param func DRPC(function)
     * @param funcArg DRPC
     */
    public void sendRequest(String host, int port, int timeout, String func, String funcArg) {
        DRPCClient client = null;

        try {
            client = createClient(host, port, timeout);
        } catch (Exception ex) {
            logger.error("DRPCClient connect failed.", ex);
            return;
        }

        String result = null;

        try {
            result = client.execute(func, funcArg);
            logger.info("DRPCRequest result is " + result);
        } catch (Exception ex) {
            logger.error("DRPCRequest failed.", ex);
        } finally {
            client.close();
        }
    }

    /**
     * DRPCClient??
     * 
     * @param host DRPCServer
     * @param port DRPCServer?
     * @param timeout DRPC(??)
     * @return DRPCClient
     * @throws TTransportException Transport failed.
     */
    protected DRPCClient createClient(String host, int port, int timeout) throws TTransportException {
        return new DRPCClient(Utils.readStormConfig(), host, port, timeout);
    }

    /**
     * ???
     * 
     * @return ??
     */
    public static Options createOptions() {
        Options cliOptions = new Options();

        // DRPCServer Host
        OptionBuilder.hasArg(true);
        OptionBuilder.withArgName("DRPCServer Host");
        OptionBuilder.withDescription("DRPCServer Host");
        OptionBuilder.isRequired(true);
        Option serverOption = OptionBuilder.create("h");

        // DRPCServer Port
        OptionBuilder.hasArg(true);
        OptionBuilder.withArgName("DRPCServer Port");
        OptionBuilder.withDescription("DRPCServer Port");
        OptionBuilder.isRequired(false);
        Option portOption = OptionBuilder.create("p");

        // 
        OptionBuilder.hasArg(true);
        OptionBuilder.withArgName("DRPC Request Timeout");
        OptionBuilder.withDescription("DRPC Request Timeout");
        OptionBuilder.isRequired(false);
        Option timeoutOption = OptionBuilder.create("t");

        // DRPC Function
        OptionBuilder.hasArg(true);
        OptionBuilder.withArgName("DRPC Function");
        OptionBuilder.withDescription("DRPC Function");
        OptionBuilder.isRequired(true);
        Option functionOption = OptionBuilder.create("f");

        // DRPC Function Arg
        OptionBuilder.hasArg(true);
        OptionBuilder.withArgName("DRPC Function Arg");
        OptionBuilder.withDescription("DRPC Function Arg");
        OptionBuilder.isRequired(true);
        Option funcArgOption = OptionBuilder.create("a");

        // 
        OptionBuilder.withDescription("show help");
        Option helpOption = OptionBuilder.create("sh");

        cliOptions.addOption(serverOption);
        cliOptions.addOption(portOption);
        cliOptions.addOption(timeoutOption);
        cliOptions.addOption(functionOption);
        cliOptions.addOption(funcArgOption);
        cliOptions.addOption(helpOption);
        return cliOptions;
    }
}