On 6/21/2012 2:00 PM, Alan Bateman wrote:
On 21/06/2012 19:02, Joe Wang wrote:
:
For the class loader, as discussed with Paul, since the ServiceLoader
does so much, we may be able to skip the 'using different
classloader' part, that is, simply calling load without classloader.
The javadoc states that it's equivalent to load with context class
loader. But from what I can, it found all that's placed in the
endorsed dir or bootclasspath. I need to do a few more tests on this.
It doesn't seem to be specified but the implementation (in at least
some places) appears to use the TCCL or the defining loader of the
FactoryFinder class (the bootstrap class loader in the case of the
JDK). Using the single-argument ServiceLoader.load is probably want
you want now.
Yeah, I agree.
:
Maybe I'm a little confused. But the fallback to default
implementation is in the spec. It happens the jaxp ri is installed
as an endorsed technology here and loaded by the ServiceLoader.
Yes, but ultimately we have to get to the point where we can scale
down the platform so you may have an embedded device, for example,
that doesn't validating parsers or a XPathFactory installed for
example. So I think this wording will need to get adjusted in time to
allow for the appropriate *ConfigurationException to be thrown then
there isn't any service provider module installed.
Yes, we need better defined error message. In the case where no impl
module is installed, the current impl would treat it the same as having
problem loading the default impl, and therefore throw
*ConfigurationException with an error message sth. like "Provider
[default impl class name] no found " and ClassNotFoundException as cause.
However, as we discussed before, the current jaxp impl resolution
process will change further as it becomes clear if there will be some
sort of "preference mechanism" in module loading. It's likely we wont
have the 4th step. So when the default module is not installed, we
simply get an empty iterator (no exception), in which case we probably
need an indicator (Platform.isModuleMode?) to formulate a better error
message.
-Joe
-Alan