2015-10-30 7 views
6

में जेट्टी का उपयोग कर कनेक्शन पूलिंग Jetty सर्वर का उपयोग कर में ConnectionPooling की अवधारणा को लागू करने की कोशिश कर रहा हूं। मैंने निम्नलिखित ट्यूटोरियल पर देखा है। यह काम कर रहा है अगर मैं Tomcat सर्वर का उपयोग कर तैनात करता हूं, लेकिन Jetty मुझे असामान्य error दे रहा है। विवरण नीचे दिया गया है -ओरेकल

मैं एक वर्ग TestServlet.java कहा जाता है के रूप में परिभाषित किया है - जब मैं servlet वर्ग मैं चलाने

<?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> 

-

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.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 

मैंने अन्य stackoverflow धागे को देखने के बाद ग्रहण में WEB-INF/lib फ़ोल्डर में commons-dbcp-1.4.jar जोड़ा है। ऐसा करने के बाद भी, जब मैं Jetty पर तैनात करता हूं तो मुझे वही त्रुटि मिल रही है।

मैं jetty सर्वर संस्करण 8 का उपयोग कर रहा हूं eclipse luna 4.4.1 के साथ एकीकृत।

किसी भी मदद की बहुत सराहना की।

+0

'commons-dbcp' से एक अलग जार फ़ाइल में 'commons-pool' है? यह उस तरह से होता था, और आपको दोनों की आवश्यकता होती थी। – Thilo

+1

मैंने दोनों संस्करणों को जोड़ा। लेकिन यह मेरे लिए काम नहीं करता है। किसी भी अन्य स्मार्ट विचारों को मिला। @ थिलो – tpsaitwal

+0

यदि जेटी स्वयं पूल का उपयोग कर रहा है (आपके वेबपैप के विपरीत), तो आपको जेटी के अपने 'lib' फ़ोल्डर में जार फ़ाइलों को रखना होगा (' वेब-आईएनएफ/lib' में नहीं) । – Thilo

उत्तर

3

आप यह करने के लिए 3 तरीके हैं: आप अपने प्रोजेक्ट में Maven या Gradle उपयोग कर रहे हैं बस अपने pom.xml या build.gradle फ़ाइल (वैसे अनुशंसित) कॉमन्स-पूल निर्भरता जोड़ने

  1. आप का उल्लेख किया उपकरणों में से एक का उपयोग नहीं कर रहे हैं, तो वेब-INF/lib निर्देशिका
  2. पिछले एक $ {jettyHome} में जार जगह है/lib निर्देशिका में सही जार जगह

सुनिश्चित करें कि आप कोर का उपयोग कर रहे हैं आपके वर्तमान कॉमन्स-डीबीसीपी कार्यान्वयन के लिए कॉमन्स-पूल का रेक्ट संस्करण

+0

हां मैंने किया, लेकिन मुझे नहीं मिल रहा है कि यह शेष नाम 'env' के संदर्भ को कहां प्राप्त करता है। – tpsaitwal

+0

@Tejas Saitwal। [यहां] (http://stackoverflow.com/questions/26216792/jndi-lookup-failing-with-jetty-for-jdbc-connection-pooling-with-mysql) इसी तरह की jndi समस्या। यदि आपने सब कुछ ठीक से कॉन्फ़िगर किया है तो आपको 'डेटासोर्स = (डेटासोर्स) नया InitialContext() का उपयोग करके डेटा स्रोत को देखने में सक्षम होना चाहिए। (" जावा: comp/env/jdbc/dSTest "); '। – burovmarley

3

आप इसके बजाय टॉमकैट का उपयोग नहीं करते हैं। इसे यहां खोजें http://tomcat.apache.org/ :) नोट कि जेट्टी केवल तब उपयोग किया जा सकता है जब आपको स्थानीय ऐप विकास को आसान बनाने की आवश्यकता हो। https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html मेरा सुझाव है कि आप tomcat के लिए मूल बातें पढ़ना शुरू करें और जब आप चीजों को कैसे काम करते हैं, इसकी बुनियादी समझ हासिल करना शुरू करें, तो आपको Connection Pooling लागू करना शुरू करना चाहिए :) आशा है कि इससे मदद मिलती है।

0

जब मुझे ओरेकल कनेक्शन पूल की आवश्यकता होती है, तो मैं हमेशा ojdbcx.jar का उपयोग ucp.jar के साथ करता हूं। आप उन्हें here से डाउनलोड कर सकते हैं।

आप Google से कितने टन प्राप्त कर सकते हैं लेकिन एक आसान है (जेटी 6 के लिए) here