Hi Dmitry,

First an observation:

- java.lang.management and sun.management packages are part of
  the java.management module.

- com.sun.management and com.sun.management.internal are part
  of jdk.management

What strategy did you use to decide whether to use OPTIONAL | REQUIRED?
I'm not sure I understand the logic...

For instance:

80 Klass* k = Management::com_sun_management_internal_GarbageCollectorExtImpl_klass(Management::OPTIONAL, CHECK_NH);

  => class from jdk.management: OPTIONAL looks like the right choice.

103 Klass* mu_klass = Management::java_lang_management_MemoryUsage_klass(Management::OPTIONAL, CHECK_NH);

  => class from java.management: should it be REQUIRED?
     Or is it optional for some other reason (e.g. the feature/method
     depends on jdk.management being present)?
     Or is it optional to make room for the case when java.management is
     not there?

Is there some other underlying logic here?

best regards,

-- daniel

On 13/01/16 19:45, Dmitry Samersoff wrote:
Everybody,

Please, review the fix:

http://cr.openjdk.java.net/~dsamersoff/JDK-8141070/webrev.01/

The problem:

   Code in management.cpp throw NoClassDefFound exception if any of
requested classes is missing.

  But, in upcoming modular JDK classes that not belong to
java.lang.management (sun.management, com.sun.management etc) might not
be present.

Solution:

  Refactor class resolving code to support two type of classes - REQUIRED
(still throw NCDFE if the class is missing) and OPTIONAL (just return
NULL).

   I introduced a new parameter to highlight the fact that a class is an
optional one on caller side rather than handle it silently inside
management.cpp.

-Dmitry


Reply via email to