[
https://jira.jboss.org/jira/browse/WELDSE-25?page=com.atlassian.jira.plug...
]
Morten Christensen commented on WELDSE-25:
------------------------------------------
I would like to pass a classloader to the Weld Class, because how classloading works and
what is permitted differes from container to container. In JEE the context class loader
can be used, in JSE it might depending on the Application and in OSGI it should NOT be
used (it will not work accross different OSGI containers). So in conclusion, it is only in
the JEE wold that that Weld can make an informed decision about classloading, in all other
cases Weld need to be configurable.
Here is the class loader that I would like to be able to use under OSGI and pass to the
Weld constructor. Looking at the Weld sources it would seem on the surface to be easy to
just overload the constructor and pass the class-loader to all relevant objects inside it.
This would be the solution I like the best, as the ResourceLoader solution would need a
static variable to pass data between my OSGI bundle's activator method and Weld (And I
do hate to use static variables unless I have to)
Sample OSGI bundle class loader below. Please be free to use this code for whatever
purpose you want.
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import org.osgi.framework.Bundle;
public class BundleClassLoader extends ClassLoader {
private final Bundle delegate;
public BundleClassLoader(Bundle delegate) {
this.delegate = delegate;
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
return delegate.loadClass(name);
}
@Override
public URL getResource(String name) {
return delegate.getResource(name);
}
@SuppressWarnings("unchecked")
@Override
public Enumeration<URL> getResources(String name) throws IOException {
return delegate.getResources(name);
}
}
Weld SE ignores org.jboss.weld.resources.spi.ResourceLoader
-----------------------------------------------------------
Key: WELDSE-25
URL:
https://jira.jboss.org/jira/browse/WELDSE-25
Project: Weld support for Java SE
Issue Type: Bug
Affects Versions: 1.0.1.Final
Environment: Weld SE + Java 6
Reporter: Morten Christensen
Priority: Critical
According to the docs "org.jboss.weld.resources.spi.ResourceLoader" is
responsible for resource loading/class creation and if it worked it would appear to solve
a lot of potential integration problems, f.x. with OSGI (see issue 520).
Unfortunately, Weld SE does not apper to use ResourceLoaders and it ignores any
implementations of this service that the Java SE app supplies. Even worse, Weld SE
classloading behavior is hardcoded in
"org.jboss.weld.environment.se.util.Reflections". This makes it impossible to
use Weld SE where classloading does not work with the Thread's context class loader
such as OSGI etc.
Weld SE should be changed to look for service implementations of
"org.jboss.weld.resources.spi.ResourceLoader" (i.e. actually work according to
its own documentation).
P.S: It would also be nice if Weld SE would allow users to supply a Classloader to the
constructor for org.jboss.weld.environment.se.Weld
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira