สภาพแวดล้อมการกำหนดค่าของพูลการเชื่อมต่อฐานข้อมูล SQL Server2000 ของ Tomcat ใน JSP:
1. ฐานข้อมูล: Microsoft SQL Server 2000
2. โปรแกรมควบคุมฐานข้อมูล: net.sourceforge.jtds.jdbc.Driver
ภาพรวม JNDI (การตั้งชื่อ Java และอินเทอร์เฟซไดเรกทอรี):
Tomcat4(5) จัดเตรียม JNDI - ตัวอย่างการใช้งาน InitialContext ที่เข้ากันได้กับบริการแอปพลิเคชัน Java Enterprise Edition ข้อมูลเริ่มต้นถูกตั้งค่าไว้ในไฟล์ $CATALINA_HOME/conf/server.xml และอาจอ้างอิงโดยองค์ประกอบต่อไปนี้ในคำอธิบายสภาพแวดล้อมของแอปพลิเคชันเว็บ (/WEB-INF/web.xml):
1)
2)
3)
InitialContext ถูกตั้งค่าเมื่อมีการเตรียมใช้งานเว็บแอปพลิเคชันเพื่อรองรับส่วนประกอบของเว็บแอปพลิเคชัน รายการและทรัพยากรทั้งหมดอยู่ในส่วน java:comp/env ของเนมสเปซ JNDI คลิกที่ URL ต่อไปนี้เพื่อดูข้อมูลเพิ่มเติม:
1) การตั้งชื่อ Java และอินเทอร์เฟซไดเรกทอรี
2) ข้อมูลจำเพาะแพลตฟอร์ม J2EE
การตั้งค่ารีซอร์ส JNDI เมื่อต้องการตั้งค่ารีซอร์ส JNDI ให้ใช้ตัวระบุต่อไปนี้ในไฟล์ $CATALINA_HOME/conf/server.xml:
1) <สภาพแวดล้อม>--ตั้งชื่อและค่าของรายการตัวแปร JNDI InitialContext ในโดเมน (เทียบเท่ากับ
2) <ทรัพยากร>--ตั้งชื่อและประเภทของทรัพยากรที่พร้อมใช้งานสำหรับแอปพลิเคชัน (เทียบเท่ากับ
3)
4)
ตัวระบุข้างต้นต้องอยู่ระหว่าง
นอกจากนี้ ชื่อและค่าที่ตั้งไว้ใน Web Application Descriptor (/WEB-INF/web.xml) จะถูกตั้งค่าในบริบทเริ่มต้นด้วย เมื่อเปิดใช้งานโดยค่าองค์ประกอบ
สามารถตั้งค่าตัวแปรส่วนกลางได้ใน
ภาพรวมพูลการเชื่อมต่อฐานข้อมูล:
การเชื่อมต่อฐานข้อมูลเป็นทรัพยากรที่สำคัญ มีจำกัด และมีราคาแพง โดยเฉพาะในเว็บแอปพลิเคชันที่มีผู้ใช้หลายราย การจัดการการเชื่อมต่อฐานข้อมูลสามารถส่งผลกระทบอย่างมากต่อความสามารถในการปรับขนาดและความทนทานของแอปพลิเคชันทั้งหมด และส่งผลต่อตัวบ่งชี้ประสิทธิภาพของโปรแกรม พูลการเชื่อมต่อฐานข้อมูลถูกเสนอเพื่อแก้ไขปัญหานี้
พูลการเชื่อมต่อฐานข้อมูลมีหน้าที่ในการจัดสรร จัดการ และปล่อยการเชื่อมต่อฐานข้อมูล อนุญาตให้แอปพลิเคชันใช้การเชื่อมต่อฐานข้อมูลที่มีอยู่ซ้ำ แทนที่จะสร้างการเชื่อมต่อฐานข้อมูลใหม่ซึ่งมีเวลาว่างเกินเวลาที่ไม่ได้ใช้งานสูงสุดเพื่อหลีกเลี่ยงข้อผิดพลาดเนื่องจากความล้มเหลวในการเปิดตัว การเชื่อมต่อฐานข้อมูลเกิดจากการขาดการเชื่อมต่อฐานข้อมูล เทคโนโลยีนี้สามารถปรับปรุงประสิทธิภาพการทำงานของฐานข้อมูลได้อย่างมาก
พูลการเชื่อมต่อฐานข้อมูลจะสร้างการเชื่อมต่อฐานข้อมูลจำนวนหนึ่งและใส่ลงในพูลการเชื่อมต่อระหว่างการเตรียมใช้งาน จำนวนการเชื่อมต่อฐานข้อมูลเหล่านี้ถูกกำหนดโดยจำนวนการเชื่อมต่อฐานข้อมูลขั้นต่ำ ไม่ว่าจะใช้การเชื่อมต่อฐานข้อมูลเหล่านี้หรือไม่ก็ตาม พูลการเชื่อมต่อจะรับประกันได้ว่าจะมีการเชื่อมต่อจำนวนเท่านี้เป็นอย่างน้อย จำนวนการเชื่อมต่อฐานข้อมูลสูงสุดในกลุ่มการเชื่อมต่อจะจำกัดจำนวนการเชื่อมต่อสูงสุดที่พูลการเชื่อมต่อสามารถใช้ได้ เมื่อจำนวนการเชื่อมต่อที่ร้องขอโดยแอปพลิเคชันจากกลุ่มการเชื่อมต่อเกินจำนวนการเชื่อมต่อสูงสุด คำขอเหล่านี้จะถูกเพิ่มลงใน รอคิว การตั้งค่าจำนวนการเชื่อมต่อขั้นต่ำและจำนวนการเชื่อมต่อสูงสุดในกลุ่มการเชื่อมต่อฐานข้อมูลควรคำนึงถึงปัจจัยต่อไปนี้:
1) จำนวนการเชื่อมต่อขั้นต่ำคือจำนวนการเชื่อมต่อฐานข้อมูลที่ดูแลโดยพูลการเชื่อมต่อ ดังนั้นหากแอปพลิเคชันไม่ได้ใช้การเชื่อมต่อฐานข้อมูลจำนวนมาก ทรัพยากรการเชื่อมต่อฐานข้อมูลจำนวนมากจะสูญเปล่า
2) จำนวนการเชื่อมต่อสูงสุดคือจำนวนการเชื่อมต่อสูงสุดที่พูลการเชื่อมต่อสามารถใช้ได้ หากคำขอเชื่อมต่อฐานข้อมูลเกินจำนวนนี้ คำขอเชื่อมต่อฐานข้อมูลในภายหลังจะถูกเพิ่มลงในคิวที่รอ ซึ่งจะส่งผลต่อการดำเนินการฐานข้อมูลในภายหลัง
3) หากความแตกต่างระหว่างจำนวนการเชื่อมต่อขั้นต่ำและจำนวนการเชื่อมต่อสูงสุดนั้นมากเกินไป คำขอเชื่อมต่อครั้งแรกจะทำกำไรได้ และคำขอการเชื่อมต่อที่ตามมาที่เกินจำนวนการเชื่อมต่อขั้นต่ำจะเทียบเท่ากับการสร้างการเชื่อมต่อฐานข้อมูลใหม่ อย่างไรก็ตาม การเชื่อมต่อฐานข้อมูลเหล่านี้ที่มีขนาดใหญ่กว่าจำนวนการเชื่อมต่อขั้นต่ำจะไม่ถูกปล่อยทันทีหลังการใช้งาน การเชื่อมต่อเหล่านั้นจะถูกวางไว้ในกลุ่มการเชื่อมต่อเพื่อรอการใช้ซ้ำหรือถูกปล่อยหลังจากการหมดเวลาที่ไม่ได้ใช้งาน
ข้อกำหนดเบื้องต้นสำหรับการกำหนดค่าพูลการเชื่อมต่อฐานข้อมูล Tomcat:
1. ต้องติดตั้งสภาพแวดล้อมรันไทม์ Java
2. ต้องมีเซิร์ฟเวอร์ฐานข้อมูล SQL Server2000 (ไม่จำเป็นต้องอยู่ในเครื่อง)
3. คุณต้องมี jtds.jar และวางไว้ในไดเร็กทอรี $CATALINA_HOME/common/lib (ที่นี่เท่านั้น) ถูกใช้เนื่องจากไดรเวอร์ Java SQL Server ของ Microsoft ไม่รองรับการสืบค้นรองซึ่งสามารถพบได้ทางออนไลน์ ปัจจุบันใช้ jtds-0.6.jar
ตั้งค่าพูลการเชื่อมต่อฐานข้อมูลใน $CATALINA_HOME/conf/server.xml:
ต่อไปนี้คือรหัสการกำหนดค่า ซึ่งจะต้องอยู่ระหว่าง
<เส้นทางบริบท = "/ คุณภาพ" docBase = "คุณภาพ" debug = "0" reloadable = "true" crossContext = "true">
<ชื่อทรัพยากร = "jdbc/connectDB" auth = "คอนเทนเนอร์" type = "javax.sql.DataSource"/>
<ชื่อ ResourceParams = "jdbc/connectDB">
<พารามิเตอร์>
<ค่า>100ค่า>
พารามิเตอร์>
<พารามิเตอร์>
<ค่า>30ค่า>
พารามิเตอร์>
<พารามิเตอร์>
พารามิเตอร์>
<พารามิเตอร์>
พารามิเตอร์>
<พารามิเตอร์>
<ค่า>60ค่า>
พารามิเตอร์>
<พารามิเตอร์>
พารามิเตอร์>
<พารามิเตอร์>
<ชื่อ>โรงงานชื่อ>
พารามิเตอร์>
<พารามิเตอร์>
<ชื่อ>ชื่อผู้ใช้ชื่อ>
พารามิเตอร์>
<พารามิเตอร์>
<ชื่อ>รหัสผ่านชื่อ>
พารามิเตอร์>
<พารามิเตอร์>
<ชื่อ>ชื่อไดรเวอร์คลาสชื่อ>
พารามิเตอร์>
<พารามิเตอร์>
<ชื่อ>URLชื่อ>
พารามิเตอร์>
พารามิเตอร์ทรัพยากร>
บริบท>
ต่อไปนี้เป็นคำอธิบายของพารามิเตอร์บางตัว:
<เส้นทางบริบท = "/ คุณภาพ" docBase = "คุณภาพ" debug = "0" reloadable = "true" crossContext = "true">
ใน:
1) เส้นทางระบุเส้นทาง ไดเร็กทอรีคุณภาพที่ตั้งไว้ที่นี่คือ $CATALINA_HOME/webapps
2) ไดเร็กทอรีรากของไฟล์ docBase
3) reloader ไม่ว่าจะคอมไพล์ใหม่เมื่อมีการอัพเดตหน้าเว็บหรือไม่
4) maxActive จำนวนการเชื่อมต่อฐานข้อมูลสูงสุดในกลุ่มการเชื่อมต่อ ตั้งค่าเป็น 0 โดยไม่มีขีดจำกัด
5) maxIdle เวลาว่างสูงสุดของการเชื่อมต่อฐานข้อมูล หลังจากเวลาว่างนี้ การเชื่อมต่อฐานข้อมูลจะถูกทำเครื่องหมายว่าไม่พร้อมใช้งานแล้วจึงปล่อย ตั้งค่าเป็น 0 โดยไม่มีขีดจำกัด
6) maxWait คือเวลารอสูงสุดสำหรับการสร้างการเชื่อมต่อ หากเกินเวลานี้ จะได้รับข้อยกเว้น ตั้งค่าเป็น -1 เพื่อระบุว่าไม่มีขีดจำกัด
7) ลบการรีไซเคิลที่ถูกทิ้งร้าง (มักจะลืมที่จะปล่อย) การเชื่อมต่อฐานข้อมูลลงในกลุ่มการเชื่อมต่อ
8) ลบ AbandonedTimeout หากไม่ได้ใช้การเชื่อมต่อฐานข้อมูลเป็นเวลานาน จะถือว่าละทิ้งและกลับสู่พูลการเชื่อมต่อ
9) logAbandoned บันทึกการรีไซเคิลการเชื่อมต่อฐานข้อมูลที่ถูกละทิ้ง
10) ไดรเวอร์ClassName ไดรเวอร์ JDBC
11) สตริงการเชื่อมต่อฐานข้อมูล url ตั้งค่าทรัพยากรที่อ้างอิงใน $CATALINA_HOME/webapps/quality/WEB-INF/web.xml:
ต่อไปนี้เป็นรหัสการกำหนดค่าซึ่งจะต้องวางไว้ใน
<ทรัพยากร-อ้างอิง>
ทรัพยากร-อ้างอิง>
ต่อไปนี้เป็นคำอธิบายที่จำเป็นของพารามิเตอร์:
1) คำอธิบาย คำอธิบายทรัพยากรที่อ้างอิง
2) ชื่อทรัพยากรชื่อซ้ำ ดู
3) ประเภททรัพยากรประเภท res ดู
การใช้รีซอร์สใน JSP:
นี่เป็นส่วนหนึ่งของโค้ดสำหรับไฟล์หน้าเว็บ jsp ในไดเร็กทอรีย่อยบางรายการภายใต้ $CATALINA_HOME/webapps/quality:
<%@ หน้า contentType="text/html;charset=GBK"%>
<%@ หน้า errorPage="error.jsp"%>
<%@ นำเข้าหน้า = "javax.naming.*"%>
<%@ หน้านำเข้า = "javax.sql.*"%>
<%@ หน้านำเข้า = "java.sql.*"%>
<หัว>
หัว>
<ร่างกาย>
<%
………………
………………
// การทำงานของฐานข้อมูล
บริบท ctx=null;
การเชื่อมต่อ cnn=null;
คำสั่ง stmt=null;
ResultSet rs=null;
พยายาม
-
ctx=new InitialContext();
ถ้า(ctx==null)
โยนข้อยกเว้นใหม่ ("ไม่มีสภาพแวดล้อมที่ตรงกัน");
แหล่งข้อมูล ds=(แหล่งข้อมูล)ctx.lookup("java:comp/env/jdbc/connectDB");
ถ้า(ds==null)
โยนข้อยกเว้นใหม่ ("ไม่มีฐานข้อมูลที่ตรงกัน");
cnn=ds.getConnection();
stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery("เลือก * จาก table1");
………………
………
}
ในที่สุด
-
ถ้า(rs!=null)
rs.ปิด();
ถ้า(stmt!=null)
stmt.ปิด();
ถ้า(cnn!=null)
cnn.ปิด();
ถ้า(ctx!=null)
ctx.ปิด();
-
-
ร่างกาย>
คำอธิบายรหัส:
แหล่งข้อมูล ds=(แหล่งข้อมูล)ctx.lookup("java:comp/env/jdbc/connectDB");
ประโยคข้างต้นใช้ทรัพยากรที่เพิ่งตั้งค่าไว้
เป็นนิสัยที่ดีที่จะปล่อยทรัพยากรหลังการใช้งาน โดยเฉพาะทรัพยากรตามบริบท ดูส่วนโค้ดสุดท้ายในส่วน try-catch-finally หากทรัพยากรระดับบนถูกปล่อยออกมาในระหว่างการปล่อยทรัพยากร ทรัพยากรระดับล่างจะถูกปล่อยออกมาก่อน ตัวอย่างเช่น หากปล่อย ctx ลำดับการปล่อยทรัพยากรจะเป็น rs, stmt, cnn, ctx กล่าวอีกนัยหนึ่ง หาก ctx เปิดตัว rs, stmt และ cnn จะไม่สามารถใช้งานได้
การเปิดตัวทรัพยากรที่นี่จะส่งคืนการเชื่อมต่อฐานข้อมูลไปยังพูลการเชื่อมต่อเท่านั้น และจะไม่ปล่อยทรัพยากรจริง ๆ ดูภาพรวมของพูลการเชื่อมต่อฐานข้อมูล