سؤال

أنا جديد على JBOSS وقد طُلب مني دمج آلية تجميع اتصال JBOSS مع تطبيق ويب موجود. بالنظر إلى أن طبقة قاعدة بيانات تطبيق الويب تتم كتابة بشكل صحيح ، أي جميع النتائج والبيانات والاتصالات التي يتم إغلاقها بشكل صحيح عند عدم الحاجة إليها ، ما هي كل تغييرات الكود التي يجب أن أقوم بها في تطبيق الويب الخاص بي بعد أن قمت بتكوين CBOSS DataSource بشكل صحيح.

هل يمكن لأي شخص أن يوجهني إلى برنامج تعليمي أو عينة رمز يستخدم JBOSS DataSource في تطبيق ويب.

هل كانت مفيدة؟

المحلول

يتم التعامل مع التجمع في JBOSS في تكوين مصدر البيانات. هنا هو كيف. سيتعين على تطبيق الويب القيام بإجراء بحث JNDI لـ DataSource للحصول على اتصال قاعدة البيانات بدلاً من القيام بعنوان URL JDBC المباشر ، وبعد ذلك ستحصل على تجميع.

المعاملات قصة أخرى ، رغم ذلك.

تحرير: ردًا على تعليقك حول كيفية تأثير هذا على الكود ، هذا ما يبدو عليه:

String jndiPath = "java:DataSourceJNDIName"; //The exact prefix here has a lot to do with clustering, etc., but if you are using one JBoss instance standalone, this works.
Context ctx = new InitialContext();
DataSource ds = (DataSource) PortableRemoteObject.narrow(ctx.lookup(jndiPath), DataSource.class);
Connection c = ds.getConnection();

من الناحية الفنية ، فإن portablerEmoteObject.Narrow ليس ضروريًا في تكوين خادم واحد JBOSS (4.2.2 على أي حال) فقط للقيام سياق. Lookup.

ما سبق لا يغطي مشكلات استخدام الموارد ومعالجة الأخطاء. من المفترض أن تغلق كائن السياق هذا عند الانتهاء من ذلك ، وبالطبع اتصال قاعدة البيانات ، على الرغم من أن JBOSS سوف يصرخ عليك إذا نسيت إغلاق اتصال قاعدة البيانات وينتهي المعاملة ، وتغلقها لك.

على أي حال ، فإن كائن الاتصال هذا قابل للاستخدام بنفس القدر مثل drivermanager.getConnection (url) ؛

نصائح أخرى

قم أولاً بإنشاء ملف XML بالاسم xxx-ds.xml ووضع هذا الملف في server/default/deploy/xxx-ds.xml

<datasources>
<local-tx-datasource>
<jndi-name>/jdbc/Exp</jndi-name>
<type-mapping>SQL</type-mapping>
<connection-url>jdbc:microsoft:sqlserver://          </connection-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<user-name></user-name>
<password></password>
<min-pool-size>5</min-pool-size>
<max-pool-size>1000</max-pool-size>
</local-tx-datasource>
</datasources>

jboss-web.xml

<jboss-web>
<!--  <security-domain flushOnSessionInvalidation="false"/>-->
<!--  <context-root>/BSI</context-root>-->
  <resource-ref>
        <description>Database connection resource</description>
        <res-ref-name>jdbc/Exp</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <jndi-name>java:/jdbc/Exp</jndi-name>
        <res-auth>Container</res-auth>
    </resource-ref>
</jboss-web>

web.xml

<resource-ref>
    <description>Database connection resource</description>   
    <res-ref-name>jdbc/Exp</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

والآن في الخاص بك .java ملف

javax.naming.Context ctx1 = new javax.naming.InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource) ctx1.lookup("java:comp/env/jdbc/Exp");
con = ds.getConnection();

***** تأكد من أن اسم المرجع يجب أن يكون نفسه في كل مكان

ليس عليك تغيير أي شيء. عند تحديد النوع الصحيح من مصدر البيانات (TX-DATASOURCE / XA-DATASOURCE) ، يتم معالجة الاتصال و TX لك. في $ JBOSS/DOCS/AMPROMATIONS/JCA ستجد قوالب لكل قاعدة بيانات تقريبًا ، يمكنك إعادة استخدامها.

إذا كنت تستخدم XA ، فأنت بحاجة إلى تكوين TX-Recovery. انظر هذا النشر على كيفية:http://management-platform.blogspot.com/2008/11/transaction-recovery-in-jbossas.html (حسنًا ، ربما لا تكون كيفية كيفية وضع مستقل ، ولكن بالتزامن مع رمز مصدر JOPR).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top