On 08/15/2018 07:16 PM, Peter Levart wrote:
On 08/15/2018 05:49 PM, dalibor topic wrote:
On 06.08.2018 20:21, mr rupplin wrote:
Three problems that I run into when running the 'make jdk' after
minor work on the System.java class for JNI and custom JDK:
java/lang/memory/GroupListener.java:111:
Can we get explanations for each of these?
No.
There is no java.lang.memory in OpenJDK. So it looks as if you are
not using OpenJDK, you're using something else.
Or Mr. Rupplin is adding class GroupListener to OpenJDK, thus creating
new package java.lang.memory.
In that case I would suggest adding the class to some existent jdk
internal package of java.base module below the jdk.internal. package
hierarchy (java.lang. hierarchy is reserved). But as David Holmes
already suggested, if this class depends on java.rmi classes, it may
not be located in java.base module if it wants to access these classes
directly from compiled code. OTOH it must be located in java.base
module if it wants to be used from java.lang.System class (which I
suspect Mr. Rupplin is doing from his message mentioning work on
System.java class). It is possible to access java.rmi classes from
java.base module using reflection though. Or better yet, using
ServiceLoader mechanism.
So I would suggest Mr. Rupplin to:
- define a jdk internal service interface for the minimal
functionality needed from java.rmi module in the java.base module.
- implement this interface by a concealed class in the java.rmi module
and provide the service by adding "provides" directive to
module-info.java of the java.rmi module
- declare that java.base module "uses" the service (in the
module-info.java of the java.base module)
- code the logic in java.lang.System or helper class by loading the
service using ServiceLoader API - the logic should be prepared to not
find any such service since java.rmi module may not be present at runtime
- service interface and any additional utility classes such as
GroupListener in java.base module should be put into existent (or new)
jdk internal package(s) below the jdk.internal. package hierarchy.
- the package containintg the service interface should be exported to
java.rmi module only that provides the implementation of the service
Hope this helps,
Regards, Peter
The big question for Mr. Rupplin is why does he want to put the logic
that uses java.rmi module into java.lang.System class (or API). Wouldn't
such logic (or API) belong to java.rmi module and shouldn't Mr. Rupplin
extend its API instead? Some explanation about the intentions would help
suggest the right approach.
Peter