Java tutorial
/* * 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.yardstick; import org.apache.ignite.*; import org.apache.ignite.configuration.*; import org.apache.ignite.internal.util.*; import org.apache.ignite.spi.communication.tcp.*; import org.springframework.beans.*; import org.springframework.beans.factory.xml.*; import org.springframework.context.support.*; import org.springframework.core.io.*; import org.yardstickframework.*; import java.net.*; import java.util.*; /** * Standalone Ignite node. */ public class IgniteNode implements BenchmarkServer { /** Grid instance. */ protected Ignite ignite; /** */ public IgniteNode() { // No-op. } /** {@inheritDoc} */ @Override public void start(BenchmarkConfiguration cfg) throws Exception { IgniteBenchmarkArguments args = new IgniteBenchmarkArguments(); BenchmarkUtils.jcommander(cfg.commandLineArguments(), args, "<ignite-node>"); IgniteConfiguration c = loadConfiguration(args.configuration()); assert c != null; // Server node doesn't contains cache configuration. Driver will create dynamic cache. c.setCacheConfiguration(); TransactionConfiguration tc = c.getTransactionConfiguration(); tc.setDefaultTxConcurrency(args.txConcurrency()); tc.setDefaultTxIsolation(args.txIsolation()); TcpCommunicationSpi commSpi = (TcpCommunicationSpi) c.getCommunicationSpi(); if (commSpi == null) commSpi = new TcpCommunicationSpi(); c.setCommunicationSpi(commSpi); ignite = Ignition.start(c); } /** * @param springCfgPath Spring configuration file path. * @return Grid configuration. * @throws Exception If failed. */ protected static IgniteConfiguration loadConfiguration(String springCfgPath) throws Exception { URL url; try { url = new URL(springCfgPath); } catch (MalformedURLException e) { url = IgniteUtils.resolveIgniteUrl(springCfgPath); if (url == null) throw new IgniteCheckedException("Spring XML configuration path is invalid: " + springCfgPath + ". Note that this path should be either absolute or a relative local file system path, " + "relative to META-INF in classpath or valid URL to IGNITE_HOME.", e); } GenericApplicationContext springCtx; try { springCtx = new GenericApplicationContext(); new XmlBeanDefinitionReader(springCtx).loadBeanDefinitions(new UrlResource(url)); springCtx.refresh(); } catch (BeansException e) { throw new Exception("Failed to instantiate Spring XML application context [springUrl=" + url + ", err=" + e.getMessage() + ']', e); } Map<String, IgniteConfiguration> cfgMap; try { cfgMap = springCtx.getBeansOfType(IgniteConfiguration.class); } catch (BeansException e) { throw new Exception("Failed to instantiate bean [type=" + IgniteConfiguration.class + ", err=" + e.getMessage() + ']', e); } if (cfgMap == null || cfgMap.isEmpty()) throw new Exception("Failed to find ignite configuration in: " + url); return cfgMap.values().iterator().next(); } /** {@inheritDoc} */ @Override public void stop() throws Exception { Ignition.stopAll(true); } /** {@inheritDoc} */ @Override public String usage() { return BenchmarkUtils.usage(new IgniteBenchmarkArguments()); } /** * @return Ignite. */ public Ignite ignite() { return ignite; } }