Jetty 7 + MySQL Config [java.lang.ClassNotFoundException: org.mortbay.jetty.webapp.WebAppContext]

2022-09-04 00:40:51

我一直在尝试为Jetty配置c3p0 db连接池,但我一直在获得ClassNotFoundException:

2010-03-14 19:32:12.028:WARN::Failed startup of context WebAppContext@fccada@fccada/phpMyAdmin,file:/usr/local/jetty/webapps/phpMyAdmin/,file:/usr/local/jetty/webapps/phpMyAdmin/
java.lang.ClassNotFoundException: org.mortbay.jetty.webapp.WebAppContext
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:313)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:266)
    at org.eclipse.jetty.util.Loader.loadClass(Loader.java:90)
    at org.eclipse.jetty.xml.XmlConfiguration.nodeClass(XmlConfiguration.java:224)
    at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:187)
    at org.eclipse.jetty.webapp.JettyWebXmlConfiguration.configure(JettyWebXmlConfiguration.java:77)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:975)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:586)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:349)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:165)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:162)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:165)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:92)
    at org.eclipse.jetty.server.Server.doStart(Server.java:228)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
    at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:990)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:955)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.jetty.start.Main.invokeMain(Main.java:394)
    at org.eclipse.jetty.start.Main.start(Main.java:546)
    at org.eclipse.jetty.start.Main.parseCommandLine(Main.java:208)
    at org.eclipse.jetty.start.Main.main(Main.java:75)

我是Jetty的新手,我想最终让phpMyAdmin和WordPress通过Quercus和JDBC连接运行它。这是我的web.xml和jetty-web.xml文件,在我的WEB-INF目录中。

码头网.xml:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
    <New id="mysql" class="org.mortbay.jetty.plus.naming.Resource">
        <Arg>jdbc/mysql</Arg>
        <Arg>
            <New class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <Set name="Url">jdbc:mysql://localhost:3306/mysql</Set>
                <Set name="User">user</Set>
                <Set name="Password">pw</Set>
            </New>
        </Arg>
    </New>
</Configure>

网页.xml:

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
    <description>Caucho Technology's PHP Implementation</description>
    <resource-ref>
        <description>My DataSource Reference</description>
        <res-ref-name>jdbc/mysql</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

    <servlet>
        <servlet-name>Quercus Servlet</servlet-name>
        <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>

        <!--
            Specifies the encoding Quercus should use to read in PHP scripts.
        -->
        <init-param>
            <param-name>script-encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>

        <!--
            Tells Quercus to use the following JDBC database and to ignore the
            arguments of mysql_connect().
        -->
        <init-param>
            <param-name>database</param-name>
            <param-value>jdbc/mysql</param-value>
        </init-param>

        <init-param>
            <param-name>ini-file</param-name>
            <param-value>WEB-INF/php.ini</param-value>
        </init-param>

    </servlet>

    <servlet-mapping>
        <servlet-name>Quercus Servlet</servlet-name>
        <url-pattern>*.php</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.php</welcome-file>
    </welcome-file-list>
</web-app>

我猜我错过了几个罐子什么的。目前,我已经将以下jars放在我的WEB-INF / lib目录中:

c3p0-0.9.1.2.jar
commons-dbcp-1.4.jar
commons-pool-1.5.4.jar
mysql-connector-java-5.1.12-bin.jar

我也试图把这些罐子放在JETTY-HOME/lib/ext中,但无济于事......有人请告诉我我的配置有什么问题。我厌倦了挖掘Jetty蹩脚的文档。


答案 1

从Jetty 7开始,Jetty已经成为Eclipse基金会的一个项目。在将 Jetty 6 迁移到 Eclipse Jetty 7 的过程中,采用了新的包结构(参见 Jetty 7 重构页面):

  • 来自的类现在位于org.mortbay.jetty.webapporg.eclipse.jetty.webapp
  • 来自的类现在位于org.mortbay.jetty.plus.namingorg.eclipse.jetty.plus.jndi

因此,请尝试以下操作(未经测试):jetty-web.xml

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <New id="mysql" class="org.eclipse.jetty.plus.jndi.Resource">
        <Arg>jdbc/mysql</Arg>
        <Arg>
            <New class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <Set name="Url">jdbc:mysql://localhost:3306/mysql</Set>
                <Set name="User">user</Set>
                <Set name="Password">pw</Set>
            </New>
        </Arg>
    </New>
</Configure>

但是,如果你不需要Jetty 7的花哨的东西,我的建议是坚持使用Jetty 6(更稳定,更多的文档,更多的互联网资源,更简单,等等,换句话说,更少的痛苦)。


答案 2

我现在让配置工作。我正在发布已更正的码头网络.xml为Jetty 7。

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <New id="mysql" class="org.eclipse.jetty.plus.jndi.Resource">
        <Arg>jdbc/mysql</Arg>
        <Arg>
            <New class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <Set name="driverClass">com.mysql.jdbc.Driver</Set>
                <Set name="jdbcUrl">jdbc:mysql://localhost:3306/mysql</Set>
                <Set name="user">user</Set>
                <Set name="password">pw</Set>
            </New>
        </Arg>
    </New>
</Configure>

在 WEB-INF/lib 中使用以下 jar

c3p0-0.9.1.2.jar
commons-dbcp-1.4.jar
commons-pool-1.5.4.jar
mysql-connector-java-5.1.12-bin.jar


推荐