在Oracle中使用Jetty进行连接池

我正在尝试使用Jetty服务器在Oracle实现ConnectionPooling的概念。 我尝试过以下在教程中看到的内容。 如果我使用Tomcat服务器部署它是有效的,但Jetty似乎给了我一个不寻常的error 。 详情如下 –

我有一个名为TestServlet.java的类定义为 –

 import java.io.IOException; import java.sql.*; import javax.naming.*; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import javax.sql.DataSource; @SuppressWarnings("serial") @WebServlet("/TestServlet") public class TestServlet extends HttpServlet { public TestServlet() throws ServletException{ System.out.println("Constructor"); init(); } public DataSource dataSource; private Connection con; private Statement statement; public void init() throws ServletException { System.out.println("inside init method"); try { // Get DataSource Context initContext = new InitialContext(); System.out.println("Before envcontext"); Context envContext = (Context)initContext.lookup("java:comp/env"); System.out.println("After envcontext"); dataSource = (DataSource)envContext.lookup("jdbc/DSTest"); System.out.println(dataSource.toString()); } catch (NamingException e) { System.out.println("Exception in try"); e.printStackTrace(); } } public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("Request: "+req+"\tResponse: "+resp); int i=0; ResultSet resultSet = null; try { // Get Connection and Statement con = dataSource.getConnection(); statement = con.createStatement(); String query = "SELECT * FROM USER"; resultSet = statement.executeQuery(query); while (resultSet.next()) { ++i; System.out.println(i+":\nID:"+resultSet.getString("ID") +"\nEmail:"+ resultSet.getString("UEMAIL") +"\nPassword:" + resultSet.getString("PASSWORD")+"\nFlag:"+resultSet.getShort("FLAG") +"\n"); } } catch (SQLException e) { System.out.println("EXCEPTIOn"); e.printStackTrace(); }finally { try { if(null!=resultSet)resultSet.close();} catch (SQLException e) {e.printStackTrace();System.out.println("1");} try { if(null!=statement)statement.close();} catch (SQLException e) {e.printStackTrace();System.out.println("2");} try { if(null!=con)con.close();} catch (SQLException e) {e.printStackTrace();System.out.println("3");} } } 

}

我的Jetty-web.xml是 –

    java:comp/env jdbc/DSTest   oracle.jdbc.OracleDriver ConnectionUrl app_user abcd     

当我运行servlet类时,我得到一个错误,说 –

 java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2658) at java.lang.Class.getConstructors(Class.java:1638) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:748) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.itemValue(XmlConfiguration.java:1078) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.value(XmlConfiguration.java:993) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:741) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:383) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:317) at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:276) at org.eclipse.jetty.webapp.JettyWebXmlConfiguration.configure(JettyWebXmlConfiguration.java:100) at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:427) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1207) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:610) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:453) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:89) at org.eclipse.jetty.server.Server.doStart(Server.java:262) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at runjettyrun.Bootstrap.main(Bootstrap.java:80) Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:415) at runjettyrun.ProjectClassLoader.loadClass(ProjectClassLoader.java:92) at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2658) at java.lang.Class.getConstructors(Class.java:1638) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:748) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.itemValue(XmlConfiguration.java:1078) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.value(XmlConfiguration.java:993) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:741) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:383) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:317) at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:276) at org.eclipse.jetty.webapp.JettyWebXmlConfiguration.configure(JettyWebXmlConfiguration.java:100) at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:427) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1207) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:610) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:453) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:89) at org.eclipse.jetty.server.Server.doStart(Server.java:262) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at runjettyrun.Bootstrap.main(Bootstrap.java:80) 2015-10-30 14:22:51.172:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8081 STARTING 2015-10-30 14:22:51.172:WARN:oejuc.AbstractLifeCycle:FAILED org.eclipse.jetty.server.Server@7857fe2: java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2658) at java.lang.Class.getConstructors(Class.java:1638) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:748) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.itemValue(XmlConfiguration.java:1078) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.value(XmlConfiguration.java:993) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:741) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:383) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:317) at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:276) at org.eclipse.jetty.webapp.JettyWebXmlConfiguration.configure(JettyWebXmlConfiguration.java:100) at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:427) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1207) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:610) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:453) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:89) at org.eclipse.jetty.server.Server.doStart(Server.java:262) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at runjettyrun.Bootstrap.main(Bootstrap.java:80) Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:415) at runjettyrun.ProjectClassLoader.loadClass(ProjectClassLoader.java:92) at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2658) at java.lang.Class.getConstructors(Class.java:1638) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:748) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.itemValue(XmlConfiguration.java:1078) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.value(XmlConfiguration.java:993) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:741) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:383) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:317) at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:276) at org.eclipse.jetty.webapp.JettyWebXmlConfiguration.configure(JettyWebXmlConfiguration.java:100) at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:427) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1207) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:610) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:453) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:89) at org.eclipse.jetty.server.Server.doStart(Server.java:262) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at runjettyrun.Bootstrap.main(Bootstrap.java:80) Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2658) at java.lang.Class.getConstructors(Class.java:1638) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:748) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.itemValue(XmlConfiguration.java:1078) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.value(XmlConfiguration.java:993) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:741) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:383) at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:317) at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:276) at org.eclipse.jetty.webapp.JettyWebXmlConfiguration.configure(JettyWebXmlConfiguration.java:100) at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:427) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1207) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:610) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:453) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:89) at org.eclipse.jetty.server.Server.doStart(Server.java:262) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at runjettyrun.Bootstrap.main(Bootstrap.java:80) Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:415) at runjettyrun.ProjectClassLoader.loadClass(ProjectClassLoader.java:92) ... 20 more 

在查看其他stackoverflow线程后,我在eclipse中将commons-dbcp-1.4.jar到我的WEB-INF/lib文件夹中。 即使这样做,我在Jetty部署时也会遇到同样的错误。

我正在使用与eclipse luna 4.4.1集成的jetty服务器版本8。

任何帮助非常感谢。

你有3种方法可以做到:

  1. 如果您在项目中使用maven或gradle,只需将commons-pool依赖项添加到pom.xml或build.gradle文件(推荐方式)
  2. 如果您没有使用上述工具之一,请在WEB-INF / lib目录中放置正确的jar
  3. 最后一个是将jar放在$ {jettyHome} / lib目录中

确保为当前的commons-dbcp实现使用正确版本的commons-pool

你不是只使用tomcat而已。 在这里找到它http://tomcat.apache.org/ 🙂 请注意 ,只有当您需要使本地应用程序开发更容易时,才能使用jetty。 https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html我建议你开始阅读tomcat的基础知识,当你开始基本了解工作原理时,你应该开始实现Connection Pooling :)希望这会Connection Pooling帮助。

当我需要Oracle连接池时,我总是将ojdbcx.jar与ucp.jar一起使用。 你可以从这里下载它们。

你可以在谷歌找到大量的方法,但这里有一个简单的(对于Jetty 6)。