All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.openejb.test.RiTestServer Maven / Gradle / Ivy

There is a newer version: 10.0.0
Show newest version
/**
 * 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.openejb.test;

import java.io.DataInputStream;
import java.io.File;
import java.net.URL;
import java.util.Properties;

import javax.naming.Context;

/**
 * The Client test suite needs the following environment variables
 * to be set before it can be run.
 * 

* test.home * server.classpath */ public class RiTestServer implements TestServer { protected Process server; protected boolean startServerProcess; protected String configFile; protected String serverClassName = " org.apache.openejb.ri.server.Server "; protected String classPath; protected DataInputStream in; protected DataInputStream err; protected String testHomePath; protected File testHome; /** * The environment variable test.home sould be set * to the base directory where the test suite is located. */ public static final String TEST_HOME = "test.home"; public static final String SERVER_CLASSPATH = "server.classpath"; public static final String SERVER_CONFIG = "test.server.config"; public static final String START_SERVER_PROCESS = "test.start.server.process"; public static final String BAD_ENVIRONMENT_ERROR = "The following environment variables must be set before running the test suite:\n"; static { System.setProperty("noBanner", "true"); } public RiTestServer() { } public void init(final Properties props) { try { /* [DMB] Temporary fix */ try { System.setSecurityManager(new TestSecurityManager()); } catch (final Exception e) { e.printStackTrace(); } /* [DMB] Temporary fix */ final String tmp = props.getProperty(START_SERVER_PROCESS, "true").trim(); startServerProcess = "true".equalsIgnoreCase(tmp); /* If we will not be starting process for the * server than we don't need to read in the other * properties */ if (!startServerProcess) return; testHomePath = props.getProperty(TEST_HOME); classPath = props.getProperty(SERVER_CLASSPATH); configFile = props.getProperty(SERVER_CONFIG); checkEnvironment(); testHome = new File(testHomePath); testHome = testHome.getAbsoluteFile(); testHomePath = testHome.getAbsolutePath(); prepareServerClasspath(); } catch (final Exception e) { e.printStackTrace(); System.exit(-1); } } public void destroy() { } /** * Starts and Ri Server with the configuration file from * the properties used to create this RiTestServer. * * @param confFileName */ public void start() { if (!startServerProcess) return; final String command = "java -classpath " + classPath + " " + serverClassName + " " + configFile; try { server = Runtime.getRuntime().exec(command); in = new DataInputStream(server.getInputStream()); err = new DataInputStream(server.getErrorStream()); while (true) { try { final String line = in.readLine(); System.out.println(line); if (line == null || "[RI Server] Ready!".equals(line)) break; } catch (final Exception e) { break; } } final Thread t = new Thread(new Runnable() { public void run() { while (true) { try { final String line = in.readLine(); if (line == null) break; System.out.println(line); } catch (final Exception e) { break; } } } }); t.start(); final Thread t2 = new Thread(new Runnable() { public void run() { while (true) { try { final String line = err.readLine(); if (line == null) break; // System.out.println(line); } catch (final Exception e) { break; } } } }); t2.start(); } catch (final Exception e) { e.printStackTrace(); } } public void stop() { if (!startServerProcess) return; if (server != null) server.destroy(); server = null; try { in.close(); err.close(); } catch (final Exception e) { } } public Properties getContextEnvironment() { final Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.ri.server.RiInitCtxFactory"); try { properties.put(Context.PROVIDER_URL, new URL("http", "127.0.0.1", 1098, "")); } catch (final Exception e) { } //properties.put(Context.SECURITY_PRINCIPAL, "STATEFUL_TEST_CLIENT"); //properties.put(Context.SECURITY_CREDENTIALS, "STATEFUL_TEST_CLIENT"); return properties; } //========================================== // Methods supporting this implementation // of the TestServer interface // private String getConfFilePath(final String confFileName) { final String str = getConfFile(confFileName).getAbsolutePath(); return str; } private File getConfFile(final String confFileName) { return new File(testHome, confFileName); } private void checkEnvironment() { if (testHomePath == null || classPath == null || configFile == null) { String error = BAD_ENVIRONMENT_ERROR; error += (testHomePath == null) ? TEST_HOME + "\n" : ""; error += (classPath == null) ? SERVER_CLASSPATH + "\n" : ""; error += (configFile == null) ? SERVER_CONFIG + "\n" : ""; throw new RuntimeException(error); } } private void prepareServerClasspath() { final char PS = File.pathSeparatorChar; final char FS = File.separatorChar; final String javaTools = System.getProperty("java.home") + FS + "lib" + FS + "tools.jar"; classPath = classPath.replace('/', FS); classPath = classPath.replace(':', PS); classPath += PS + javaTools; } // // Methods supporting this implementation // of the TestServer interface //========================================== }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy