mvn:jetty unable to load WebAppContext

Viewed 3454

I have a weird situation, when trying to run jetty from eclipse. I updated my old project from jetty 7 to jetty 9.3.7.v20160115. But, now when starting the jetty:run with m2eclipse I got the following exception:

java.lang.IllegalArgumentException: Object of class 'org.eclipse.jetty.maven.plugin.JettyWebAppContext' is not of type 'org.eclipse.jetty.webapp.WebAppContext'. Object Class and type Class are from different loaders. in file:/xx/WebApp/src/main/webapp/WEB-INF/jetty-env.xml
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:295)
at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:245)
at org.eclipse.jetty.plus.webapp.EnvConfiguration.configure(EnvConfiguration.java:116)

From the message I can see that the two classes are not the same. But from the documentation I need to use the class org.eclipse.jetty.webapp.WebAppContext and org.eclipse.jetty.maven.plugin.JettyWebAppContext is a subclass of WebAppContext. So it is not clear for me if the condition in line 292

oClass.isInstance(obj)

is correctly used there.

I have defined in jetty-env.xml file the following entries:

<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">
 <New id="resInspector" class="org.eclipse.jetty.plus.jndi.Resource">
  <Arg><Ref refid="wac"/></Arg>
  <Arg>jdbc/xxx</Arg>
  <Arg>
   <New class="org.apache.commons.dbcp.BasicDataSource">
     <Set name="driverClassName">org.postgresql.Driver</Set>
     <Set name="url">jdbc:postgresql://xx:5432/xx</Set>
     <Set name="username">xx</Set>
     <Set name="password">xx</Set>
     <Set name="maxActive">100</Set>
     <Set name="maxIdle">30</Set>
     <Set name="maxWait">-1</Set>
     <Set name="defaultAutoCommit">false</Set>
   </New>
  </Arg>
 </New>
</Configure>

Next I added in web.xml those entries

<resource-ref>
  <description> JNDI resource</description>
  <res-ref-name>jdbc/xxx</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

thanks for any help.

Markus

2 Answers
Related