[jboss-jira] [JBoss JIRA] (JBLOGGING-111) LoggerProvider configured with new ServiceLoader crash

Mauro Molinari (JIRA) issues at jboss.org
Thu Nov 13 05:18:30 EST 2014


    [ https://issues.jboss.org/browse/JBLOGGING-111?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13019648#comment-13019648 ] 

Mauro Molinari commented on JBLOGGING-111:
------------------------------------------

I also encountered this problem. I want to force the use of SLF4J, but system properties for this is a really bad idea. The service locator technique would be OK (although not optimal), but as of JBoss Logging 3.2.0 this doesn't work for the exact reason written in the original report.
I really can't understand the concerns about making the default {{LoggerProvider}} implementations public...

> 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