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.
At least classLoader.getPlatformClassLoader() must be used.
On Fri, Mar 16, 2018 at 1:21 PM, Jean-Francois Maury <jmaury(a)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(a)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/b3826209cae7327a9...
> 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/b3826209cae7327a9...
> 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(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>
--
JEFF MAURY
Red Hat
<
https://www.redhat.com/>
jmaury(a)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>