blob: 068423aad32e5e67c0eece543ebfe5cb319322e6 [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.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;
}
}