[jboss-jira] [JBoss JIRA] (JBLOGGING-111) LoggerProvider configured with new ServiceLoader crash
Frederic Allard (JIRA)
issues at jboss.org
Thu Nov 6 12:40:30 EST 2014
[ https://issues.jboss.org/browse/JBLOGGING-111?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13018030#comment-13018030 ]
Frederic Allard commented on JBLOGGING-111:
-------------------------------------------
I think the fix mentioned by David should be implemented, but my problem is that I want to force SLF4J without developing custom code. I want to use the LoggerProvider implemented by JBoss. But there is no way to do it right now.
> 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
>
> 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
(v6.3.8#6338)
More information about the jboss-jira
mailing list