بيئة التكوين لمجموعة اتصال قاعدة بيانات SQL Server2000 الخاصة بـ Tomcat في JSP:
1. قاعدة البيانات: Microsoft SQL Server 2000
2. برنامج تشغيل قاعدة البيانات: net.sourceforge.jtds.jdbc.Driver
نظرة عامة على JNDI (واجهة تسمية جافا والدليل):
يوفر 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) تسمية جافا وواجهة الدليل
2) مواصفات منصة J2EE
إعداد موارد JNDI لإعداد موارد JNDI، استخدم المعرفات التالية في ملف $CATALINA_HOME/conf/server.xml:
1) <Environment>--قم بتعيين اسم وقيمة إدخال JNDI PrimaryContext المتغير في المجال (أي ما يعادل <env-entry> المذكور أعلاه).
2) <Resource>--قم بتعيين اسم ونوع الموارد المتاحة للتطبيق (أي ما يعادل <resource-ref> المذكور أعلاه).
3) <ResourceParams>--قم بتعيين اسم مصنع فئة موارد Java أو سمة JavaBean المراد استخدامها.
4) <ResourceLink>--أضف رابطًا إلى بيئة JNDI العالمية (سياق JNDI).
يجب وضع المعرفات المذكورة أعلاه بين <Context> و</Context> (لتطبيقات الويب المتخصصة) أو بين <DefaultContext> و</DefaultContext>.
بالإضافة إلى ذلك، يتم تعيين الأسماء والقيم المحددة في واصف تطبيق الويب (/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" قابل لإعادة التحميل = "صحيح" crossContext = "صحيح">
<Logger className = "org.apache.catalina.logger.FileLogger" prefix = "localhost_quality_log." suffix = ".txt" timestamp = "true"/>
<اسم المورد = "jdbc/connectDB" auth = "الحاوية" نوع = "javax.sql.DataSource"/>
<ResourceParams name="jdbc/connectDB">
<المعلمة>
<الاسم>ماكس أكتيف</الاسم>
<!-- الحد الأقصى لعدد اتصالات قاعدة البيانات في التجمع. اضبط على 0 بدون حد -->
<القيمة>100</القيمة>
</المعلمة>
<المعلمة>
<name>maxIdle</name>
<!-- الحد الأقصى لعدد اتصالات قاعدة البيانات الخاملة التي سيتم الاحتفاظ بها في التجمع. اضبط على 0 بدون حد -->
<القيمة>30</القيمة>
</المعلمة>
<المعلمة>
<name>maxWait</name>
<!-- الحد الأقصى لوقت الانتظار حتى يصبح اتصال قاعدة البيانات متاحًا بالمللي ثانية. يتم طرح استثناء في حالة تجاوز هذه المهلة. اضبط على -1 للانتظار إلى أجل غير مسمى -->
<القيمة>10000</القيمة>
</المعلمة>
<المعلمة>
<الاسم>إزالة مهجور</الاسم>
<!-- تتم إزالة اتصالات قاعدة البيانات المهجورة وإعادة تدويرها -->
<القيمة>صحيح</القيمة>
</المعلمة>
<المعلمة>
<الاسم>إزالةAbandonedTimeout</الاسم>
<!-- استخدم المعلمة RemoveAbandonedTimeout لتعيين عدد الثواني التي ظل فيها اتصال قاعدة البيانات خاملاً قبل اعتباره مهجورًا -->
<القيمة>60</القيمة>
</المعلمة>
<المعلمة>
<الاسم>السجل مهجور</الاسم>
<!-- قم بتسجيل تتبع المكدس للكود الذي تم التخلي عنه -->
<القيمة>خطأ</القيمة>
</المعلمة>
<المعلمة>
<الاسم>المصنع</الاسم>
<!-مصنع مصدر البيانات الأساسي لـ DBCP -->
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</المعلمة>
<المعلمة>
<الاسم>اسم المستخدم</الاسم>
<!-- اسم مستخدم قاعدة البيانات -->
<value>إيوريشينير</value>
</المعلمة>
<المعلمة>
<الاسم>كلمة المرور</الاسم>
<!-- كلمة مرور المستخدم -->
<value>mypasswd</value>
</المعلمة>
<المعلمة>
<الاسم>اسم فئة السائق</الاسم>
<!-- اسم فئة برنامج تشغيل قاعدة البيانات -->
<value>net.sourceforge.jtds.jdbc.Driver</value>
</المعلمة>
<المعلمة>
<الاسم>عنوان URL</الاسم>
<!-- عنوان قاعدة البيانات -->
<value>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</value>
</المعلمة>
</ResourceParams>
</السياق>
وفيما يلي وصف لبعض المعلمات:
<مسار السياق = "/ الجودة" docBase = "الجودة" debug = "0" قابل لإعادة التحميل = "صحيح" crossContext = "صحيح">
في:
1) يحدد المسار المسار، ودليل الجودة المعين هنا هو $CATALINA_HOME/webapps؛
2) الدليل الجذر لملف docBase.
3) أداة إعادة التحميل ما إذا كان سيتم إعادة الترجمة عند تحديث صفحة الويب.
4) maxActive الحد الأقصى لعدد اتصالات قاعدة البيانات في تجمع الاتصال. اضبط على 0 بلا حدود.
5) maxIdle الحد الأقصى لوقت الخمول لاتصال قاعدة البيانات. بعد فترة الخمول هذه، سيتم وضع علامة على اتصال قاعدة البيانات على أنه غير متاح ثم يتم تحريره. اضبط على 0 بلا حدود.
6) maxWait هو الحد الأقصى لوقت الانتظار لإنشاء اتصال. إذا تم تجاوز هذا الوقت، سيتم تلقي استثناء. اضبط على -1 للإشارة إلى عدم وجود حد.
7) قم بإزالة عمليات إعادة التدوير المهجورة (عادةً ما يتم نسيان إطلاقها) لاتصالات قاعدة البيانات في تجمع الاتصال.
8) RemoveAbandonedTimeout إذا لم يتم استخدام اتصال قاعدة البيانات لفترة طويلة، فسيتم اعتباره مهجورًا وإعادته إلى تجمع الاتصال.
9) سجل السجل المهجور إعادة تدوير اتصالات قاعدة البيانات المهجورة.
10) برنامج تشغيل driverClassName 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>
</resource-ref>
<!-- نهاية تكوين قاعدة البيانات -->
فيما يلي الوصف الضروري للمعلمات:
1) الوصف وصف للمصدر المشار إليه.
2) اسم المورد res-ref-name. راجع <ResourceParams name="jdbc/connectDB"> أعلاه
3) نوع المورد نوع الدقة. راجع <اسم المورد = "jdbc/connectDB" auth = "Container" type = "javax.sql.DataSource"/> أعلاه
استخدام الموارد في JSP:
يعد هذا جزءًا من التعليمات البرمجية لملف صفحة الويب jsp في دليل فرعي معين ضمن $CATALINA_HOME/webapps/quality:
<%@ page contentType="text/html;charset=GBK"%>
<%@ صفحة errorPage="error.jsp"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*"%>
<أتش تي أم أل>
<الرأس>
</الرأس>
<الجسم>
<%
………………
………………
// عمليات قاعدة البيانات
السياق ctx=null;
اتصال cnn=null;
البيان stmt=null;
ResultSet rs=null;
يحاول
{
ctx=new PrimaryContext();
إذا (ctx==فارغة)
رمي استثناء جديد ("لا توجد بيئة مطابقة")؛
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
إذا (س == فارغة)
رمي استثناء جديد ("لا توجد قاعدة بيانات مطابقة")؛
cnn=ds.getConnection();
stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery("اختر * من الجدول1")
;
…………………
}
أخيراً
{
إذا (ص! = فارغة)
rs. Close();
إذا (ستمت! = فارغة)
stmt. Close();
إذا (سي إن إن! = فارغة)
cnn.Close();
إذا (ctx!=فارغة)
ctx. Close();
}
%>
</الجسم>
</html>
وصف الكود:
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
تنطبق الجملة أعلاه على الموارد التي تم تعيينها للتو.
إنها عادة جيدة أن يتم تحرير الموارد بعد الاستخدام، وخاصة موارد السياق، راجع مقطع الكود الأخير في قسم محاولة الالتقاط أخيرًا. إذا تم إصدار موارد المستوى الأعلى أثناء إصدار المورد، فسيتم إصدار موارد المستوى الأدنى أولاً. على سبيل المثال: إذا تم إصدار ctx، فسيكون ترتيب إصدار المورد هو rs وstmt وcnn وctx. بمعنى آخر، إذا تم إصدار ctx، فلن تكون rs وstmt وcnn متاحة.
يؤدي إصدار الموارد هنا إلى إرجاع اتصال قاعدة البيانات إلى تجمع الاتصال فقط، ولا يقوم بتحرير الموارد فعليًا. راجع نظرة عامة على تجمعات اتصال قاعدة البيانات.