Thank you for explanation. I have used commons-lang for Serialization-Deserialization. Many other libraries and applications are using it too, or deserializing objects without respecting the TCCL. Does it mean that all this Applications and libraries will not work in TomEE?
-----Ursprüngliche Nachricht----- Von: Romain Manni-Bucau [mailto:[email protected]] Gesendet: Mittwoch, 20. Februar 2013 20:44 An: [email protected] Betreff: Re: AW: Class loading problem in TomEE 1.5.1 sad to say you didn't reproduce it completely but i got the issue. first i don't think it is linked to tomcat (if you use tomcat clustering classes you'll not get it). the fix is simply to not use an ObjectInputStream but this child (in dirty mode): in = new ObjectInputStream(inputStream) { @Override protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { return Thread.currentThread().getContextClassLoader().loadClass(desc.getName()); } }; if you update your sample with this code it will work fine. Tomcat more or less does it automatically. I don't have time to go further right now but i think somebody else is serializing without respecting the TCCL. *Romain Manni-Bucau* *Twitter: @rmannibucau <https://twitter.com/rmannibucau>* *Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/> *LinkedIn: **http://fr.linkedin.com/in/rmannibucau* *Github: https://github.com/rmannibucau* 2013/2/20 <[email protected]> > Hi, > > I have just reproduced an issue which I have in my Application. > Steps to reproduce: > > *Checkout project from https://github.com/eiskonzept/tomee/ > *Start TomEE maven plugin with node1 profile *Open in browser: > /<application_context_root>/index.xhtml > *Press submit button. > *Following code will be executed: > ByteArrayOutputStream byteArrayOutputStream = new > ByteArrayOutputStream(); > SerializationUtils.serialize(new DefaultRequestTypeResolver(), > byteArrayOutputStream); > byte[] bytes = byteArrayOutputStream.toByteArray(); > try { > byteArrayOutputStream.close(); > } catch (IOException e) { > e.printStackTrace(); } > Object deserialize = SerializationUtils.deserialize(bytes); > > Exception: > org.apache.commons.lang.SerializationException: > java.lang.ClassNotFoundException: > org.apache.myfaces.extensions.cdi.jsf2.impl.request.DefaultRequestType > Resolver > > org.apache.commons.lang.SerializationUtils.deserialize(SerializationUt > ils.java:166) > > org.apache.commons.lang.SerializationUtils.deserialize(SerializationUt > ils.java:193) > > de.test.PassivationCapableBean.submit(PassivationCapableBean.java:55) > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.j > ava:57) > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > java.lang.reflect.Method.invoke(Method.java:601) > > org.apache.webbeans.intercept.InterceptorHandler.invoke(InterceptorHan > dler.java:322) > > org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invok > e(NormalScopedBeanInterceptorHandler.java:117) > > org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invok > e(NormalScopedBeanInterceptorHandler.java:108) > > de.test.PassivationCapableBean_$$_javassist_27.submit(PassivationCapableBean_$$_javassist_27.java) > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.j > ava:57) > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > java.lang.reflect.Method.invoke(Method.java:601) > org.apache.el.parser.AstValue.invoke(AstValue.java:278) > > org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:27 > 4) > > org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.in > voke(ContextAwareTagMethodExpression.java:96) > > org.apache.myfaces.application.ActionListenerImpl.processAction(Action > ListenerImpl.java:68) > > org.apache.myfaces.extensions.cdi.jsf.impl.security.SecurityViolationA > wareActionListener.processAction(SecurityViolationAwareActionListener. > java:56) > > org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewControllerA > ctionListener.processAction(ViewControllerActionListener.java:68) > > org.apache.myfaces.extensions.cdi.jsf.impl.listener.action.CodiActionListener.processAction(CodiActionListener.java:58) > javax.faces.component.UICommand.broadcast(UICommand.java:120) > > javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1028) > > javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:286) > > javax.faces.component.UIViewRoot._process(UIViewRoot.java:1375) > > javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:75 > 2) > > org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeA > pplicationExecutor.java:38) > > org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl. > java:170) > > org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java: > 117) > > org.apache.myfaces.extensions.cdi.jsf2.impl.listener.phase.CodiLifecycleWrapper.execute(CodiLifecycleWrapper.java:95) > javax.faces.webapp.FacesServlet.service(FacesServlet.java:197) > > > -----Ursprüngliche Nachricht----- > Von: Romain Manni-Bucau [mailto:[email protected]] > Gesendet: Mittwoch, 6. Februar 2013 14:42 > An: [email protected] > Betreff: Re: AW: Class loading problem in TomEE 1.5.1 > > yep, i just commited it today so it will be available tomorrow > > *Romain Manni-Bucau* > *Twitter: @rmannibucau <https://twitter.com/rmannibucau>* > *Blog: **http://rmannibucau.wordpress.com/*< > http://rmannibucau.wordpress.com/> > *LinkedIn: **http://fr.linkedin.com/in/rmannibucau* > *Github: https://github.com/rmannibucau* > > > > 2013/2/6 <[email protected]> > > > What should I rebuild from sources? :) I just replaced as proposed: > > > > org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4J > > Lo > > gger > > by > > org.apache.commons.logging.Log=org.apache.openejb.log.commonslogging > > .L > > og4J4AppOpenEJB4ContainerLog > > > > in my commons-logging.properties. > > Or I got you wrong and this workaround will work only in future builds? > > > > -----Ursprüngliche Nachricht----- > > Von: Romain Manni-Bucau [mailto:[email protected]] > > Gesendet: Mittwoch, 6. Februar 2013 12:09 > > An: [email protected] > > Betreff: Re: AW: Class loading problem in TomEE 1.5.1 > > > > you rebuilt it from sources? > > > > *Romain Manni-Bucau* > > *Twitter: @rmannibucau <https://twitter.com/rmannibucau>* > > *Blog: **http://rmannibucau.wordpress.com/*< > > http://rmannibucau.wordpress.com/> > > *LinkedIn: **http://fr.linkedin.com/in/rmannibucau* > > *Github: https://github.com/rmannibucau* > > > > > > > > 2013/2/6 <[email protected]> > > > > > Just tried proposed workaround and got exception: > > > > > > Error configuring application listener of class > > > com.opensymphony.webwork.lifecycle.SessionLifecycleListener > > > java.lang.ExceptionInInitializerError > > > at > > > sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > > > Method) > > > at > > > > > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruc > > to > > rAccessorImpl.java:57) > > > at > > > > > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Delegating > > Co > > nstructorAccessorImpl.java:45) > > > at > > java.lang.reflect.Constructor.newInstance(Constructor.java:525) > > > at > > > > > org.apache.webbeans.inject.InjectableConstructor.doInjection(Injecta > > bl > > eConstructor.java:89) > > > at > > > > > org.apache.openejb.cdi.ConstructorInjectionBean.createInstance(Const > > ru > > ctorInjectionBean.java:77) > > > at > > > > > org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean > > .j > > ava:186) > > > at > > > org.apache.openejb.core.WebContext.newInstance(WebContext.java:107) > > > at > > > > > org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeIn > > st > > anceManager.java:55) > > > at > > > > > org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeIn > > st > > anceManager.java:48) > > > at > > > > > org.apache.catalina.core.StandardContext.listenerStart(StandardConte > > xt > > .java:4727) > > > at > > > > > org.apache.catalina.core.StandardContext.startInternal(StandardConte > > xt > > .java:5285) > > > at > > > org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) > > > at > > > > > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase. > > java:901) > > > at > > > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) > > > at > > > org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) > > > at > > > > > org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.j > > av > > a:657) > > > at > > > > > org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConf > > ig > > .java:1637) > > > at > > > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) > > > at > > > java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) > > > at java.util.concurrent.FutureTask.run(FutureTask.java:166) > > > at > > > > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor > > .j > > ava:1110) > > > at > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor. > > java:603) > > > at java.lang.Thread.run(Thread.java:722) > > > Caused by: org.apache.commons.logging.LogConfigurationException: > > > User-specified log class > > > 'org.apache.openejb.log.commonslogging.Log4J4AppOpenEJB4ContainerLog' > > > cannot be found or is not useable. > > > at > > > > > org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementa > > ti > > on(LogFactoryImpl.java:874) > > > at > > > > > org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactor > > yI > > mpl.java:604) > > > at > > > > > org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactor > > yI > > mpl.java:336) > > > at > > > > > org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactor > > yI > > mpl.java:310) > > > at > > > org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685) > > > at > > > > > com.opensymphony.webwork.lifecycle.SessionLifecycleListener.<clinit> > > (S > > essionLifecycleListener.java:28) > > > ... 24 more > > > > > > -----Ursprüngliche Nachricht----- > > > Von: Romain Manni-Bucau [mailto:[email protected]] > > > Gesendet: Mittwoch, 6. Februar 2013 11:21 > > > An: [email protected] > > > Betreff: Re: AW: Class loading problem in TomEE 1.5.1 > > > > > > that's more or less a bug in commons-logging which respects > > > classloading but uses the current class loader configuration even > > > when instantiating classes from upper classloader. > > > > > > It means it works for your app but not for the container part > > > (myfaces) which will reuse your config but the parent classloader. > > > > > > The workaround i added is the following one: > > > > > > replace > > > org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log > > > 4J > > > Lo > > > gger > > > by > > > org.apache.commons.logging.Log=org.apache.openejb.log.commonslogging. > > > Log4J4AppOpenEJB4ContainerLog > > > > > > i opened https://issues.apache.org/jira/browse/TOMEE-758 about it > > > > > > PS: you can implement any other facade you'd like to match your > > > need > > > > > > *Romain Manni-Bucau* > > > *Twitter: @rmannibucau <https://twitter.com/rmannibucau>* > > > *Blog: **http://rmannibucau.wordpress.com/*< > > > http://rmannibucau.wordpress.com/> > > > *LinkedIn: **http://fr.linkedin.com/in/rmannibucau* > > > *Github: https://github.com/rmannibucau* > > > > > > > > > > > > 2013/2/5 <[email protected]> > > > > > > > just have reproduced not exactly the same issue, but very > > > > similar, in my test project: > > > > https://github.com/eiskonzept/tomee > > > > Just package the app and start tomee-plugin with node1 profile. > > > > > > > > Explanation: > > > > I have two dependencies in my project: commons-logging and log4j. > > > > If I package both libraries in my webapp I become: > > > > "LogConfigurationException: User-specified log class > > > > 'org.apache.commons.logging.impl.Log4JLogger' cannot be found or > > > > is not useable" > > > > which means that commons-logging can't find Log4JLogger class. > > > > > > > > When I put log4j.jar in tomee's lib folder it works just fine. > > > > But I can't do this with other libraries in real Project, > > > > because we use some special versions of libraries(quartz for > > > > example) which are > > > provided by tomee too. > > > > > > > > is there any possibility to use my own versions of libraries > > > > which already provided by tomee? > > > > > > > > -----Ursprüngliche Nachricht----- > > > > Von: [email protected] > > > > [mailto:[email protected]] > > > > Gesendet: Montag, 4. Februar 2013 13:12 > > > > An: [email protected] > > > > Betreff: AW: AW: Class loading problem in TomEE 1.5.1 > > > > > > > > I got further by copying log4j.jar in CATALINA_BASE/lib folder, > > > > but then I got next NoClassDefFoundError. > > > > Most confusing is that the same application deployed in TomEE > > > > Version 1.5.0 works perfectly. > > > > I believe it is some kind of class loader issue. Are there some > > > > significant class loader changes between version 1.5.0 and 1.5.1? > > > > It looks like that container is loading some classes from > > > > container provided commons-logging.jar first, and then can't > > > > find some classes in WEB-APP/lib which needed by commons-logging. > > > > > > > > -----Ursprüngliche Nachricht----- > > > > Von: Romain Manni-Bucau [mailto:[email protected]] > > > > Gesendet: Montag, 4. Februar 2013 12:13 > > > > An: [email protected] > > > > Betreff: Re: AW: Class loading problem in TomEE 1.5.1 > > > > > > > > Hard to help since we dont "see" the issue > > > > > > > > You probably have some conflict in your app. > > > > > > > > Check your deps maybe > > > > Le 4 févr. 2013 12:11, <[email protected]> a écrit : > > > > > > > > > I have tried both: with commons-logging in my war file and without. > > > > > With same result(exception) in both cases. > > > > > I have tried to isolate the issue in small sample app, but > > > > > without success. Unfortunately I can't provide full > > > > > application for > > > reproduction. > > > > > Could you give some hints, how can I help you to reproduce the > > > > > problem on your side or solve the issue by myself? > > > > > > > > > > > > > > > > Note: did you put commons-logging in your app too? > > > > > > > > > > > can you reproduce it in a sample webapp? > > > > > > > > > > > > > > >
