2015-10-30 8 views
6

Ich versuche, das Konzept von ConnectionPooling in Oracle mit Jetty Server zu implementieren. Ich habe folgendes versucht, was ich in einem Tutorial gesehen habe. Es funktioniert, wenn ich mit Tomcat Server bereitstellen, aber Jetty scheint mir eine ungewöhnliche error geben. Details sind unten -Verbindung Pooling mit Jetty, in Oracle

Ich habe eine Klasse TestServlet.java definiert als genannt -

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");} 
    } 
} 

}

Und mein Jetty-web.xml ist als -

<?xml version="1.0" encoding="UTF-8"?> 
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 
<New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource"> 
<Arg>java:comp/env</Arg> 
<Arg>jdbc/DSTest</Arg> 
<Arg> 
    <New class="org.apache.commons.dbcp.BasicDataSource"> 
     <Set name="driverClassName">oracle.jdbc.OracleDriver</Set> 
     <Set name="url">ConnectionUrl</Set> 
     <Set name="username">app_user</Set> 
     <Set name="password">abcd</Set> 
    </New> 
</Arg> 
</New> 
</Configure> 

Wenn ich die servlet Klasse betreibe ich bekommen ein Fehler der besagt -

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  [email protected]:8081 STARTING 
2015-10-30 14:22:51.172:WARN:oejuc.AbstractLifeCycle:FAILED [email protected]: 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 

Ich habe die commons-dbcp-1.4.jar zu meinem WEB-INF/lib Ordner in Eclipse nach dem Blick auf andere Stackoverflow Threads hinzugefügt. Auch nachdem ich dies getan habe, bekomme ich den gleichen Fehler, wenn ich auf Jetty bereitstellen.

Ich verwende jetty Server Version 8 integriert mit eclipse luna 4.4.1.

Jede Hilfe sehr geschätzt.

+0

Ist 'commons-pool' in einer separaten JAR-Datei von' commons-dbcp'? Früher war es so und du brauchst beides. – Thilo

+1

Ich habe beide Versionen hinzugefügt. Aber es hat nicht für mich funktioniert. Irgendwelche anderen schlauen Ideen. @ Thilo – tpsaitwal

+0

Wenn es Jetty selbst ist, die den Pool benutzt (im Gegensatz zu deiner Webapp), musst du die JAR-Dateien in Jettys eigenen 'lib'-Ordner (nicht in' WEB-INF/lib') legen . – Thilo

Antwort

3

Sie haben 3 Möglichkeiten, es zu tun:

  1. Wenn Sie Maven oder gradle in Ihrem Projekt verwenden einfach commons-pool Abhängigkeit zu Ihrer pom.xml oder build.gradle Datei (empfohlene Methode) in
  2. Wenn Sie nicht einer der genannten Werkzeuge verwenden platzieren richtige Glas im WEB-INF/lib
  3. Das letzte Glas in $ {jettyHome}/lib

Stellen Sie sicher, dass Sie zu platzieren ist benutzen cor Rect-Version des Commons-Pool für Ihre aktuelle commons-dbcp Implementierung

+0

Ja, habe ich, aber ich bekomme nicht, wo es den Kontext für den verbleibenden Namen 'env' findet. – tpsaitwal

+0

@ Tejas Saitwal. [http://stackoverflow.com/questions/26216792/jndi-lookup-failing-with-jetty-for-jdb-connection-pooling-with-mysql) Ähnliche Jndi Problem. Wenn Sie alles richtig konfiguriert haben, sollten Sie in der Lage sein, die Datenquelle zu suchen, indem Sie 'datasource = (DataSource) new InitialContext(). Lookup (" java: comp/env/jdbc/DSTest ");'. – burovmarley

3

Sie verwenden Sie nicht nur Tomcat stattdessen. finden Sie es hier http://tomcat.apache.org/ :) Hinweis dieser Steg ist nur gut zu verwenden, wenn Sie die lokale App-Entwicklung erleichtern müssen. https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html Ich schlage vor, Sie fangen an, die Grundlagen für tomcat zu lesen und wie Sie beginnen, ein grundlegendes Verständnis der Dinge zu gewinnen, sollten Sie anfangen zu implementieren Connection Pooling :) Hope this helps.

0

Wenn ich einen Oracle-Verbindungspool brauche, verwende ich immer ojdbcx.jar mit ucp.jar. Sie können sie von here herunterladen.

Sie können Tonnen von How-tos von Google finden, aber es gibt eine einfache (für Jetty 6) here.