import java.net.URL;
import java.sql.Connection;
import java.sql.SQLException;
-import java.util.EventListener;
import java.util.Set;
import javax.naming.NamingException;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
import javax.sql.DataSource;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.ParseException;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
+import org.apache.log4j.PatternLayout;
+import org.apache.log4j.RollingFileAppender;
import org.eclipse.jetty.jmx.MBeanContainer;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
private static final String DATASOURCE_BEANDEF_FILE = "datasources.xml";
private static final String USERHOME_CDM_LIBRARY_PATH = System.getProperty("user.home")+File.separator+".cdmLibrary"+File.separator;
private static final String TMP_PATH = USERHOME_CDM_LIBRARY_PATH + "server" + File.separator;
+ private static final String LOG_PATH = USERHOME_CDM_LIBRARY_PATH + "log" + File.separator;
private static final String APPLICATION_NAME = "CDM Server";
private static final String WAR_POSTFIX = ".war";
private static final File CDM_WEBAPP_TEMP_FOLDER = new File(TMP_PATH + CDM_WEBAPP_WAR_NAME);
private static final String ATTRIBUTE_JDBC_JNDI_NAME = "cdm.jdbcJndiName";
+ private static final String CDM_LOGFILE = "cdm.logfile";
private static final int KB = 1024;
private void startServer() throws IOException,
FileNotFoundException, Exception, InterruptedException {
+
+
+ //assure LOG_PATH exists
+ File logPath = new File(LOG_PATH);
+ if(!logPath.exists()){
+ FileUtils.forceMkdir(new File(LOG_PATH));
+ }
+
+ //append logger
+ configureFileLogger();
+
logger.info("Starting "+APPLICATION_NAME);
logger.info("Using " + System.getProperty("user.home") + " as home directory. Can be specified by -Duser.home=<FOLDER>");
}
tempDir = null;
+
// WARFILE
if(cmdLine.hasOption(WEBAPP.getOpt())){
webappFile = new File(cmdLine.getOptionValue(WEBAPP.getOpt()));
System.exit(0);
}
+ /**
+ * Configueres and adds a {@link RollingFileAppender} to the root logger
+ *
+ * The log files of the cdm-remote instances are configured by the
+ * {@link eu.etaxonomy.cdm.remote.config.LoggingConfigurer}
+ */
+ private void configureFileLogger() {
+
+ PatternLayout layout = new PatternLayout("%d %p [%c] - %m%n");
+ try {
+ String logFile = LOG_PATH + File.separator + "cdmserver.log";
+ RollingFileAppender appender = new RollingFileAppender(layout, logFile);
+ appender.setMaxBackupIndex(3);
+ appender.setMaxFileSize("250MB");
+ Logger.getRootLogger().addAppender(appender);
+ logger.info("logging to :" + logFile);
+ } catch (IOException e) {
+ logger.error("Creating RollingFileAppender failed:", e);
+ }
+ }
+
private void addCdmServerContexts(boolean austostart) throws IOException {
for(CdmInstanceProperties conf : configAndStatus){
cdmWebappContext.setAttribute(ATTRIBUTE_JDBC_JNDI_NAME, conf.getJdbcJndiName());
setWebApp(cdmWebappContext, webappFile);
+ cdmWebappContext.setAttribute(CDM_LOGFILE,
+ LOG_PATH + File.separator + "cdm-"
+ + conf.getDataSourceName() + ".log");
+
if(webappFile.isDirectory() && isRunningFromSource()){
/*
* the system classloader would load these resources.
*/
logger.info("Running webapp from source folder, thus adding java.class.path to WebAppClassLoader");
+
+ WebAppClassLoader classLoader = new WebAppClassLoader(cdmWebappContext);
+
String classPath = System.getProperty("java.class.path");
- WebAppClassLoader classLoader = new WebAppClassLoader(cdmWebappContext);
classLoader.addClassPath(classPath);
cdmWebappContext.setClassLoader(classLoader);
}
"For testing you can use the following jvm options:\n" +\r
" -Dcom.sun.management.jmxremote.ssl=false\n" +\r
" -Dcom.sun.management.jmxremote.authenticate=false\n" +\r
- " -Dcom.sun.management.jmxremote.port=9999\n" );\r
+ " -Dcom.sun.management.jmxremote.port=9999" );\r
\r
@SuppressWarnings("static-access")\r
public static final Option WEBAPP = OptionBuilder\r
.withArgName("file")\r
.hasArg()\r
.withDescription( "use the specified webapplication this either can be a compressed war or extracted file. " +\r
- "If this options is used extraction of the war from the cdmserver jar file is omitted." +\r
- "Developers can run the server completely from the traget folder or completly from source " +\r
- "when using the following paths: \n" +\r
- "'{cdmlib-project-root}/cdmlib-remote/target/cdmserver' " +\r
- "'{cdmlib-project-root}/cdmlib-remote/src/main/webapp' " )\r
+ "If this option is used extraction of the war from the cdmserver jar file is omitted." +\r
+ "Using the following paths developers can run the server completely from the target folder or completely from source:\n" +\r
+ "'{cdmlib-project-root}/cdmlib-remote/target/cdmserver'\n " +\r
+ "'{cdmlib-project-root}/cdmlib-remote/src/main/webapp'" )\r
.create("webapp");\r
\r
@SuppressWarnings("static-access")\r
# java -Dlog4j.configDebug=true\r
#\r
\r
-log4j.rootLogger=WARN, stdout, logfile\r
+log4j.rootLogger= WARN, stdout\r
\r
\r
log4j.appender.stdout=org.apache.log4j.ConsoleAppender\r
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout\r
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n\r
\r
-log4j.appender.logfile=org.apache.log4j.RollingFileAppender\r
-log4j.appender.logfile.File=${user.home}/.cdmLibrary/cdmserver.log\r
-log4j.appender.logfile.MaxFileSize=512KB\r
-# Keep three backup files.\r
-log4j.appender.logfile.MaxBackupIndex=3\r
-# Pattern to output: date priority [category] - message\r
-log4j.appender.logfile.layout=org.apache.log4j.PatternLayout\r
-log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n\r
+##\r
+## NOTICE !!!!\r
+## no need to configure a FileAppender here\r
+## this is done in Bootloader.class for you\r
+##\r
\r
\r
###\r