/* * 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.activemq.artemis.common; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import org.apache.activemq.artemis.core.config.Configuration; import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.ActiveMQServers; import org.apache.activemq.artemis.jms.server.JMSServerManager; import org.apache.activemq.artemis.jms.server.impl.JMSServerManagerImpl; import org.apache.activemq.artemis.utils.FileUtil; public class SpawnedJMSServer { public static ActiveMQServer server; public static JMSServerManager serverManager; // Using files may be useful for debugging (through print-data for instance) private static final boolean useFiles = false; public static void main(final String[] args) throws Exception { try { startServer(); System.out.println("Server started, ready to start client test"); // create the reader before printing OK so that if the test is quick // we will still capture the STOP message sent by the client InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.println("OK"); String line = null; while ((line = br.readLine()) != null) { if ("STOP".equals(line.trim())) { stopServer(); System.out.println("Server stopped"); System.exit(0); } else { // stop anyway but with an error status System.exit(1); } } } catch (Throwable t) { t.printStackTrace(); String allStack = t.getCause().getMessage() + "|"; StackTraceElement[] stackTrace = t.getCause().getStackTrace(); for (StackTraceElement stackTraceElement : stackTrace) { allStack += stackTraceElement.toString() + "|"; } System.out.println(allStack); System.out.println("KO"); System.exit(1); } } public static ActiveMQServer startServer() throws Exception { if (server == null) { Configuration config = new ConfigurationImpl().addAcceptorConfiguration("netty", "tcp://localhost:61616").setSecurityEnabled(false).addConnectorConfiguration("netty", "tcp://localhost:61616"); File dataPlace = new File("./target/dataJoram"); FileUtil.deleteDirectory(dataPlace); config.setJournalDirectory(new File(dataPlace, "./journal").getAbsolutePath()). setPagingDirectory(new File(dataPlace, "./paging").getAbsolutePath()). setLargeMessagesDirectory(new File(dataPlace, "./largemessages").getAbsolutePath()). setBindingsDirectory(new File(dataPlace, "./bindings").getAbsolutePath()).setPersistenceEnabled(true); // disable server persistence since JORAM tests do not restart server server = ActiveMQServers.newActiveMQServer(config, useFiles); serverManager = new JMSServerManagerImpl(server); serverManager.start(); } return server; } public static void stopServer() throws Exception { if (server != null) { serverManager.stop(); } server = null; serverManager = null; } // Constructors -------------------------------------------------- // Public -------------------------------------------------------- // Package protected --------------------------------------------- // Protected ----------------------------------------------------- // Private ------------------------------------------------------- // Inner classes ------------------------------------------------- }