[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