2012-12-09 15 views
13

के साथ मूल डीबी कनेक्शन पूल मैं अपना पहला कनेक्शन पूल बनाने की कोशिश कर रहा हूं। मैं टॉमकैट 7 और एक माईएसक्यूएल डीबी के साथ जावा वेब एपिकेशन बना रहा हूं, और मैं सबसे सरल कनेक्शन पूल बनाना चाहता हूं। मैंने कई ट्यूटोरियल्स पर एक नज़र डाली है लेकिन यह मेरे लिए वास्तव में स्पष्ट नहीं है, इसलिए मैं आपको यह पुष्टि करना चाहता हूं कि मैं अच्छा कर रहा हूं या नहीं।जावा और टॉमकैट 7

मैं एक कनेक्शन पूल प्रबंधक के रूप में निम्नलिखित वर्ग लिखा है:

package dao.mysql; 

import java.sql.Connection; 
import java.sql.SQLException; 
import org.apache.tomcat.jdbc.pool.DataSource; 
import org.apache.tomcat.jdbc.pool.PoolProperties; 

public class MySQLConnectionPool { 

    private static DataSource datasource; 
    private static String driver = "com.mysql.jdbc.Driver"; 
    private static String url = "jdbc:mysql://localhost:3306/mydb"; 
    private static String username = "user"; 
    private static String password = "password"; 

    public MySQLConnectionPool() { 
     datasource = new DataSource(configurePoolProperties(driver, url, username, password)); 
    } 

    private PoolProperties configurePoolProperties(String driver, String url, String username, String password) { 
     PoolProperties properties = new PoolProperties(); 
     properties.setDriverClassName(driver); 
     properties.setUrl(url); 
     properties.setUsername(username); 
     properties.setPassword(password); 
     return properties; 
    } 

    public static synchronized Connection getConnection() { 
     Connection connection = null; 
     try { 
      connection = datasource.getConnection(); 
     } catch (SQLException ex) { 
      System.out.println("Error while getting a connection from the pool! \nSQL state:" + ex.getSQLState() + "\nMESSAGE" + ex.getMessage()); 
     } 
     return connection; 
    } 
} 

मैं स्थिर गुणों के बारे में यकीन नहीं है और न ही सिंक्रनाइज़

और मुझे पूल के "क्लाइंट" वर्गों के बारे में निश्चित नहीं है। मैं समझता हूँ कि वे केवल है

Connection con = MySQLConnectionPool.getConnection(); 

और अंत का उपयोग कर एक कनेक्शन लेने के लिए इस संबंध

con.close(); 

का उपयोग कर बंद और बस हो गया? और यह भी करने के लिए कोई आसान या बेहतर तरीका है?

बहुत बहुत धन्यवाद!

उत्तर

18

यह करने का गलत तरीका है।

टोमकैट में पहले से ही एक कनेक्शन पूल है और आप के माध्यम से conf निर्देशिका में किसी भी कोड के बिना कॉन्फ़िगर और सेटअप कर सकते हैं।

एक बार इसे परिभाषित करने के बाद, आपको अपने कोड में जेएनडीआई डेटासोर्स को देखने की ज़रूरत है। सभी को हार्डकोडिंग (और पहिया का पुन: आविष्कार) एक बहुत बुरा विचार है।

कॉन्फ़िगर कैसे एक JNDI डेटा स्रोत के मैनुअल की जाँच जानने के लिए: http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html

बिलाव मैनुअल भी कैसे पूल से कनेक्शन प्राप्त करने के लिए एक उदाहरण है:

InitialContext cxt = new InitialContext(); 
DataSource ds = (DataSource) cxt.lookup("java:/comp/env/jdbc/dsname"); 

जहां dsname है नाम context.xml

+0

में प्रदान किया गया नाम एक डीएओ * डेटासोर्स * प्रबंधित नहीं करता है, यह बस * इसका उपयोग करता है। आप जावाईई ट्यूटोरियल भी पढ़ना चाहेंगे: http://docs.oracle.com/javaee/6/tutorial/doc/bncjj.html –

+0

यदि कनेक्शन पूल को टॉमकैट में जेएनडीआई डाटासोर्स के रूप में कॉन्फ़िगर किया गया है और संसाधन की फैक्ट्री विशेषता है 'org.apache.tomcat.jdbc.pool.DataSourceFactory' है, क्लास जावा से डेटास्रोत तक पहुंचने पर डेटासोर्स प्रकार क्या है? मैं 'org.apache.tomcat.jdbc.pool.DataSource' का उपयोग करता हूं, या यह' javax.sql.DataSource' होना चाहिए (बाद वाला संसाधन के प्रकार 'विशेषता' का मान है? – Sefran2

1

JNDI Datasource HOW-TO और Tomcat JDBC Connection Pool टॉमकैट दस्तावेज़ देखें। टोमकैट को देना यह बेहतर है क्योंकि विशेष रूप से यह वर्ग लोडर रिसाव से बचाता है।

संबंधित मुद्दे