in tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java [722:1009]
public void installConfigFiles(final boolean builtIn) {
final File openejbCoreJar = paths.getOpenEJBCoreJar();
final File confDir = paths.getCatalinaConfDir();
final Alerts alerts = this.alerts;
if (openejbCoreJar == null) {
// the core jar contains the config files
return;
}
try (final JarFile coreJar = new JarFile(openejbCoreJar)) {
//
// conf/tomee.xml
//
final File openEjbXmlFile = new File(confDir, "tomee.xml");
if (!openEjbXmlFile.exists()) {
// read in the openejb.xml file from the openejb core jar
final String openEjbXml = Installers.readEntry(coreJar, "default.openejb.conf", alerts);
if (openEjbXml != null) {
if (Installers.writeAll(openEjbXmlFile, openEjbXml.replace("<openejb>", "<tomee>").replace("</openejb>", "</tomee>"), alerts)) {
alerts.addInfo("Copy tomee.xml to conf");
}
}
}
} catch (final IOException e) {
return;
}
// conf/logging.properties
// now we are using tomcat one of jdk one by default
//
final String openejbLoggingProps = "################################\r\n" +
"# OpenEJB/TomEE specific loggers\r\n" +
"################################\r\n" +
"#\r\n" +
"# ACTIVATE LEVEL/HANDLERS YOU WANT\r\n" +
"# IF YOU ACTIVATE 5tomee.org.apache.juli.FileHandler\r\n" +
"# ADD IT TO handlers LINE LIKE:\r\n" +
"#\r\n" +
"# handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"#\r\n" +
"# LEVELS:\r\n" +
"# =======\r\n" +
"#\r\n" +
"# OpenEJB.level = WARNING\r\n" +
"# OpenEJB.options.level = INFO\r\n" +
"# OpenEJB.server.level = INFO\r\n" +
"# OpenEJB.startup.level = INFO\r\n" +
"# OpenEJB.startup.service.level = WARNING\r\n" +
"# OpenEJB.startup.config.level = INFO\r\n" +
"# OpenEJB.hsql.level = INFO\r\n" +
"# Transaction.level = WARNING\r\n" +
"# org.apache.activemq.level = SEVERE\r\n" +
"# org.apache.geronimo.level = SEVERE\r\n" +
"# openjpa.level = WARNING\r\n" +
"# OpenEJB.cdi.level = INFO\r\n" +
"# org.apache.webbeans.level = INFO\r\n" +
"# org.apache.openejb.level = FINE\r\n" +
"#\r\n" +
"# HANDLERS:\r\n" +
"# =========\r\n" +
"#\r\n" +
"# OpenEJB.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# OpenEJB.options.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# OpenEJB.server.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# OpenEJB.startup.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# OpenEJB.startup.service.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# OpenEJB.startup.config.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# OpenEJB.hsql.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# Transaction.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# org.apache.activemq.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# org.apache.geronimo.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# openjpa.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# OpenEJB.cdi.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# org.apache.webbeans.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"# org.apache.openejb.handlers = 5tomee.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler\r\n" +
"#\r\n" +
"# TOMEE HANDLER SAMPLE:\r\n" +
"# =====================\r\n" +
"#\r\n" +
"# 5tomee.org.apache.juli.FileHandler.level = FINEST\r\n" +
"# 5tomee.org.apache.juli.FileHandler.directory = ${catalina.base}/logs\r\n" +
"# 5tomee.org.apache.juli.FileHandler.prefix = tomee.\r\n";
final File loggingPropsFile = new File(confDir, "logging.properties");
String newLoggingProps = null;
if (!loggingPropsFile.exists()) {
newLoggingProps = openejbLoggingProps;
} else {
final String loggingPropsOriginal = Installers.readAll(loggingPropsFile, alerts);
if (!loggingPropsOriginal.toLowerCase().contains("openejb")) {
// append our properties
newLoggingProps = loggingPropsOriginal +
"\r\n\r\n" +
openejbLoggingProps + "\r\n";
}
}
if (builtIn) {
installTomEEJuli(alerts, loggingPropsFile, newLoggingProps);
}
final File openejbSystemProperties = new File(confDir, "system.properties");
if (!openejbSystemProperties.exists()) {
FileWriter systemPropertiesWriter = null;
try {
systemPropertiesWriter = new FileWriter(openejbSystemProperties);
systemPropertiesWriter.write("# Licensed to the Apache Software Foundation (ASF) under one or more\n" +
"# contributor license agreements. See the NOTICE file distributed with\n" +
"# this work for additional information regarding copyright ownership.\n" +
"# The ASF licenses this file to You under the Apache License, Version 2.0\n" +
"# (the \"License\"); you may not use this file except in compliance with\n" +
"# the License. You may obtain a copy of the License at\n" +
"#\n" +
"# http://www.apache.org/licenses/LICENSE-2.0\n" +
"#\n" +
"# Unless required by applicable law or agreed to in writing, software\n" +
"# distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
"# See the License for the specific language governing permissions and\n" +
"# limitations under the License.\n" +
"\n");
systemPropertiesWriter.write("# all this properties are added at JVM system properties at startup\n");
systemPropertiesWriter.write("# here some default Apache TomEE system properties\n");
systemPropertiesWriter.write("# for more information please see http://tomee.apache.org/properties-listing.html\n");
systemPropertiesWriter.write("\n");
systemPropertiesWriter.write(
"# allowed packages to be deserialized, by security we denied all by default, " +
"tune tomee.serialization.class.whitelist packages to change it\n");
systemPropertiesWriter.write("# tomee.remote.support = true\n");
systemPropertiesWriter.write("tomee.serialization.class.blacklist = *\n");
systemPropertiesWriter.write("# tomee.serialization.class.whitelist = my.package\n");
systemPropertiesWriter.write("# Johnzon prevents too big string to be unserialized by default\n");
systemPropertiesWriter.write("# You can either configure it by Mapper/Parser instance or globally\n");
systemPropertiesWriter.write("# With this property:\n");
systemPropertiesWriter.write("# org.apache.johnzon.max-string-length = 8192\n");
systemPropertiesWriter.write("\n");
systemPropertiesWriter.write("# Should a jar with at least one EJB activate CDI for this module?\n");
systemPropertiesWriter.write("# Spec says so but this can imply more (permgen) memory usage\n");
systemPropertiesWriter.write("# openejb.cdi.activated-on-ejb = true\n");
systemPropertiesWriter.write("\n");
systemPropertiesWriter.write("# openejb.check.classloader = false\n");
systemPropertiesWriter.write("# openejb.check.classloader.verbose = false\n");
systemPropertiesWriter.write("\n");
systemPropertiesWriter.write("# Activate EE default resources (ManagedExecutorService, JMSConnectionFactory if JMS is there...)");
systemPropertiesWriter.write("openejb.environment.default = true\n");
systemPropertiesWriter.write("\n");
systemPropertiesWriter.write("# tomee.jaxws.subcontext = webservices\n");
systemPropertiesWriter.write("# tomee.jaxws.oldsubcontext = false\n");
systemPropertiesWriter.write("\n");
systemPropertiesWriter.write("# if you want to propagate a deployment on a cluster when a tomcat cluster is defined\n");
systemPropertiesWriter.write("# tomee.cluster.deployment = false\n");
systemPropertiesWriter.write("\n");
systemPropertiesWriter.write("# openejb.system.apps = true\n");
systemPropertiesWriter.write("# openejb.servicemanager.enabled = true\n");
systemPropertiesWriter.write("# openejb.jmx.active = false\n");
systemPropertiesWriter.write("# openejb.descriptors.output = false\n");
systemPropertiesWriter.write("# openejb.strict.interface.declaration = false\n");
systemPropertiesWriter.write("# openejb.conf.file = conf/tomee.xml\n");
systemPropertiesWriter.write("# openejb.debuggable-vm-hackery = false\n");
systemPropertiesWriter.write("# openejb.validation.skip = false\n");
systemPropertiesWriter.write("# openejb.webservices.enabled = true\n");
systemPropertiesWriter.write("# openejb.validation.output.level = MEDIUM\n");
systemPropertiesWriter.write("# openejb.user.mbeans.list = *\n");
systemPropertiesWriter.write("# openejb.deploymentId.format = {appId}/{ejbJarId}/{ejbName}\n");
systemPropertiesWriter.write("# openejb.jndiname.format = {deploymentId}{interfaceType.annotationName}\n");
systemPropertiesWriter.write("# openejb.deployments.package.include = .*\n");
systemPropertiesWriter.write("# openejb.deployments.package.exclude = \n");
systemPropertiesWriter.write("# openejb.autocreate.jta-datasource-from-non-jta-one = true\n");
systemPropertiesWriter.write("# openejb.altdd.prefix = \n");
systemPropertiesWriter.write("# org.apache.openejb.default.system.interceptors = \n");
systemPropertiesWriter.write("# openejb.jndiname.failoncollision = true\n");
systemPropertiesWriter.write("# openejb.wsAddress.format = /{ejbDeploymentId}\n");
systemPropertiesWriter.write("# org.apache.openejb.server.webservices.saaj.provider = \n");
systemPropertiesWriter.write("# openejb.nobanner = true\n");
systemPropertiesWriter.write("# openejb.offline = false\n");
systemPropertiesWriter.write("# openejb.jmx.active = true\n");
systemPropertiesWriter.write("# openejb.exclude-include.order = include-exclude\n");
systemPropertiesWriter.write("# openejb.additional.exclude =\n");
systemPropertiesWriter.write("# openejb.additional.include =\n");
systemPropertiesWriter.write("# openejb.crosscontext = false\n");
systemPropertiesWriter.write("# openejb.jsessionid-support = \n");
systemPropertiesWriter.write("# openejb.myfaces.disable-default-values = true\n");
systemPropertiesWriter.write("# openejb.web.xml.major = \n");
systemPropertiesWriter.write("# openjpa.Log = \n");
systemPropertiesWriter.write("# openejb.jdbc.log = false\n");
systemPropertiesWriter.write("# jakarta.persistence.provider = org.apache.openjpa.persistence.PersistenceProviderImpl\n");
systemPropertiesWriter.write("# jakarta.persistence.transactionType = \n");
systemPropertiesWriter.write("# jakarta.persistence.jtaDataSource = \n");
systemPropertiesWriter.write("# jakarta.persistence.nonJtaDataSource = \n");
systemPropertiesWriter.write("#\n");
systemPropertiesWriter.write("# Properties for JAS RS\n");
systemPropertiesWriter.write("# openejb.jaxrs.application = \n");
systemPropertiesWriter.write("# openejb.cxf-rs.wadl-generator.ignoreRequests = false\n");
systemPropertiesWriter.write("# openejb.cxf-rs.wadl-generator.ignoreMessageWriters = true\n");
systemPropertiesWriter.write("# Replace the Jonhzon JSON Providers with the following classes [comma seperated, no spaces]\n");
systemPropertiesWriter.write("# openejb.jaxrs.jsonProviders =\n");
systemPropertiesWriter.write("#\n");
systemPropertiesWriter.write("# These properties are only for cxf service (SOAP webservices) and TomEE+\n");
systemPropertiesWriter.write("# If you don't use special tricks and sun default implementation, uncommenting these 4 lines forces TomEE to use it without overhead at all = \n");
systemPropertiesWriter.write("# jakarta.xml.soap.MessageFactory = com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl\n");
systemPropertiesWriter.write("# jakarta.xml.soap.SOAPFactory = com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl\n");
systemPropertiesWriter.write("# jakarta.xml.soap.SOAPConnectionFactory = com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory\n");
systemPropertiesWriter.write("# jakarta.xml.soap.MetaFactory = com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl\n");
final String flavour = properties.getOrDefault("tomee.webapp", "");
if (flavour.contains("microprofile")) {
systemPropertiesWriter.write("#\n");
systemPropertiesWriter.write("# MicroProfile\n");
systemPropertiesWriter.write("tomee.mp.scan = all\n");
}
} catch (final IOException e) {
// ignored, this file is far to be mandatory
} finally {
if (systemPropertiesWriter != null) {
try {
systemPropertiesWriter.close();
} catch (final IOException e) {
// no-op
}
}
}
}
//
// conf/web.xml
//
try (final JarFile openejbTomcatCommonJar = new JarFile(paths.geOpenEJBTomcatCommonJar())) {
final File webXmlFile = new File(confDir, "web.xml");
final String webXml = Installers.readEntry(openejbTomcatCommonJar, "conf/web.xml", alerts);
if (Installers.writeAll(webXmlFile, webXml, alerts)) {
alerts.addInfo("Set jasper in production mode in TomEE web.xml");
}
} catch (final IOException e) {
// no-op
}
//
// conf/catalina.policy
//
// if we can't backup the file, do not modify it
if (!Installers.backup(paths.getCatalinaPolicy() , alerts)) {
return;
}
String catalinaPolicy = Installers.readAll(paths.getCatalinaPolicy(), alerts);
// catalina.policy will be null if we couldn't read the file
if (catalinaPolicy == null) {
return;
}
//Add TomEE-specific policies (see TOMEE-3840)
try {
catalinaPolicy = Installers.replace(catalinaPolicy,
" permission java.util.PropertyPermission \"org.apache.juli.ClassLoaderLogManager.debug\", \"read\";",
" permission java.util.PropertyPermission \"org.apache.juli.ClassLoaderLogManager.debug\", \"read\";",
" permission java.util.PropertyPermission \"catalina.base\", \"read\";",
" permission java.util.PropertyPermission \"catalina.base\", \"read\";\n\n" +
" // TOMEE-3840\n" +
" permission java.util.PropertyPermission \"tomee.skip-tomcat-log\", \"read\";\n" +
" permission java.lang.RuntimePermission \"accessDeclaredMembers\";\n");
} catch (final IOException e) {
alerts.addError("Error adding TomEE specific policies to catalina.policy file", e);
}
// overwrite catalina.policy
if (Installers.writeAll(paths.getCatalinaPolicy(), catalinaPolicy, alerts)) {
alerts.addInfo("Add TomEE specific policies to catalina.policy");
}
}