Repository: ode Updated Branches: refs/heads/ODE-1060 [created] bc2c1c6fe
http://git-wip-us.apache.org/repos/asf/ode/blob/cd6efc8e/tomee/src/main/java/org/apache/ode/tomee/TomeeLauncher.java ---------------------------------------------------------------------- diff --git a/tomee/src/main/java/org/apache/ode/tomee/TomeeLauncher.java b/tomee/src/main/java/org/apache/ode/tomee/TomeeLauncher.java new file mode 100644 index 0000000..068423a --- /dev/null +++ b/tomee/src/main/java/org/apache/ode/tomee/TomeeLauncher.java @@ -0,0 +1,141 @@ +/* + * 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.ode.tomee; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Properties; + +import org.apache.tomee.embedded.Configuration; +import org.apache.tomee.embedded.Container; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TomeeLauncher { + private static final Logger log = LoggerFactory.getLogger(TomeeLauncher.class); + + private Properties properties = new Properties(); + private File odeTomeeHomeDir = null; + private File odeTomeeConfDir = null; + + Container container = null; + + public TomeeLauncher(String homeDir) { + this.odeTomeeHomeDir = new File(homeDir); + } + + public void initialize() throws Exception { + log.info("Class {} loaded by {}",TomeeLauncher.class, TomeeLauncher.class.getClassLoader()); + + if(!odeTomeeHomeDir.exists()) { + throw new Exception("ODE home directory doesn't exist"); + } + + this.odeTomeeConfDir = new File(odeTomeeHomeDir,"conf"); + + if(!odeTomeeConfDir.exists()) { + throw new Exception("Tomee conf directory doesn't exist"); + } + + properties = loadConfigFile(new File(odeTomeeConfDir,Constants.ODE_TOMEE_CONFIG)); + + Configuration configuration = setupConfiguration(properties); + setupContiner(configuration); + } + + protected Configuration setupConfiguration(Properties properties) { + Configuration configuration = new Configuration(); + + configuration.setDir(properties.getProperty(Constants.DIR, new File(odeTomeeHomeDir,"work").getAbsolutePath())); + configuration.setHost(properties.getProperty(Constants.HOST,"localhost")); + configuration.setHttp2(Boolean.valueOf(properties.getProperty(Constants.HTTP2,"false"))); + configuration.setHttpPort(Integer.valueOf(properties.getProperty(Constants.HTTP_PORT,"8080"))); + configuration.setHttpsPort(Integer.valueOf(properties.getProperty(Constants.HTTPS_PORT,"8443"))); + configuration.setKeepServerXmlAsThis(Boolean.valueOf(properties.getProperty(Constants.KEEP_SERVER_XML_AS_THIS,"true"))); + configuration.setKeyAlias(properties.getProperty(Constants.KEY_ALIAS)); + configuration.setKeystoreFile(properties.getProperty(Constants.KEY_STORE_FILE)); + configuration.setKeystorePass(properties.getProperty(Constants.KEY_STAORE_PASS)); + configuration.setKeystoreType(properties.getProperty(Constants.KEY_STORE_TYPE,"JKS")); + + Properties tomeeSystemProperties = loadConfigFile(new File(odeTomeeConfDir,Constants.TOMEE_SYSTEM_CONFIG)); + + tomeeSystemProperties.setProperty("openejb.conf.file", new File(odeTomeeConfDir,Constants.TOMEE_XML).getAbsolutePath()); + + configuration.setProperties(tomeeSystemProperties); + configuration.setQuickSession(Boolean.valueOf(properties.getProperty(Constants.QUICK_SESSION,"false"))); + configuration.setServerXml(properties.getProperty(Constants.SERVER_XML,new File(odeTomeeConfDir,Constants.SERVER_XML).getAbsolutePath())); + configuration.setSkipHttp(Boolean.valueOf(properties.getProperty(Constants.SKIP_HTTP,"false"))); + configuration.setSsl(Boolean.valueOf(properties.getProperty(Constants.SSL,"false"))); + configuration.setSslProtocol(properties.getProperty(Constants.SSL_PROPTOCOL)); + configuration.setStopPort(Integer.valueOf(properties.getProperty(Constants.STOP_PORT,"8005"))); + configuration.setWebResourceCached(Boolean.valueOf(properties.getProperty(Constants.WEB_RESOURCE_CACHED,"false"))); + configuration.setWebXml(properties.getProperty(Constants.WEB_XML,new File(odeTomeeConfDir,Constants.WEB_XML).getAbsolutePath())); + + return configuration; + } + + protected Container setupContiner(Configuration configuration) { + this.container = new Container(); + container.setup(configuration); + return container; + } + + public void start() throws Exception { + if(container != null) { + container.start(); + } + } + + public void stop() throws Exception { + if(container != null) + container.stop(); + } + + public void deploy(File application, String context) throws Exception { + container.deploy(context, application, true); + container.await(); + } + + private Properties loadConfigFile(File configFile) { + FileInputStream io = null; + Properties properties = new Properties(); + + if(configFile != null && configFile.exists()) { + try { + io = new FileInputStream(configFile); + properties.load(io); + } catch (FileNotFoundException e) { + log.warn("Configuration file not found {}", configFile); + } catch (IOException e) { + log.warn("Error reading configuration file {}", configFile); + } finally { + if(io != null) { + try { + io.close(); + } catch (IOException e) { + } + } + } + } + return properties; + } +}
