[rfc] [icedtea-web] better error reporting for LaunchException in plugin
Jiri Vanek
jvanek at redhat.com
Wed Jan 30 04:42:31 PST 2013
On 01/29/2013 05:01 PM, Adam Domurad wrote:
> On 01/21/2013 06:35 AM, Jiri Vanek wrote:
>> Launch errors are thrown from netx, and printed out .. somewhere. At the end plugin (correctly)
>> fails with NPE.
>> It Is not nice. Eg in SplashError dialogue they can not be shown.
>>
>> I have added static accumulator for LaunchErrors (== all errors preceding npe in plugin) and then
>> I'm adding this chain of exception to Splash error report.
>>
>> It is quite useful - see example - but there is one pitfall. As accumulator being static, it is
>> cumulating errors from all running applets :(
>> However I have not found a way how to distinguish between individual applets :( (any idea welcomed!)
>
> Hmm. Well each applet has an associated thread-group -- you could use that to determine the current
> applet.
Tried.. Do not work :((
The best will be to know jnlpFile(or pluginbridge) and then have map jnlpFile,LaunchError - however,
see below.
>
> As well, I do not like adding a static accumulator to each constructor -- I would prefer a special
it is not so nasty :)
> launch error utility class that is always used, that takes a JNLPFile (in cases where its available)
> -or- tries to determine one by the current ThreadGroup. This will unfortunately need some additional
> 'infrastructure'.
Yap, then there is question if such a infrastructure and following refactoring is worthy - IMHO is
not:(
So just mior fixed patch attached.
>
>> I have added small warkaround with timestamps and localised explanation.. and.. it is still
>> better then nothing :)
>>
>>
>> J.
>
> I know you want this in as 'better than nothing' but it does seem too hackish to me :-/ IMO
> constructors should not have such side-effects.
It is not side effect. This is quite common.
I agree it is hackich. But not so bad as you consider it for :))
> However I am all for LaunchException's capturing a time-stamp in their constructor.
>
>>
>>
>> **example**
>>
>> So now instead of plain, nothing saying
>> "IcedTea-Web Plugin version: 1.4pre+rb646c8b9c2e2+
>> Mon Jan 21 12:29:17 CET 2013
>> java.lang.NullPointerException
>> at net.sourceforge.jnlp.NetxPanel.runLoader(NetxPanel.java:130)
>> at sun.applet.AppletPanel.run(AppletPanel.java:380)
>> at java.lang.Thread.run(Thread.java:679)"
>>
>> Is there:
>>
>> IcedTea-Web Plugin version: 1.4pre+rb646c8b9c2e2+
>> Mon Jan 21 12:29:17 CET 2013
>> java.lang.NullPointerException
>> at net.sourceforge.jnlp.NetxPanel.runLoader(NetxPanel.java:130)
>> at sun.applet.AppletPanel.run(AppletPanel.java:380)
>> at java.lang.Thread.run(Thread.java:679)
>>
>> Chain:
>> 1) at Mon Jan 21 12:27:27 CET 2013
>> net.sourceforge.jnlp.LaunchException: Fatal: Application Error: The applet was unsigned. The
>> applet was unsigned, and the security policy prevented it from running.
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeResources(JNLPClassLoader.java:680)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.<init>(JNLPClassLoader.java:240)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:374)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:347)
>> at net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:751)
>> at net.sourceforge.jnlp.Launcher.getApplet(Launcher.java:713)
>> at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:942)
>> 2) at Mon Jan 21 12:27:27 CET 2013
>> net.sourceforge.jnlp.LaunchException: Fatal: Initialization Error: Could not initialize applet.
>> at net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:784)
>> at net.sourceforge.jnlp.Launcher.getApplet(Launcher.java:713)
>> at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:942)
>> Caused by: net.sourceforge.jnlp.LaunchException: Fatal: Application Error: The applet was
>> unsigned. The applet was unsigned, and the security policy prevented it from running.
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeResources(JNLPClassLoader.java:680)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.<init>(JNLPClassLoader.java:240)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:374)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:347)
>> at net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:751)
>> ... 2 more
>> 3) at Mon Jan 21 12:27:29 CET 2013
>> net.sourceforge.jnlp.LaunchException: Fatal: Application Error: The applet was unsigned. The
>> applet was unsigned, and the security policy prevented it from running.
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeResources(JNLPClassLoader.java:680)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.<init>(JNLPClassLoader.java:240)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:374)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:347)
>> at net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:751)
>> at net.sourceforge.jnlp.Launcher.getApplet(Launcher.java:713)
>> at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:942)
>> 4) at Mon Jan 21 12:27:29 CET 2013
>> net.sourceforge.jnlp.LaunchException: Fatal: Initialization Error: Could not initialize applet.
>> at net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:784)
>> at net.sourceforge.jnlp.Launcher.getApplet(Launcher.java:713)
>> at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:942)
>> Caused by: net.sourceforge.jnlp.LaunchException: Fatal: Application Error: The applet was
>> unsigned. The applet was unsigned, and the security policy prevented it from running.
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeResources(JNLPClassLoader.java:680)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.<init>(JNLPClassLoader.java:240)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:374)
>> at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:347)
>> at net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:751)
>> ... 2 more
>>
>
> Comments inline.
>
>
>> diff -r b646c8b9c2e2 netx/net/sourceforge/jnlp/LaunchException.java
>> --- a/netx/net/sourceforge/jnlp/LaunchException.java Fri Jan 18 12:49:37 2013 +0100
>> +++ b/netx/net/sourceforge/jnlp/LaunchException.java Mon Jan 21 12:20:20 2013 +0100
>> @@ -16,6 +16,10 @@
>>
>> package net.sourceforge.jnlp;
>>
>> +import java.util.Date;
>> +import java.util.LinkedList;
>> +import java.util.List;
>> +
>> /**
>> * Thrown when a JNLP application, applet, or installer could not
>> * be created.
>> @@ -25,6 +29,29 @@
>> */
>> public class LaunchException extends Exception {
>>
>> +
>> + public static class LaunchExceptionWithStamp{
>> + private final LaunchException ex;
>> + private final Date stamp;
>> +
>> + private LaunchExceptionWithStamp(LaunchException ex) {
>> + this.ex=ex;
>> + this.stamp=new Date();
>> + }
>> +
>> + public LaunchException getEx() {
>> + return ex;
>> + }
>> +
>> + public Date getStamp() {
>> + return stamp;
>> + }
>> +
>> +
>> +
>> + }
>> + public static final List<LaunchExceptionWithStamp> launchExceptionChain = new
>> LinkedList<LaunchExceptionWithStamp>();
>> +
>> private static final long serialVersionUID = 7283827853612357423L;
>>
>> /** the file being launched */
>> @@ -54,6 +81,7 @@
>> this.summary = summary;
>> this.description = description;
>> this.severity = severity;
>> + saveLaunchException(this);
>
> Bit too much of a hack, for me.\
it is really not so evil:)
>
>> }
>>
>> /**
>> @@ -61,6 +89,7 @@
>> */
>> public LaunchException(Throwable cause) {
>> super(cause);
>> + saveLaunchException(this);
>> }
>>
>> /**
>> @@ -68,6 +97,7 @@
>> */
>> public LaunchException(String message, Throwable cause) {
>> super(message, cause);
>> + saveLaunchException(this);
>> }
>>
>> /**
>> @@ -78,6 +108,7 @@
>> */
>> public LaunchException(String message) {
>> super(message);
>> + saveLaunchException(this);
>> }
>>
>> /**
>> @@ -117,4 +148,9 @@
>> return severity;
>> }
>>
>> + private void saveLaunchException(LaunchException ex) {
>
> Should be synchronized, surely ?
agree
>
>> + launchExceptionChain.add(new LaunchExceptionWithStamp(ex));
>> +
>> + }
>> +
>> }
>> diff -r b646c8b9c2e2 netx/net/sourceforge/jnlp/resources/Messages.properties
>> --- a/netx/net/sourceforge/jnlp/resources/Messages.properties Fri Jan 18 12:49:37 2013 +0100
>> +++ b/netx/net/sourceforge/jnlp/resources/Messages.properties Mon Jan 21 12:20:20 2013 +0100
>> @@ -478,3 +478,4 @@
>> SPLASHdefaultHomepage = Unspecified homepage, verify source rather
>> SPLASHerrorInInformation = Error during loading of information element, verify source rather
>> SPLASHmissingInformation = Information element is missing, verify source rather
>> +SPLASHchainWas = There is list of exceptions which provided start of you applet. Please note,
>> those exceptions can be from multiple applets. For good bug report, it is wothy to run your applet
>> isolated.
>
> Hm, s/wothy/worthy/, but probably better is:
> 'This is the list of exceptions that occurred launching your applet' ... 'For a good bug report, be
> sure to run only one applet.'
As always, As you wish.
>
>> diff -r b646c8b9c2e2 netx/net/sourceforge/jnlp/resources/Messages_cs_CZ.properties
>> --- a/netx/net/sourceforge/jnlp/resources/Messages_cs_CZ.properties Fri Jan 18 12:49:37 2013 +0100
>> +++ b/netx/net/sourceforge/jnlp/resources/Messages_cs_CZ.properties Mon Jan 21 12:20:20 2013 +0100
>> @@ -468,4 +468,5 @@
>> SPLASHanotherInfo= Dal\u0161\u00ed dostupn\u00e9 informace
snip
J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: moreErrorReporting2.patch
Type: text/x-patch
Size: 8995 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/distro-pkg-dev/attachments/20130130/21357496/moreErrorReporting2.patch
More information about the distro-pkg-dev
mailing list