Hi,

I'm running gerrit as an webapp under jetty with the following gerrit.xml file in jetty-base/webapps directory:

<Configure id="wacGerrit" class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/gerrit</Set>
  <Set name="war">C:\Users\thomas\jetty-base\war\gerrit-2.11.3.war</Set>

  <New id="datasourceGerrit" class="org.eclipse.jetty.plus.jndi.Resource">
    <Arg><Ref id="wacGerrit"/></Arg>
    <Arg>jdbc/ReviewDb</Arg>
    <Arg>
      <New class="org.h2.jdbcx.JdbcDataSource">
        <Set name="url">jdbc:h2:file:gerrit/db/ReviewDB</Set>
      </New>
    </Arg>
  </New>

  <Set name="securityHandler">
    <New class="org.eclipse.jetty.security.ConstraintSecurityHandler">
     <Set name="loginService">
      <New class="org.eclipse.jetty.security.HashLoginService">
            <Set name="name">GerritRealm</Set>
<Set name="config"><SystemProperty name="jetty.base" default="."/>/etc/login-GerritRealm.properties</Set>
      </New>
     </Set>
    </New>
  </Set>
</Configure>

I did put the h2-1.3.176.jar in jetty-base/lib/ext.

When I start jetty freshly the class org.h2.jdbcx.JdbcDataSource is loaded from classloader "Classpath$Loader" (the "lib/ext classloader")
Stack trace is:

Thread [main] (Suspended)
        owns: Scanner  (id=53)
        owns: Object  (id=54)
        owns: Object  (id=55)
        owns: Object  (id=56)
        owns: Object  (id=57)
        Class<T>.getConstructors() line: not available [local variables 
unavailable]
        TypeUtil.construct(Class<?>, Object[]) line: 557
XmlConfiguration$JettyXmlConfiguration.newObj(Object, XmlParser$Node) line: 787
        XmlConfiguration$JettyXmlConfiguration.itemValue(Object, Object) line: 
1233
XmlConfiguration$JettyXmlConfiguration.value(Object, XmlParser$Node) line: 1138 XmlConfiguration$JettyXmlConfiguration.newObj(Object, XmlParser$Node) line: 766 XmlConfiguration$JettyXmlConfiguration.configure(Object, XmlParser$Node, int) line: 423
        XmlConfiguration$JettyXmlConfiguration.configure() line: 358
        WebAppProvider$1(XmlConfiguration).configure() line: 259
        WebAppProvider.createContextHandler(App) line: 285
        App.getContextHandler() line: 105
        StandardDeployer.processBinding(Node, App) line: 36
        AppLifeCycle.runBindings(Node, App, DeploymentManager) line: 188
DeploymentManager.requestAppGoal(DeploymentManager$AppEntry, String) line: 499
        DeploymentManager.addApp(App) line: 147
        WebAppProvider(ScanningAppProvider).fileAdded(String) line: 180
        WebAppProvider.fileAdded(String) line: 459
        ScanningAppProvider$1.fileAdded(String) line: 64
        Scanner.reportAddition(String) line: 610
Scanner.reportDifferences(Map<String,TimeNSize>, Map<String,TimeNSize>) line: 529
        Scanner.scan() line: 392
        Scanner.doStart() line: 313
        Scanner(AbstractLifeCycle).start() line: 68
        WebAppProvider(ScanningAppProvider).doStart() line: 150
        WebAppProvider(AbstractLifeCycle).start() line: 68
        DeploymentManager.startAppProvider(AppProvider) line: 561
        DeploymentManager.doStart() line: 236
        DeploymentManager(AbstractLifeCycle).start() line: 68
        Server(ContainerLifeCycle).start(LifeCycle) line: 132
        Server.start(LifeCycle) line: 405
        Server(ContainerLifeCycle).doStart() line: 114
        Server(AbstractHandler).doStart() line: 61
        Server.doStart() line: 372
        Server(AbstractLifeCycle).start() line: 68
        XmlConfiguration$1.run() line: 1510
AccessController.doPrivileged(PrivilegedAction<T>) line: not available [native method]
        XmlConfiguration.main(String...) line: 1435
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
        NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not 
available
        Method.invoke(Object, Object...) line: not available
        Main.invokeMain(ClassLoader, StartArgs) line: 214
        Main.start(StartArgs) line: 457
        Main.main(String[]) line: 75

When I restart the webapp context via jconsole JMX I get an exception:

java.lang.NoSuchMethodException: class org.h2.jdbcx.JdbcDataSource.setUrl(class java.lang.String) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.set(XmlConfiguration.java:591) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:411) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:799) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.itemValue(XmlConfiguration.java:1233) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.value(XmlConfiguration.java:1138) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:766) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:423) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:358) at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:259) at org.eclipse.jetty.deploy.providers.WebAppProvider.createContextHandler(WebAppProvider.java:285)
        at org.eclipse.jetty.deploy.App.getContextHandler(App.java:105)
at org.eclipse.jetty.deploy.bindings.StandardDeployer.processBinding(StandardDeployer.java:36)
        at 
org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:188)
at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:499) at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:147) at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileChanged(ScanningAppProvider.java:198) at org.eclipse.jetty.deploy.providers.WebAppProvider.fileChanged(WebAppProvider.java:416) at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileChanged(ScanningAppProvider.java:70)
        at org.eclipse.jetty.util.Scanner.reportChange(Scanner.java:664)
        at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:532)
        at org.eclipse.jetty.util.Scanner.scan(Scanner.java:392)
        at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:329)
        at java.util.TimerThread.mainLoop(Unknown Source)
        at java.util.TimerThread.run(Unknown Source)

Because the class org.h2.jdbcx.JdbcDataSource is loaded from the WebAppClassLoader.
Stack trace is:

Daemon Thread [Scanner-0] (Suspended (breakpoint at line 591 in XmlConfiguration$JettyXmlConfiguration))
        owns: Scanner  (id=53)
        XmlConfiguration$JettyXmlConfiguration.set(Object, XmlParser$Node) 
line: 591
XmlConfiguration$JettyXmlConfiguration.configure(Object, XmlParser$Node, int) line: 411 XmlConfiguration$JettyXmlConfiguration.newObj(Object, XmlParser$Node) line: 799
        XmlConfiguration$JettyXmlConfiguration.itemValue(Object, Object) line: 
1233
XmlConfiguration$JettyXmlConfiguration.value(Object, XmlParser$Node) line: 1138 XmlConfiguration$JettyXmlConfiguration.newObj(Object, XmlParser$Node) line: 766 XmlConfiguration$JettyXmlConfiguration.configure(Object, XmlParser$Node, int) line: 423
        XmlConfiguration$JettyXmlConfiguration.configure() line: 358
        WebAppProvider$1(XmlConfiguration).configure() line: 259
        WebAppProvider.createContextHandler(App) line: 285
        App.getContextHandler() line: 105
        StandardDeployer.processBinding(Node, App) line: 36
        AppLifeCycle.runBindings(Node, App, DeploymentManager) line: 188
DeploymentManager.requestAppGoal(DeploymentManager$AppEntry, String) line: 499
        DeploymentManager.addApp(App) line: 147
        WebAppProvider(ScanningAppProvider).fileChanged(String) line: 198
        WebAppProvider.fileChanged(String) line: 416
        ScanningAppProvider$1.fileChanged(String) line: 70
        Scanner.reportChange(String) line: 664
Scanner.reportDifferences(Map<String,TimeNSize>, Map<String,TimeNSize>) line: 532
        Scanner.scan() line: 392
        Scanner$1.run() line: 329
        TimerThread.mainLoop() line: not available
        TimerThread.run() line: not available

looking into gerrit.war file it contains also the h2 jar file, version 1.3.174 (I did put 1.3.176 in lib/ext...) in WEB-INF/lib.
So I wonder why the restart of the webapp context doesn't work?

Shouldn't the restart also take the JNDI binding from the lib/ext classloader?

Bug or feature? Any idea how to fix this?

Jetty version is:
2015-10-03 21:50:54.303:INFO:oejs.Server:main: jetty-9.3.3.v20150827



_______________________________________________
jetty-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to