[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Newsgroup Home]
|
[news.eclipse.technology.equinox] Re: No suitable Log constructor error
|
Thanks Marcos.
I'm definitely interested in your approach if you want to add it as
attachment to the bug.
-Simon
"Marcos Pereira" <marcos-luiz@xxxxxxxxx> wrote in message
news:f6qtc2$jbb$1@xxxxxxxxxxxxxxxxxxxx
> The bug entry #195765 was added to Eclipse bugzilla, regarding this topic.
> Link: https://bugs.eclipse.org/bugs/show_bug.cgi?id=195765
>
> Marcos
>
>
> "Marcos Pereira" <marcos-luiz@xxxxxxxxx> escreveu na mensagem
> news:f6qr01$eoe$1@xxxxxxxxxxxxxxxxxxxx
>> Hi Simon,
>>
>> Thank you very much for the hints. I tried 2) and 3) (unfortunately I
>> couldn't drop log4j dependency, so 1) was not an option for me).
>>
>> Bad news is that neither 2) and 3) worked too. However, looking into
>> SLF4J pattern I had the idea to build a log4j wrapper in same way as
>> jcl-over-slf4j and that finally worked. I added some code snippet below,
>> but I can provide the full solution for anyone interested.
>>
>> Anyway, your hints pointed me to a solution. Thanks!
>>
>> Marcos
>>
>>
>> package org.apache.log4j;
>>
>> import org.apache.commons.logging.Log;
>> import org.apache.commons.logging.LogFactory;
>>
>> public class Logger {
>>
>> private Log log;
>>
>> private Logger(Class clazz) {
>> log = LogFactory.getLog(clazz);
>> }
>>
>> private Logger(String name) {
>> log = LogFactory.getLog(name);
>> }
>>
>> public static Logger getLogger(Class clazz) {
>> return new Logger(clazz);
>> }
>>
>> public void debug(Object message) {
>> System.out.println("DEBUG: " + message);
>> log.debug(message);
>> }
>>
>> public void debug(Object message, Throwable t) {
>> System.out.println("DEBUG: " + message);
>> log.debug(message, t);
>> }
>>
>> ...
>>
>> }
>>
>>
>> "Simon Kaegi" <simon_kaegi@xxxxxxxxxx> escreveu na mensagem
>> news:f6j80l$p1q$1@xxxxxxxxxxxxxxxxxxxx
>>> Hi Marcos,
>>>
>>> Please open a bug for this - this is going to be tough to deal with.
>>> The problem here is that your use of log4j in your jsp is being leaked
>>> via the context class loader into the jasper implementations use of
>>> commons logging.
>>> The commons logging discovery process will find log4j on the CCL but not
>>> in it's own class hierarchy and will then run into problems.
>>>
>>> I can think of two workarounds:
>>> 1) Remove your direct dependency on log4j from your jsp bundle and
>>> instead move it to another bundle you can call from your jsp.
>>> 2) If you're in full control of your platform add a fragment to the
>>> commons.logging bundle that imports log4j
>>> 3) Take a look at SLF4J and jcl-over-slf4j and create bundles to replace
>>> the commons.logging bundle.
>>>
>>> HTH
>>> -Simon
>>>
>>> "Marcos Pereira" <marcos-luiz@xxxxxxxxx> wrote in message
>>> news:f6hmf2$3dp$1@xxxxxxxxxxxxxxxxxxxx
>>>> Hi all.
>>>>
>>>> I have been testing the JSP Examples Bundle found at:
>>>> http://www.eclipse.org/equinox/server/jsp_support.php
>>>>
>>>> It works fine without changes, but when I try to add a dependency to
>>>> org.apache.log4j (either as Import-Package or Require-Bundle) the error
>>>> below throws out.
>>>>
>>>> Any clue about how to fix this? I checked either on this group and on
>>>> Eclipse bugzilla but unfortunately I wasn't able to find a solution so
>>>> far.
>>>>
>>>> org.apache.commons.logging.LogConfigurationException:
>>>> org.apache.commons.logging.LogConfigurationException: No suitable Log
>>>> constructor [Ljava.lang.Class;@ff2413 for
>>>> org.apache.commons.logging.impl.Log4JLogger (Caused by
>>>> java.lang.NoClassDefFoundError: org/apache/log4j/Category) (Caused by
>>>> org.apache.commons.logging.LogConfigurationException: No suitable Log
>>>> constructor [Ljava.lang.Class;@ff2413 for
>>>> org.apache.commons.logging.impl.Log4JLogger (Caused by
>>>> java.lang.NoClassDefFoundError: org/apache/log4j/Category))
>>>> at
>>>> org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
>>>> at
>>>> org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
>>>> at
>>>> org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
>>>> at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
>>>> at
>>>> org.apache.jasper.EmbeddedServletOptions.<init>(EmbeddedServletOptions.java:43)
>>>> at org.apache.jasper.servlet.JspServlet.init(JspServlet.java:97)
>>>> at org.eclipse.equinox.jsp.jasper.JspServlet.init(JspServlet.java:81)
>>>> at
>>>> org.eclipse.equinox.http.helper.ContextPathServletAdaptor.init(ContextPathServletAdaptor.java:31)
>>>> at
>>>> org.eclipse.equinox.http.servlet.internal.ServletRegistration.init(ServletRegistration.java:64)
>>>> at
>>>> org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:140)
>>>> at
>>>> org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerServlet(HttpServiceImpl.java:50)
>>>> at
>>>> org.eclipse.equinox.jsp.examples.Activator$HttpServiceTracker.addingService(Activator.java:48)
>>>> at
>>>> org.osgi.util.tracker.ServiceTracker$Tracked.trackAdding(ServiceTracker.java:1064)
>>>> at
>>>> org.osgi.util.tracker.ServiceTracker$Tracked.trackInitialServices(ServiceTracker.java:926)
>>>> at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:330)
>>>> at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:274)
>>>> at org.eclipse.equinox.jsp.examples.Activator.start(Activator.java:26)
>>>> at
>>>> org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:999)
>>>> at java.security.AccessController.doPrivileged(Native Method)
>>>> at
>>>> org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:993)
>>>> at
>>>> org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:974)
>>>> at
>>>> org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)
>>>> at
>>>> org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:350)
>>>> at
>>>> org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1118)
>>>> at
>>>> org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:634)
>>>> at
>>>> org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:508)
>>>> at
>>>> org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:282)
>>>> at
>>>> org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:468)
>>>> at
>>>> org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:195)
>>>> at
>>>> org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:297)
>>>> Caused by: org.apache.commons.logging.LogConfigurationException: No
>>>> suitable Log constructor [Ljava.lang.Class;@ff2413 for
>>>> org.apache.commons.logging.impl.Log4JLogger (Caused by
>>>> java.lang.NoClassDefFoundError: org/apache/log4j/Category)
>>>> at
>>>> org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:413)
>>>> at
>>>> org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
>>>> ... 29 more
>>>> Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Category
>>>> at java.lang.Class.getDeclaredConstructors0(Native Method)
>>>> at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
>>>> at java.lang.Class.getConstructor0(Unknown Source)
>>>> at java.lang.Class.getConstructor(Unknown Source)
>>>> at
>>>> org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:410)
>>>> ... 30 more
>>>>
>>>
>>>
>>
>>
>
>