blob: 44c46d7d87f25d469b598ca2ad8b2ba60a067cd9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.ignite.internal.client.router.impl;
import java.net.URL;
import java.util.Collection;
import java.util.Map;
import java.util.logging.Handler;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.internal.client.router.GridTcpRouterConfiguration;
import org.apache.ignite.internal.util.spring.IgniteSpringHelper;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.X;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lifecycle.LifecycleAware;
import static org.apache.ignite.internal.IgniteComponentType.SPRING;
import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
/**
* Loader class for router.
*/
public class GridRouterCommandLineStartup {
/** Logger. */
private IgniteLogger log;
/** TCP router. */
private LifecycleAware tcpRouter;
/**
* Search given context for required configuration and starts router.
*
* @param beans Beans loaded from spring configuration file.
*/
public void start(Map<Class<?>, Collection> beans) {
log = F.<IgniteLogger>first(beans.get(IgniteLogger.class));
if (log == null) {
U.error(log, "Failed to find logger definition in application context. Stopping the router.");
return;
}
GridTcpRouterConfiguration tcpCfg =
F.<GridTcpRouterConfiguration>first(beans.get(GridTcpRouterConfiguration.class));
if (tcpCfg == null)
U.warn(log, "TCP router startup skipped (configuration not found).");
else {
tcpRouter = new GridTcpRouterImpl(tcpCfg);
try {
tcpRouter.start();
}
catch (Exception e) {
U.error(log, "Failed to start TCP router on port " + tcpCfg.getPort() + ": " + e.getMessage(), e);
tcpRouter = null;
}
}
}
/**
* Stops router.
*/
public void stop() {
if (tcpRouter != null) {
try {
tcpRouter.stop();
}
catch (Exception e) {
U.error(log, "Error while stopping the router.", e);
}
}
}
/**
* Wrapper method to run router from command-line.
*
* @param args Command-line arguments.
* @throws IgniteCheckedException If failed.
*/
public static void main(String[] args) throws IgniteCheckedException {
X.println(
" __________ ________________ ",
" / _/ ___/ |/ / _/_ __/ __/ ",
" _/ // (_ / // / / / / _/ ",
"/___/\\___/_/|_/___/ /_/ /___/ ",
" ",
"Ignite Router Command Line Loader",
"ver. " + ACK_VER_STR,
COPYRIGHT,
" "
);
IgniteSpringHelper spring = SPRING.create(false);
if (args.length < 1) {
X.error("Missing XML configuration path.");
System.exit(1);
}
String cfgPath = args[0];
URL cfgUrl = U.resolveIgniteUrl(cfgPath);
if (cfgUrl == null) {
X.error("Spring XML file not found (is IGNITE_HOME set?): " + cfgPath);
System.exit(1);
}
Collection<Handler> savedHnds = U.addJavaNoOpLogger();
Map<Class<?>, Collection> beans;
try {
beans = spring.loadBeans(cfgUrl, IgniteLogger.class, GridTcpRouterConfiguration.class).get1();
}
finally {
U.removeJavaNoOpLogger(savedHnds);
}
final GridRouterCommandLineStartup routerStartup = new GridRouterCommandLineStartup();
routerStartup.start(beans);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override public void run() {
routerStartup.stop();
}
});
}
}