[jbosstools-dev] [HELP NEEDED] Java 9 and jbosstools-hibernate

Dmitrii Bocharov dbocharo at redhat.com
Fri Mar 16 09:34:42 EDT 2018


Yes, this classloader is loading classes from the user's Eclipse project.
Yes, it extends java.net.URLClassLoader.
It doesn't work because class loading and resource loading is different in
Java 9. Especially in eclipse.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=497287
https://bugs.eclipse.org/bugs/show_bug.cgi?id=507417

At least classLoader.getPlatformClassLoader() must be used.


On Fri, Mar 16, 2018 at 1:21 PM, Jean-Francois Maury <jmaury at redhat.com>
wrote:

> Not sure to understand #2: are you creating a classloader that is loading
> classes from the user's Eclipse project ? Is it based on URL classloader ?
> I don't why it is not working ?
>
> On Fri, Mar 16, 2018 at 10:12 AM, Dmitrii Bocharov <dbocharo at redhat.com>
> wrote:
>
>> Hi
>> it's a long time i'm trying to make jbosstools-hibernate work with Java.
>> The main problem is the class loader: https://github.com/jbo
>> sstools/jbosstools-hibernate/blob/b3826209cae7327a91615e0c0
>> 88006e54a4b5447/plugins/org.hibernate.eclipse/src/org/hibern
>> ate/eclipse/console/common/HibernateExtension.java#L58.
>>
>> *sub-problem #1 (getResource) method *(solved)
>> If you google how to load resources in Java 9, then you find that now you
>> should do *classloader.getUnnamedModule().getResourceAsStream()* instead
>> of previous *classloader**.getResourceAsStream(). *But we want, that our
>> code could be built inside Java 7 Execution Environment (see MANIFEST.MF).
>> So what i did for the *getResource
>> <https://github.com/jbosstools/jbosstools-hibernate/blob/b3826209cae7327a91615e0c088006e54a4b5447/plugins/org.hibernate.eclipse/src/org/hibernate/eclipse/console/common/HibernateExtension.java#L88>*
>> method. If we have null for *super.getResource(name)*, then i manually
>> search for resources next to hibernate.cfg.xml
>> using java.nio.file.Files.walkFileTree. And it works! It needs to be
>> polished a little bit, but anyway it solves the problem.
>>
>> *sub-problem #2 (findClass)* method (HELP NEEDED)
>> After the resource is found (and in hibernate usually it's a mapping xml
>> file) using the solution above, we try to associate it with the class and
>> load it with the classloader. However, the current *classloader.findClass
>> <https://github.com/jbosstools/jbosstools-hibernate/blob/b3826209cae7327a91615e0c088006e54a4b5447/plugins/org.hibernate.eclipse/src/org/hibernate/eclipse/console/common/HibernateExtension.java#L63>*
>> doesn't find anything (ClassNotFoundException). I tried to
>> *HibernatePlugin.getDefault().getBundle().loadClass(name)*, because i
>> found that this loading classes stuff is fixed in core Eclipse and bundles
>> must load classes without problems, but it doesn't work either.
>>
>> So my main questions are:
>>
>> 1) This code is rather old, and i suppose that it must be refactored in
>> general. If you have any thoughts of how to do it better, i'd be glad if
>> you share them :)
>> 2) How to load user classes correctly now in Java 9 in Eclipse?
>> 3) Maybe the better way is to create a plugin/feature with a minimal
>> Execution Environment set to Java 9, which will be activated only when java
>> 9 is used and implement such things like *classloader.getUnnamedModule().getResourceAsStream()
>> *there? And switching between them using extension points mechanism. Is
>> it possible? Does it worth it? If yes, then it'll require quite big work,
>> in my opinion.
>>
>>
>> Looking forward to any help.
>> Thanks in advance!
>> Bocharov Dmitrii
>>
>> _______________________________________________
>> jbosstools-dev mailing list
>> jbosstools-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>>
>
>
>
> --
>
> JEFF MAURY
>
> Red Hat
>
> <https://www.redhat.com/>
>
> jmaury at redhat.com
> <https://red.ht/sig>
> <https://redhat.com/summit>
> @redhatjobs <https://twitter.com/redhatjobs>   redhatjobs
> <https://www.facebook.com/redhatjobs/>   @redhatjobs
> <https://instagram.com/redhatjobs>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jbosstools-dev/attachments/20180316/79d881de/attachment-0001.html 


More information about the jbosstools-dev mailing list