diff options
author | Omair Majid <[email protected]> | 2010-11-18 11:12:10 -0500 |
---|---|---|
committer | Omair Majid <[email protected]> | 2010-11-18 11:12:10 -0500 |
commit | 3f351c0718209878b0a3d880d9757ddca90e447e (patch) | |
tree | 14b93db2b7f2159f57c0ac127be72a52848099c0 | |
parent | 16d8875dca7ef93f6c1aea72cf84bb8bb5251722 (diff) |
integrate configurable logging
2010-11-18 Omair Majid <[email protected]>
* netx/net/sourceforge/jnlp/runtime/DeploymentConfiguration.java:
Add KEY_ENABLE_LOGGING.
(loadDefaultProperties): Use KEY_ENABLE_LOGGING.
* netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java: Add
redirectStreams, STDERR_FILE and STDOUT_FILE.
(initialize): Call initializeStreams.
(initializeStreams): New method. Redirects or duplicates stdout and
stderr to the logging files as required.
(setRedirectStreams): New method. Sets whether stdout/stderr streams
should be redirected.
* plugin/icedteanp/java/sun/applet/PluginMain.java:
(PluginMain): Move code for creating logging files into JNLPRuntime.
Call JNLPRuntime.setRedirectStreams to redirect streams.
(TeeOutputStream): Move to its own class.
* netx/net/sourceforge/jnlp/util/TeeOutputStream.java: Moved from
PluginMain into this new class.
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/runtime/DeploymentConfiguration.java | 4 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java | 47 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/util/TeeOutputStream.java | 95 | ||||
-rw-r--r-- | plugin/icedteanp/java/sun/applet/PluginMain.java | 73 |
5 files changed, 167 insertions, 71 deletions
@@ -1,5 +1,24 @@ 2010-11-18 Omair Majid <[email protected]> + * netx/net/sourceforge/jnlp/runtime/DeploymentConfiguration.java: + Add KEY_ENABLE_LOGGING. + (loadDefaultProperties): Use KEY_ENABLE_LOGGING. + * netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java: Add + redirectStreams, STDERR_FILE and STDOUT_FILE. + (initialize): Call initializeStreams. + (initializeStreams): New method. Redirects or duplicates stdout and + stderr to the logging files as required. + (setRedirectStreams): New method. Sets whether stdout/stderr streams + should be redirected. + * plugin/icedteanp/java/sun/applet/PluginMain.java: + (PluginMain): Move code for creating logging files into JNLPRuntime. + Call JNLPRuntime.setRedirectStreams to redirect streams. + (TeeOutputStream): Move to its own class. + * netx/net/sourceforge/jnlp/util/TeeOutputStream.java: Moved from + PluginMain into this new class. + +2010-11-18 Omair Majid <[email protected]> + * NEWS: Update with new interfaces * netx/javax/jnlp/DownloadService2.java: New interface. (ResourceSpec): New class. diff --git a/netx/net/sourceforge/jnlp/runtime/DeploymentConfiguration.java b/netx/net/sourceforge/jnlp/runtime/DeploymentConfiguration.java index 8a83602..20d66e0 100644 --- a/netx/net/sourceforge/jnlp/runtime/DeploymentConfiguration.java +++ b/netx/net/sourceforge/jnlp/runtime/DeploymentConfiguration.java @@ -154,6 +154,8 @@ public final class DeploymentConfiguration { public static final String KEY_SYSTEM_TRUSTED_JSSE_CERTS = "deployment.system.security.trusted.jssecerts"; public static final String KEY_SYSTEM_TRUSTED_CLIENT_CERTS = "deployment.system.security.trusted.clientautcerts"; + public static final String KEY_ENABLE_LOGGING = "deployment.log"; + public static final String KEY_CREATE_DESKTOP_SHORTCUT = "deployment.javaws.shortcut"; public static final String KEY_BROWSER_PATH = "deployment.browser.path"; @@ -375,7 +377,7 @@ public final class DeploymentConfiguration { { "deployment.console.startup.mode", CONSOLE_HIDE }, /* tracing and logging */ { "deployment.trace", String.valueOf(false) }, - { "deployment.log", String.valueOf(false) }, + { KEY_ENABLE_LOGGING, String.valueOf(false) }, /* JNLP association */ { "deployment.javaws.associations", String.valueOf(JNLP_ASSOCIATION_ASK_USER) }, /* desktop integration */ diff --git a/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java b/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java index 2e6aee2..4575334 100644 --- a/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java +++ b/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java @@ -107,6 +107,9 @@ public class JNLPRuntime { /** whether debug mode is on */ private static boolean debug = false; // package access by Boot + /** whether streams should be redirected */ + private static boolean redirectStreams = false; + /** mutex to wait on, for initialization */ public static Object initMutex = new Object(); @@ -119,6 +122,9 @@ public class JNLPRuntime { /** contains the arguments passed to the jnlp runtime */ private static List<String> initialArguments; + public static final String STDERR_FILE = "java.stderr"; + public static final String STDOUT_FILE = "java.stdout"; + /** Username */ public static final String USER = System.getProperty("user.name"); @@ -183,6 +189,8 @@ public class JNLPRuntime { } } + initializeStreams(); + isWebstartApplication = isApplication; //Setting the system property for javawebstart's version. @@ -281,6 +289,34 @@ public class JNLPRuntime { } /** + * Initializes the standard output and error streams, redirecting them or + * duplicating them as required. + */ + private static void initializeStreams() { + Boolean enableLogging = Boolean.valueOf(config + .getProperty(DeploymentConfiguration.KEY_ENABLE_LOGGING)); + if (redirectStreams || enableLogging) { + String logDir = config.getProperty(DeploymentConfiguration.KEY_USER_LOG_DIR); + File errFile = new File(logDir, JNLPRuntime.STDERR_FILE); + errFile.getParentFile().mkdirs(); + File outFile = new File(logDir, JNLPRuntime.STDOUT_FILE); + outFile.getParentFile().mkdirs(); + + try { + if (redirectStreams) { + System.setErr(new PrintStream(new FileOutputStream(errFile))); + System.setOut(new PrintStream(new FileOutputStream(outFile))); + } else { + System.setErr(new TeeOutputStream(new FileOutputStream(errFile), System.err)); + System.setOut(new TeeOutputStream(new FileOutputStream(outFile), System.out)); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** * Gets the Configuration associated with this runtime * @return a {@link DeploymentConfiguration} object that can be queried to * find relevant configuration settings @@ -490,6 +526,17 @@ public class JNLPRuntime { } /** + * Sets whether the standard output/error streams should be redirected to + * the loggging files. + * + * @throws IllegalStateException if the runtime has already been initialized + */ + public static void setRedirectStreams(boolean redirect) { + checkInitialized(); + redirectStreams = redirect; + } + + /** * Sets the default update policy. * * @throws IllegalStateException if caller is not the exit class diff --git a/netx/net/sourceforge/jnlp/util/TeeOutputStream.java b/netx/net/sourceforge/jnlp/util/TeeOutputStream.java new file mode 100644 index 0000000..e6041a9 --- /dev/null +++ b/netx/net/sourceforge/jnlp/util/TeeOutputStream.java @@ -0,0 +1,95 @@ +/* TeeOutputStream.java + Copyright (C) 2010 Red Hat + +This file is part of IcedTea. + +IcedTea is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +IcedTea is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with IcedTea; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package net.sourceforge.jnlp.util; + +import java.io.FileOutputStream; +import java.io.PrintStream; + +/** + * Behaves like the 'tee' command, sends output to both actual std stream and a + * file + */ +public final class TeeOutputStream extends PrintStream { + + // Everthing written to TeeOutputStream is written to this file + PrintStream logFile; + + public TeeOutputStream(FileOutputStream fileOutputStream, + PrintStream stdStream) { + super(stdStream); + logFile = new PrintStream(fileOutputStream); + } + + @Override + public boolean checkError() { + boolean thisError = super.checkError(); + boolean fileError = logFile.checkError(); + + return thisError || fileError; + } + + @Override + public void close() { + logFile.close(); + super.close(); + } + + @Override + public void flush() { + logFile.flush(); + super.flush(); + } + + /* + * The big ones: these do the actual writing + */ + + @Override + public void write(byte[] buf, int off, int len) { + logFile.write(buf, off, len); + + super.write(buf, off, len); + } + + @Override + public void write(int b) { + logFile.write(b); + + super.write(b); + } +} diff --git a/plugin/icedteanp/java/sun/applet/PluginMain.java b/plugin/icedteanp/java/sun/applet/PluginMain.java index 8834643..613a8f1 100644 --- a/plugin/icedteanp/java/sun/applet/PluginMain.java +++ b/plugin/icedteanp/java/sun/applet/PluginMain.java @@ -121,25 +121,14 @@ public class PluginMain connect(inPipe, outPipe); + // must be called before JNLPRuntime.initialize() + JNLPRuntime.setRedirectStreams(redirectStreams); + securityContext = new PluginAppletSecurityContext(0); securityContext.prePopulateLCClasses(); securityContext.setStreamhandler(streamHandler); AppletSecurityContextManager.addContext(0, securityContext); - String logDir = JNLPRuntime.getConfiguration().getProperty(DeploymentConfiguration.KEY_USER_LOG_DIR); - try { - File errFile = new File(logDir, PLUGIN_STDERR_FILE); - errFile.getParentFile().mkdirs(); - File outFile = new File(logDir, PLUGIN_STDOUT_FILE); - outFile.getParentFile().mkdirs(); - - System.setErr(new TeeOutputStream(new FileOutputStream(errFile), System.err)); - System.setOut(new TeeOutputStream(new FileOutputStream(outFile), System.out)); - } catch (Exception e) { - PluginDebug.debug("Unable to redirect streams"); - e.printStackTrace(); - } - PluginAppletViewer.setStreamhandler(streamHandler); PluginAppletViewer.setPluginCallRequestFactory(new PluginCallRequestFactory()); @@ -244,61 +233,5 @@ public class PluginMain return auth; } } - - /** - * Behaves like the 'tee' command, sends output to both actual std stream and a - * file - */ - class TeeOutputStream extends PrintStream { - - // Everthing written to TeeOutputStream is written to this file - PrintStream logFile; - - public TeeOutputStream(FileOutputStream fileOutputStream, - PrintStream stdStream) { - super(stdStream); - logFile = new PrintStream(fileOutputStream); - } - - @Override - public boolean checkError() { - boolean thisError = super.checkError(); - boolean fileError = logFile.checkError(); - - return thisError || fileError; - } - - @Override - public void close() { - logFile.close(); - super.close(); - } - - @Override - public void flush() { - logFile.flush(); - super.flush(); - } - - /* - * The big ones: these do the actual writing - */ - - @Override - public void write(byte[] buf, int off, int len) { - logFile.write(buf, off, len); - - if (!redirectStreams) - super.write(buf, off, len); - } - - @Override - public void write(int b) { - logFile.write(b); - - if (!redirectStreams) - super.write(b); - } - } } |