Is there really a jdk.proxy1 module?
forax at univ-mlv.fr
forax at univ-mlv.fr
Tue Dec 8 17:57:19 UTC 2015
It depends if you want to be able to unload the proxy class or not,
If you want to unload it, you need to use your own class loader with the classloader of the annotation interface as parent.
Rémi
----- Mail original -----
> De: "David M. Lloyd" <david.lloyd at redhat.com>
> À: "Remi Forax" <forax at univ-mlv.fr>
> Cc: jigsaw-dev at openjdk.java.net
> Envoyé: Mardi 8 Décembre 2015 16:28:40
> Objet: Re: Is there really a jdk.proxy1 module?
>
> "Usually used" by whom? You cannot create a proxy class in a class
> loader that cannot "see" the interfaces it implements, so if those
> interfaces are in modules, and you choose some arbitrary parent class
> loader (leaving aside the sore-thumb question of: why would there even
> *be* a parent class loader besides the boostrap one in a module), the
> proxy would not be able to be defined due to NoClassDefFoundError
> because the proxy class wouldn't be able to link against the interface
> it implements.
>
> On 12/08/2015 09:16 AM, Remi Forax wrote:
> > No,
> > because the class loader that is usually used is not the module class
> > loader but one of its parent.
> >
> > Rémi
> >
> > ----- Mail original -----
> >> De: "David M. Lloyd" <david.lloyd at redhat.com>
> >> À: jigsaw-dev at openjdk.java.net
> >> Envoyé: Mardi 8 Décembre 2015 16:05:06
> >> Objet: Re: Is there really a jdk.proxy1 module?
> >>
> >> Or better yet, to the module defining the proxy interface(s)... of
> >> course, then you must ensure that they all are from the same module.
> >>
> >> This is another area where having per-module class loaders is superior:
> >> the getProxyClass()/newProxyInstance() methods already expect a class
> >> loader for the first argument, so you can select a module which has
> >> visibility to all the interfaces if so desired.
> >>
> >> On 12/08/2015 09:02 AM, Rafael Winterhalter wrote:
> >>> What is the advantage of adding runtime generated classes to a specific
> >>> named module? If all generated classes are collected in a single module,
> >>> this module does not have a meaningful readability scope. If enough
> >>> interfaces are proxied, the proxy module will converge to full read
> >>> access,
> >>> wouldn't it?
> >>>
> >>> Why not add such proxy classes to a class loader's unnamed module?
> >>>
> >>> 2015-12-08 15:52 GMT+01:00 Sundararajan Athijegannathan <
> >>> sundararajan.athijegannathan at oracle.com>:
> >>>
> >>>> addRead -> addReads
> >>>>
> >>>> -Sundar
> >>>>
> >>>>
> >>>> On 12/8/2015 8:20 PM, Sundararajan Athijegannathan wrote:
> >>>>
> >>>>> Because jdk.proxy1 is a dynamically created module, you've to
> >>>>> programmatically add read using java.lang.reflect.Module (addRead
> >>>>> method)
> >>>>> API.
> >>>>>
> >>>>> -Sundar
> >>>>>
> >>>>> On 12/8/2015 8:11 PM, Stephane Epardaud wrote:
> >>>>>
> >>>>>> Except I can't add reads to it:
> >>>>>>
> >>>>>> $HOME/no-backup/src/jdk1.9.0-jigsaw/bin/java
> >>>>>> -XaddReads:jdk.proxy1=com.redhat.ceylon.model ...
> >>>>>> Error occurred during initialization of VM
> >>>>>> java.lang.RuntimeException: Unknown module: jdk.proxy1
> >>>>>> at
> >>>>>> jdk.internal.module.ModuleBootstrap.fail(java.base at 9.0/ModuleBootstrap.java:394)
> >>>>>>
> >>>>>> at
> >>>>>> jdk.internal.module.ModuleBootstrap.addMoreReads(java.base at 9.0/ModuleBootstrap.java:319)
> >>>>>>
> >>>>>> at
> >>>>>> jdk.internal.module.ModuleBootstrap.boot(java.base at 9.0/ModuleBootstrap.java:229)
> >>>>>>
> >>>>>> at java.lang.System.initPhase2(java.base at 9.0/System.java:1263)
> >>>>>>
> >>>>>> That must be a mistake though, otherwise I can't use reflection to
> >>>>>> read
> >>>>>> annotations…
> >>>>>>
> >>>>>> On 08/12/15 15:32, Remi Forax wrote:
> >>>>>>
> >>>>>>> No,
> >>>>>>> jdk.proxy1 is a module created dynamically by the class
> >>>>>>> java.lang.reflect.Proxy.
> >>>>>>>
> >>>>>>> Rémi
> >>>>>>>
> >>>>>>> ----- Mail original -----
> >>>>>>>
> >>>>>>>> De: "Stephane Epardaud" <stef at epardaud.fr>
> >>>>>>>> À: jigsaw-dev at openjdk.java.net
> >>>>>>>> Envoyé: Mardi 8 Décembre 2015 15:21:57
> >>>>>>>> Objet: Is there really a jdk.proxy1 module?
> >>>>>>>>
> >>>>>>>> I'm getting:
> >>>>>>>>
> >>>>>>>> java.lang.IllegalAccessException: class
> >>>>>>>> com.redhat.ceylon.model.loader.impl.reflect.mirror.ReflectionAnnotation
> >>>>>>>>
> >>>>>>>> (in module com.redhat.ceylon.model) cannot access class
> >>>>>>>> com.sun.proxy.jdk.proxy1.$Proxy3 (in module jdk.proxy1) because
> >>>>>>>> module
> >>>>>>>> com.redhat.ceylon.model does not read module jdk.proxy1
> >>>>>>>>
> >>>>>>>> When using reflection to load annotations. Is there really a
> >>>>>>>> "jdk.proxy1" module I need to import when doing reflection? Sounds
> >>>>>>>> fishy, no?
> >>>>>>>>
> >>>>>>>> Cheers.
> >>>>>>>>
> >>>>>>>>
> >>>>>
> >>>>
> >>
> >> --
> >> - DML
> >>
>
> --
> - DML
>
More information about the jigsaw-dev
mailing list