geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jarek Gawor (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (GERONIMO-6482) Ensure loading of JVM ext classloader classes from Geronimo bundles
Date Fri, 12 Jul 2013 15:19:49 GMT

    [ https://issues.apache.org/jira/browse/GERONIMO-6482?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13707005#comment-13707005
] 

Jarek Gawor commented on GERONIMO-6482:
---------------------------------------

I realized that Karaf sets this property in the etc/config.properties file so I moved your
change to that file as well in Geronimo to make things consistent. The end result is pretty
much the same anyway. Changes committed in revision 1502585 in 3.0 branch. Please double check
if things are still working ok and if so close the bug. 

Thanks for the patch!

                
> Ensure loading of JVM ext classloader classes from Geronimo bundles
> -------------------------------------------------------------------
>
>                 Key: GERONIMO-6482
>                 URL: https://issues.apache.org/jira/browse/GERONIMO-6482
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: osgi
>    Affects Versions: 3.0.1
>            Reporter: Andy McCright
>            Assignee: Andy McCright
>            Priority: Minor
>         Attachments: sys-prop-patch.txt
>
>
> IBM has changed the classloader used to load com.sun.* (specifically com.sun.script.javascript)
classes in JDK 7.  In JDK 6, these classes were loaded by the JVM's boot classloader - in
JDK 7, they are loaded via the JVM's ext classloader (a child classloader of the boot loader).
 This change has the effect of breaking servlet code like this:
>         ScriptEngineManager manager = new ScriptEngineManager();
>         ScriptEngine engine = manager.getEngineByName("JavaScript");
>         if(engine == null) {
>          throw new RuntimeException("Oh no, unable to find a script engine found for
JavaScript");
>         }
> When running Geronimo 3.0.1 on JDK 6, this code works (engine is non-null, no exception
is thrown).  When I switch to JDK7, I see:
> ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.sun.script.javascript.RhinoScriptEngineFactory
not found
> java.lang.RuntimeException: Oh no, unable to find a script engine found for JavaScript
>     at org.apache.jsp.HelloWorld_jsp._jspService(HelloWorld_jsp.java:96)
>     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
>     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
>     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
>     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
>     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
>     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
>     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
>     at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:731)
>     at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:48)
>     at org.apache.geronimo.tomcat.valve.ProtectedTargetValve.invoke(ProtectedTargetValve.java:53)
>     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
>     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
>     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
>     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
>     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
>     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
>     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
>     at org.apache.geronimo.pool.ThreadPool$1.run(ThreadPool.java:267)
>     at org.apache.geronimo.pool.ThreadPool$ContextClassLoaderRunnable.run(ThreadPool.java:397)
>     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1121)
>     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
>     at java.lang.Thread.run(Thread.java:769)
> The reason this fails is that the bundle's classloader's parent loader is the JVM's boot
classloader, not the ext loader - so it cannot load the com.sun.* classes that it needs (and
that it could in JDK6).
> One solution to this is to add the following line to <geronimo_home>/etc/system.properties:
> osgi.parentClassloader=ext
> This forces the bundle's to search the ext loader (in addition to the boot loader) on
boot delegated loads.
> Jarek suggested using the following system property, which similarly resovles the problem
(by forcing all bundles to use the framework classloader as its parent) and is a property
used in Karaf:
> org.osgi.framework.bundle.parent=framework

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message