สภาพแวดล้อมการกำหนดค่าของพูลการเชื่อมต่อฐานข้อมูล 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) <env-entry>--รายการสภาพแวดล้อม ตั้งค่าวิธีการทำงานของแอปพลิเคชัน
2) <resource-ref>--พารามิเตอร์ทรัพยากร ซึ่งมักจะเป็นไดรเวอร์ฐานข้อมูล, เซสชัน JavaMail, โรงงานคลาสที่กำหนดเอง ฯลฯ
3) <resource-env-ref>--ใน Servlet 2.4 ใช้เพื่อทำให้การตั้งค่าทรัพยากรที่ไม่ต้องการข้อมูลการรับรองความถูกต้องง่ายขึ้น เช่น พารามิเตอร์สภาพแวดล้อมและตัวแปรการอ้างอิงทรัพยากร
InitialContext ถูกตั้งค่าเมื่อมีการเตรียมใช้งานเว็บแอปพลิเคชันเพื่อรองรับส่วนประกอบของเว็บแอปพลิเคชัน รายการและทรัพยากรทั้งหมดอยู่ในส่วน java:comp/env ของเนมสเปซ JNDI คลิกที่ URL ต่อไปนี้เพื่อดูข้อมูลเพิ่มเติม:
1) การตั้งชื่อ Java และอินเทอร์เฟซไดเรกทอรี
2) ข้อมูลจำเพาะแพลตฟอร์ม J2EE
การตั้งค่ารีซอร์ส JNDI เมื่อต้องการตั้งค่ารีซอร์ส JNDI ให้ใช้ตัวระบุต่อไปนี้ในไฟล์ $CATALINA_HOME/conf/server.xml:
1) <สภาพแวดล้อม>--ตั้งชื่อและค่าของรายการตัวแปร JNDI InitialContext ในโดเมน (เทียบเท่ากับ <env-entry> ที่กล่าวถึงข้างต้น)
2) <ทรัพยากร>--ตั้งชื่อและประเภทของทรัพยากรที่พร้อมใช้งานสำหรับแอปพลิเคชัน (เทียบเท่ากับ <resource-ref> ที่กล่าวถึงข้างต้น)
3) <ResourceParams>--ตั้งชื่อโรงงานคลาสทรัพยากร Java หรือแอตทริบิวต์ JavaBean ที่จะใช้
4) <ResourceLink>--เพิ่มลิงก์ไปยังสภาพแวดล้อม JNDI โกลบอล (บริบท JNDI)
ตัวระบุข้างต้นต้องอยู่ระหว่าง <Context> และ </Context> (สำหรับเว็บแอปพลิเคชันเฉพาะทาง) หรือระหว่าง <DefaultContext> และ </DefaultContext>
นอกจากนี้ ชื่อและค่าที่ตั้งไว้ใน Web Application Descriptor (/WEB-INF/web.xml) จะถูกตั้งค่าในบริบทเริ่มต้นด้วย เมื่อเปิดใช้งานโดยค่าองค์ประกอบ <Environemt> จะถูกรีเซ็ตเป็นค่าเริ่มต้น
สามารถตั้งค่าตัวแปรส่วนกลางได้ใน <GlobalNamingResources> ขององค์ประกอบลูก <Server>
ภาพรวมพูลการเชื่อมต่อฐานข้อมูล:
การเชื่อมต่อฐานข้อมูลเป็นทรัพยากรที่สำคัญ มีจำกัด และมีราคาแพง โดยเฉพาะในเว็บแอปพลิเคชันที่มีผู้ใช้หลายราย การจัดการการเชื่อมต่อฐานข้อมูลสามารถส่งผลกระทบอย่างมากต่อความสามารถในการปรับขนาดและความทนทานของแอปพลิเคชันทั้งหมด และส่งผลต่อตัวบ่งชี้ประสิทธิภาพของโปรแกรม พูลการเชื่อมต่อฐานข้อมูลถูกเสนอเพื่อแก้ไขปัญหานี้
พูลการเชื่อมต่อฐานข้อมูลมีหน้าที่ในการจัดสรร จัดการ และปล่อยการเชื่อมต่อฐานข้อมูล อนุญาตให้แอปพลิเคชันใช้การเชื่อมต่อฐานข้อมูลที่มีอยู่ซ้ำ แทนที่จะสร้างการเชื่อมต่อฐานข้อมูลใหม่ซึ่งมีเวลาว่างเกินเวลาที่ไม่ได้ใช้งานสูงสุดเพื่อหลีกเลี่ยงข้อผิดพลาดเนื่องจากความล้มเหลวในการเปิดตัว การเชื่อมต่อฐานข้อมูลเกิดจากการขาดการเชื่อมต่อฐานข้อมูล เทคโนโลยีนี้สามารถปรับปรุงประสิทธิภาพการทำงานของฐานข้อมูลได้อย่างมาก
พูลการเชื่อมต่อฐานข้อมูลจะสร้างการเชื่อมต่อฐานข้อมูลจำนวนหนึ่งและใส่ลงในพูลการเชื่อมต่อระหว่างการเตรียมใช้งาน จำนวนการเชื่อมต่อฐานข้อมูลเหล่านี้ถูกกำหนดโดยจำนวนการเชื่อมต่อฐานข้อมูลขั้นต่ำ ไม่ว่าจะใช้การเชื่อมต่อฐานข้อมูลเหล่านี้หรือไม่ก็ตาม พูลการเชื่อมต่อจะรับประกันได้ว่าจะมีการเชื่อมต่อจำนวนเท่านี้เป็นอย่างน้อย จำนวนการเชื่อมต่อฐานข้อมูลสูงสุดในกลุ่มการเชื่อมต่อจะจำกัดจำนวนการเชื่อมต่อสูงสุดที่พูลการเชื่อมต่อสามารถใช้ได้ เมื่อจำนวนการเชื่อมต่อที่ร้องขอโดยแอปพลิเคชันจากกลุ่มการเชื่อมต่อเกินจำนวนการเชื่อมต่อสูงสุด คำขอเหล่านี้จะถูกเพิ่มลงใน รอคิว การตั้งค่าจำนวนการเชื่อมต่อขั้นต่ำและจำนวนการเชื่อมต่อสูงสุดในกลุ่มการเชื่อมต่อฐานข้อมูลควรคำนึงถึงปัจจัยต่อไปนี้:
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:
ต่อไปนี้คือรหัสการกำหนดค่า ซึ่งจะต้องอยู่ระหว่าง <Host> และ </Host>
<เส้นทางบริบท = "/ คุณภาพ" docBase = "คุณภาพ" debug = "0" reloadable = "true" crossContext = "true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." คำต่อท้าย = ".txt" ประทับเวลา = "true"/>
<ชื่อทรัพยากร = "jdbc/connectDB" auth = "คอนเทนเนอร์" type = "javax.sql.DataSource"/>
<ชื่อ ResourceParams = "jdbc/connectDB">
<พารามิเตอร์>
<name>maxActive</name>
<!-- จำนวนการเชื่อมต่อฐานข้อมูลสูงสุดในพูล ตั้งค่าเป็น 0 โดยไม่มีขีดจำกัด -->
<ค่า>100</ค่า>
</พารามิเตอร์>
<พารามิเตอร์>
<name>maxIdle</name>
<!-- จำนวนการเชื่อมต่อ DB ที่ไม่ได้ใช้งานสูงสุดที่จะเก็บไว้ในพูล ตั้งค่าเป็น 0 โดยไม่มีขีดจำกัด -->
<ค่า>30</ค่า>
</พารามิเตอร์>
<พารามิเตอร์>
<name>maxWait</name>
<!-- เวลาสูงสุดในการรอการเชื่อมต่อ DB ให้พร้อมใช้งานในหน่วย ms. ข้อยกเว้นจะเกิดขึ้นหากเกินการหมดเวลานี้ ตั้งค่าเป็น -1 เพื่อรออย่างไม่มีกำหนด -->
<value>10,000</value>
</พารามิเตอร์>
<พารามิเตอร์>
<name>ลบการละทิ้ง</name>
<!-- การเชื่อมต่อ DB ที่ถูกละทิ้งจะถูกลบและรีไซเคิล -->
<value>จริง</value>
</พารามิเตอร์>
<พารามิเตอร์>
<name>removeAbandonedTimeout</name>
<!-- ใช้พารามิเตอร์ RemoveAbandonedTimeout เพื่อตั้งค่าจำนวนวินาทีที่ไม่มีการใช้งานการเชื่อมต่อ DB ก่อนที่จะถือว่าละทิ้ง -->
<ค่า>60</ค่า>
</พารามิเตอร์>
<พารามิเตอร์>
<name>logAbandoned</name>
<!-- บันทึกการติดตามสแต็กของโค้ดที่ละทิ้ง -->
<value>เท็จ</value>
</พารามิเตอร์>
<พารามิเตอร์>
<ชื่อ>โรงงาน</ชื่อ>
<!-โรงงานแหล่งข้อมูลพื้นฐาน DBCP -->
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</พารามิเตอร์>
<พารามิเตอร์>
<ชื่อ>ชื่อผู้ใช้</ชื่อ>
<!-- ชื่อผู้ใช้ฐานข้อมูล -->
<value>ไอโอริชิเนียร์</value>
</พารามิเตอร์>
<พารามิเตอร์>
<ชื่อ>รหัสผ่าน</ชื่อ>
<!-- รหัสผ่านผู้ใช้ -->
<value>mypasswd</value>
</พารามิเตอร์>
<พารามิเตอร์>
<ชื่อ>ชื่อไดรเวอร์คลาส</ชื่อ>
<!-- ชื่อคลาสไดร์เวอร์ฐานข้อมูล -->
<value>net.sourceforge.jtds.jdbc.ไดรเวอร์</value>
</พารามิเตอร์>
<พารามิเตอร์>
<ชื่อ>URL</ชื่อ>
<!-- ที่อยู่ฐานข้อมูล -->
<value>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</value>
</พารามิเตอร์>
</พารามิเตอร์ทรัพยากร>
</บริบท>
ต่อไปนี้เป็นคำอธิบายของพารามิเตอร์บางตัว:
<เส้นทางบริบท = "/ คุณภาพ" 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:
ต่อไปนี้เป็นรหัสการกำหนดค่าซึ่งจะต้องวางไว้ใน <web-app> และ </web-app>
<!-- เริ่มต้นการกำหนดค่าฐานข้อมูล -->
<ทรัพยากร-อ้างอิง>
<description>การทดสอบ ConnectDB</description>
<res-ref-name>jdbc/connectDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>คอนเทนเนอร์</res-auth>
</ทรัพยากร-อ้างอิง>
<!--สิ้นสุดการกำหนดค่าฐานข้อมูล -->
ต่อไปนี้เป็นคำอธิบายที่จำเป็นของพารามิเตอร์:
1) คำอธิบาย คำอธิบายทรัพยากรที่อ้างอิง
2) ชื่อทรัพยากรชื่อซ้ำ ดู <ResourceParams name="jdbc/connectDB"> ด้านบน
3) ประเภททรัพยากรประเภท res ดู <Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/> ด้านบน
การใช้รีซอร์สใน JSP:
นี่เป็นส่วนหนึ่งของโค้ดสำหรับไฟล์หน้าเว็บ jsp ในไดเร็กทอรีย่อยบางรายการภายใต้ $CATALINA_HOME/webapps/quality:
<%@ หน้า contentType="text/html;charset=GBK"%>
<%@ หน้า errorPage="error.jsp"%>
<%@ นำเข้าหน้า = "javax.naming.*"%>
<%@ หน้านำเข้า = "javax.sql.*"%>
<%@ หน้านำเข้า = "java.sql.*"%>
<html>
<หัว>
</หัว>
<ร่างกาย>
<%
………………
………………
// การทำงานของฐานข้อมูล
บริบท 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.ปิด();
-
-
</ร่างกาย>
</html>
คำอธิบายรหัส:
แหล่งข้อมูล ds=(แหล่งข้อมูล)ctx.lookup("java:comp/env/jdbc/connectDB");
ประโยคข้างต้นใช้ทรัพยากรที่เพิ่งตั้งค่าไว้
เป็นนิสัยที่ดีที่จะปล่อยทรัพยากรหลังการใช้งาน โดยเฉพาะทรัพยากรตามบริบท ดูส่วนโค้ดสุดท้ายในส่วน try-catch-finally หากทรัพยากรระดับบนถูกปล่อยออกมาในระหว่างการปล่อยทรัพยากร ทรัพยากรระดับล่างจะถูกปล่อยออกมาก่อน ตัวอย่างเช่น หากปล่อย ctx ลำดับการปล่อยทรัพยากรจะเป็น rs, stmt, cnn, ctx กล่าวอีกนัยหนึ่ง หาก ctx เปิดตัว rs, stmt และ cnn จะไม่สามารถใช้งานได้
การเปิดตัวทรัพยากรที่นี่จะส่งคืนการเชื่อมต่อฐานข้อมูลไปยังพูลการเชื่อมต่อเท่านั้น และจะไม่ปล่อยทรัพยากรจริง ๆ ดูภาพรวมของพูลการเชื่อมต่อฐานข้อมูล