[
https://issues.jboss.org/browse/JBLOGGING-111?page=com.atlassian.jira.plu...
]
David Lloyd commented on JBLOGGING-111:
---------------------------------------
It sounds more like what you want is a way to use some configuration other than a system
property in order to choose one of the preexisting providers. You are trying to use
service loader as this configuration mechanism, though that's not really an
appropriate solution for choosing a provider because it's meant for _providing_ a
provider.
I think it's reasonable to open a new JIRA which is a feature request to support the
specification of a preexisting provider on a class loader (aka per-application) basis. I
don't think it's a good idea to make implementation classes public in order to
facilitate that feature. But that discussion can be had in the new JIRA.
LoggerProvider configured with new ServiceLoader crash
------------------------------------------------------
Key: JBLOGGING-111
URL:
https://issues.jboss.org/browse/JBLOGGING-111
Project: JBoss Logging
Issue Type: Bug
Affects Versions: 3.2.0.Beta1
Environment: Weblogic 10.3.2.0
Configured in ejb jar, deployed by an ear file
Reporter: Frederic Allard
Assignee: James Perkins
Priority: Major
Fix For: 3.2.0.Final
There is a new feature in the beta which uses the ServiceLoader to specify a
LoggerProvider to be used by JBoss Logging.
org.jboss.logging.LoggerProviders snippet :
{code}
// Next try for a service provider
try {
final ServiceLoader<LoggerProvider> loader =
ServiceLoader.load(LoggerProvider.class, cl);
if (loader.iterator().hasNext()) {
return loader.iterator().next();
}
} catch (Throwable ignore) {
// TODO consider printing the stack trace as it should only happen once
}
{code}
When you try to configure a provider (ex. org.jboss.logging.Slf4jLoggerProvider), the
ServiceLoader crash silently and ignore the provider.
{code}
java.util.ServiceConfigurationError: org.jboss.logging.LoggerProvider: Provider
org.jboss.logging.Slf4jLoggerProvider could not be instantiated:
java.lang.IllegalAccessException: Class java.util.ServiceLoader$LazyIterator can not
access a member of class org.jboss.logging.Slf4jLoggerProvider with modifiers
""
at java.util.ServiceLoader.fail(ServiceLoader.java:207)
at java.util.ServiceLoader.access$100(ServiceLoader.java:164)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:353)
at java.util.ServiceLoader$1.next(ServiceLoader.java:421)
at org.jboss.logging.LoggerProviders.findProvider(LoggerProviders.java:70)
at org.jboss.logging.LoggerProviders.find(LoggerProviders.java:32)
at org.jboss.logging.LoggerProviders.<clinit>(LoggerProviders.java:29)
at org.jboss.logging.Logger.getLogger(Logger.java:2177)
at org.jboss.logging.Logger$1.run(Logger.java:2277)
at java.security.AccessController.doPrivileged(Native Method)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2241)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2228)
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:176)
...
{code}
This is caused by the fact that all JBoss providers are not public classes and are
instead package classes.
--
This message was sent by Atlassian Jira
(v7.12.1#712002)