[slf4j-dev] Service Provider Interface(using jcl104-over-slf4j.jar with axis.jar)

Dave Wallace dwallace at UDel.Edu
Wed Mar 22 19:27:51 CET 2006


Works like a champ! I tested with with axis 1.3 which does indeed employ
commons-discovery-0.2.jar .

Thank you so much for taking the time to look into this, it will make it
much easier for me to distribute best logging practices throughout our
group. (Of course, I really look forward to the day when
jcl104-over-slf4j.jar is no longer needed :))

- Dave

Ceki Gülcü wrote:
> Dave,
>
> I spent some time reading the source code of commons-discovery version
> 0.2 which I believe matches the version you are testing with. Reading
> the javadocs for o.a.c.discovery.tools.DiscoverClass and your previous
> messages, I added
> the file "org.apache.commons.logging.LogFactory" under META-INF/services.
>
> You can find the modified jar file including the fix as an attachment
> to this message. Can you please give it a try?
>
> Thanks in advance,
>
> At 07:01 PM 3/21/2006, Dave Wallace wrote:
>> I had not modifed jcl104-over-slf4j.jar other than to add
>> /META-INF/services by unpacking the jar (from the 1.0 release), adding
>> the file and repacking.
>> The original, unmodified 1.0 release of jcl104-over-slf4j.jar and the
>> one you sent me both fail like so:
>> java.lang.ExceptionInInitializerError
>>     at org.apache.axis.message.NodeImpl.<clinit>(NodeImpl.java:48)
>>    .... [Elided] ....
>> Caused by: org.apache.commons.discovery.DiscoveryException: No
>> implementation defined for org.apache.commons.logging.LogFactory
>>     at
>> org.apache.commons.discovery.tools.ClassUtils.verifyAncestory(ClassUtils.java:176)
>>
>>     at
>> org.apache.commons.discovery.tools.SPInterface.verifyAncestory(SPInterface.java:201)
>>
>>     at
>> org.apache.commons.discovery.tools.SPInterface.newInstance(SPInterface.java:195)
>>
>>     at
>> org.apache.commons.discovery.tools.DiscoverClass.newInstance(DiscoverClass.java:579)
>>
>>     at
>> org.apache.commons.discovery.tools.DiscoverSingleton.find(DiscoverSingleton.java:418)
>>
>>     at
>> org.apache.commons.discovery.tools.DiscoverSingleton.find(DiscoverSingleton.java:378)
>>
>>     at
>> org.apache.axis.components.logger.LogFactory$1.run(LogFactory.java:45)
>>     at java.security.AccessController.doPrivileged(Native Method)
>>     at
>> org.apache.axis.components.logger.LogFactory.getLogFactory(LogFactory.java:41)
>>
>>     at
>> org.apache.axis.components.logger.LogFactory.<clinit>(LogFactory.java:33)
>>
>>     ... 37 more
>>
>> I believe that the vm is able to load
>> org.apache.axis.components.logger.LogFactory because javac tends to fold
>> public static final variables into generated code, therefore there are
>> no references to FACTORY_PROPERTIES and FACTORY_DEFAULT in the axis
>> LogFactory, just the values are stored. So I don't think they can be
>> overridden without recompiling axis.jar.
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> dev mailing list
> dev at slf4j.org
> http://slf4j.org/mailman/listinfo/dev
>   




More information about the slf4j-dev mailing list