Thank you Alan and Kumar for your review.
Here is the updated webrev: http://cr.openjdk.java.net/~rpatil/8167063/webrev.03

Changes done:
1. LinkageError in method loadMainClass is handled separately and with a new 
message in launcher.properties
2. Test case updated to print the error message(even when test passes) and to 
print the final test result message as suggested by Kumar.


Regards,
Ramanand.

-----Original Message-----
From: Kumar Srinivasan 
Sent: Wednesday, January 25, 2017 9:30 PM
To: Ramanand Patil <ramanand.pa...@oracle.com>
Cc: Alan Bateman <alan.bate...@oracle.com>; core-libs-dev 
<core-libs-dev@openjdk.java.net>
Subject: Re: RFR: 8167063: spurious message "A JNI error has occurred" if 
start-class cannot be initialized

  116         if (result.isOK()) {
  117             throw new Exception("Test Passed Unexpectedly!");
  118         } else if (result.contains("JNI error")) {
  119             result.testOutput.forEach(System.err::println);
  120             throw new Exception("Test Failed with JNI error!");
  121         }
  + 122  System.out.println("Test passes, failed with expected error message");

As a sanity I would add the above. This will make it clear to someone trying to 
triage an error.

Kumar

On 1/25/2017 2:10 AM, Ramanand Patil wrote:
> Hi Kumar,
> Thank you for the review and suggestions for the test case.
> Here is the updated Webrev: 
> http://cr.openjdk.java.net/~rpatil/8167063/webrev.02/
>
>
> Regards,
> Ramanand.
>
> -----Original Message-----
> From: Kumar Srinivasan
> Sent: Tuesday, January 24, 2017 2:50 AM
> To: Ramanand Patil <ramanand.pa...@oracle.com>
> Cc: Alan Bateman <alan.bate...@oracle.com>; core-libs-dev 
> <core-libs-dev@openjdk.java.net>
> Subject: Re: RFR: 8167063: spurious message "A JNI error has occurred" 
> if start-class cannot be initialized
>
>
> Hi Ramanand,
> test/tools/launcher/LauncherMessageTest.java
>
> 1)
>
> 116         String[] commands = {"java", "--module-path", modules.getPath(),
> 117             "-m", "mod.b/pkgB.ClassB"};
>
> The execution PATH may or may not contain the JAVA_HOME_UNDER_TEST/bin, so 
> the right "java" may not be picked up,  suggest using the TestHelper's 
> javaCmd field that will be set correctly.
> Used TestHelper.javaCmd for instead of "java"
>
> 2)
>
>    122         if (!result.isOK() && result.contains("JNI error")) {
>    123             result.testOutput.forEach(System.err::println);
>    124             throw new RuntimeException("Test Failed with JNI error!");
>    125         } else {
>    126             System.out.println("Test Passed...");
>    127         }
>
> The problem with 122 if it the test returns back with non-zero code, it will 
> still fail with "Test Failed with JNI error", I prefer it to be broken up and 
> return back the right message ie. if the test returns with non-zero code say 
> that.
> Changed the way test results were checked to include the check for unexpected 
> failure when result is not non-zero.(i.e. when isOK() returns true).
> 3)
> Also usage of RuntimeException is over the top, you can simply throw an 
> Exception and have the main throws Exception, jtreg will do the needful.
> Changed. Used an Exception instead of RuntimeException
>
> 4)
>
>    102         FileUtils.deleteFileWithRetry(Paths.get(modules.getPath() + 
> File.separator + "mod.a.jar"));
>
> there are redundant use of File.separator, Paths.get should create the 
> FS correctly on the target platform
> ex: Paths.get(modules.getPath(), "mod.a.jar");
>
> Personally I stay away from using raw File.separator, instead have the APIs 
> do the work for me.
>
> -Removed all instances of File.separator
>
>
> Kumar
>
>
>> Hi Alan,
>> Thank you for the review.
>> My comments are inline and Webrev is updated here:
>> http://cr.openjdk.java.net/~rpatil/8167063/webrev.01/
>>
>> Change Summary:
>> - Removed SecurityException handling
>> - Updated the error message in launcher.properties
>> - Removed loadModuleMainClass0 method and moved the code back into 
>> original loadModuleMainClass
>> - NoClassDefFoundError is replaced by its parent class LinkageError 
>> in method loadMainClass
>>
>> Regards,
>> Ramanand.
>>
>> -----Original Message-----
>> From: Alan Bateman
>> Sent: Friday, January 20, 2017 8:03 PM
>> To: Ramanand Patil <ramanand.pa...@oracle.com>; 
>> core-libs-dev@openjdk.java.net
>> Subject: Re: RFR: 8167063: spurious message "A JNI error has occurred"
>> if start-class cannot be initialized
>>
>> On 20/01/2017 13:21, Ramanand Patil wrote:
>>
>>> Hi all,
>>> Please review the following bug fix:
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8167063
>>> Webrev: http://cr.openjdk.java.net/~rpatil/8167063/webrev.00/
>>>
>>> Handled the SecurityException and LinkageError which can be thrown from 
>>> Class.forName(...) method used in LauncherHelper.java and added 
>>> corresponding error messages to launcher.properties.
>>> Though the reported bug is because of the LinkageError, Security exception 
>>> is also handled to be safe from calling Class.forName method.
>>>
>> I see this changes loadMainClass to abort with resources that are keyed on 
>> java.launcher.cls.error6 and java.launcher.cls.error7 but they don't appear 
>> in the launcher.properties file. Does this work? I would assume 
>> MissingResourceException is thrown.
>> Thanks for pointing this. I missed to add it to launcher.properties. But now 
>> I have changed error6 to point to java.launcher.cls.error1 and removed 
>> security exception handling.
>>
>> For java.launcher.module.error3 and java.launcher.module.error4 then "link" 
>> is likely to confuse people. Sure, there may be linkage errors but there are 
>> many linkage errors and I think would be a lot clearer if the message was 
>> "Unable to load main class {0} from module {1}\n\{2}".
>> Updated the message as suggested.
>>
>> It's not clear to me that having a different message for security exceptions 
>> make sense, esp. when the exception is printed. So I think I would drop that.
>> Yes, I agree to drop out the Security exceptions handling.
>>
>> Also loadModuleMainClass0 is unusual method name, we've mostly (not
>> always) used the 0 suffix on native methods. In any case, it doesn't look 
>> like it is needed, the code was okay in loadModuleMainClass as it was.
>> The method was added just to look the exception handling easier. I have 
>> removed the extra method and placed the code back into loadModuleMainClass.
>>
>> One final point is that is the nesting catching of LinkageError and 
>> SecurityException in loadMainClass, I assume you don't need the inner catch.
>> I think both the catch blocks were needed, because the first(inner) catch 
>> was already inside catch.(This was same as NoClassDefFoundError catching 
>> twice in the same method). Now since NoClassDefFoundError is subclass of 
>> LinkageError, I have replaced it with LinkageError. And  I think still the 
>> same abort message holds good. Please let me know if this is ok.
>>
>> -Alan

Reply via email to