الطريقة الصحيحة لجعل موارد البيانات/الموارد إعداد وقت النشر
-
23-09-2019 - |
سؤال
لدي تطبيق ويب يتطلب إعدادين:
- A JDBC DataSource
- رمز سلسلة
أريد بشدة أن أكون قادرًا على نشر واحد. war إلى حاويات مختلفة مختلفة (jetty ، tomcat ، gf3 minimity) وتكوين هذه الإعدادات على مستوى التطبيق داخل الحاوية.
الكود الخاص بي يفعل هذا:
InitialContext ctx = new InitialContext();
Context envCtx = (javax.naming.Context) ctx.lookup("java:comp/env");
token = (String)envCtx.lookup("token");
ds = (DataSource)envCtx.lookup("jdbc/datasource")
دعنا نفترض أنني استخدمت واجهة إدارة Glassfish لإنشاء اثنين من الموارد JDBC: JDBC/اختبار datasource و jdbc/live-datasource التي تتصل بنسخ مختلفة من المخطط نفسه ، على خوادم مختلفة ، وبيانات اعتماد مختلفة ، إلخ. هذا إلى Glassfish معه وإشارةه إلى DataSource اختبار ، قد يكون لدي هذا في Sun-Web.xml:
...
<resource-ref>
<res-ref-name>jdbc/datasource</res-ref-name>
<jndi-name>jdbc/test-datasource</jndi-name>
</resource-ref>
...
لكن
- Sun-Web.xml يذهب داخل حربتي ، أليس كذلك؟
- بالتأكيد يجب أن تكون هناك طريقة للقيام بذلك من خلال واجهة الإدارة
هل أحاول حتى أن أفعل الشيء الصحيح؟ هل تجعل الحاويات الأخرى هذا أسهل؟ سأكون مهتمًا بشكل خاص بكيفية تعامل Jetty 7 مع هذا لأنني أستخدمه للتطوير.
تعديل Tomcat لديه طريقة معقولة للقيام بذلك:
خلق $TOMCAT_HOME/conf/Catalina/localhost/webapp.xml
مع:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true">
<!-- String resource -->
<Environment name="token" value="value of token" type="java.lang.String" override="false" />
<!-- Linking to a global resource -->
<ResourceLink name="jdbc/datasource1" global="jdbc/test" type="javax.sql.DataSource" />
<!-- Derby -->
<Resource name="jdbc/datasource2"
type="javax.sql.DataSource"
auth="Container"
driverClassName="org.apache.derby.jdbc.EmbeddedDataSource"
url="jdbc:derby:test;create=true"
/>
<!-- H2 -->
<Resource name="jdbc/datasource3"
type="javax.sql.DataSource"
auth="Container"
driverClassName="org.h2.jdbcx.JdbcDataSource"
url="jdbc:h2:~/test"
username="sa"
password=""
/>
</Context>
لاحظ أن override="false"
يعني العكس. وهذا يعني أن هذا الإعداد لا يمكن تجاوزه بواسطة web.xml
.
أحب هذا النهج لأن الملف جزء من وعاء التكوين ليس الحرب ، لكنها ليست جزءًا من التكوين العالمي ؛ إنه WebApp محدد.
أعتقد أنني أتوقع المزيد من Glassfish لأنه من المفترض أن يكون لديه واجهة مسؤول ويب كاملة ، لكنني سأكون سعيدًا بما يكفي مع شيء مكافئ لما ورد أعلاه.
لا يوجد حل صحيح
نصائح أخرى
بالنسبة لـ GF V3 ، قد ترغب في محاولة الاستفادة من خيار -deploymentplan للملاحظة الفرعية النشر لـ Asadmin. تمت مناقشته على صفحة الرجل للوحدة الفرعية النشر.
واجهت نفس المشكلة أيضا، وهنا كيف حلها.
الأعراض
- قمت بإزالة " style=" عرض: لا شيء "" attribtue على dive breadcrumb؛
- وأعرض سمة " مرئيا " من التحكم في ASP مرة أخرى إلى " True ".
- على الرغم من الانسحاب يظهر، كان الرمز فارغا.
الدقة
- افتح أداة مطور F12 في IE، وتحديد موقع في HTML "MS-Breadcrumb-DropDownbox" الفئة.
- اتبع HTML DOM في DIV وستجد في نهاية المطاف الارتباط التشعبي يحتوي على المعرف "GlobalBreadCrumbnavpopout-Anchor" . ستجد
- li> ضمن هذا الرابط علامة ، تحقق من عنوان URL في سمة " SRC "، محاولة تحميل هذه الصورة مباشرة في مستعرض ويب.
- فرص هي الملف المحدد في العلامة غير موجودة (I.E.ED إرجاع 404). قد يكون هذا لأن صفحتك الرئيسية كانت موضوع مخصص لتبدأ، أو بعض مشكلة SharePoint Bizarre الأخرى.
- افتح مصمم SharePoint، والتنقل حيث يجب أن تكون هذه الصورة، وحاول تحديد موقع ملف الصورة هذا، إذا لم يكن موجودا، فقم بنسخ القيمة الافتراضية الموجودة في "/_layouts/15/images/spcommon.png؟rev= 23 "وإعادة تسميته إلى الشخص الذي من المفترض أن يكون هناك.
- قم بتحديث ذاكرة التخزين المؤقت على متصفح الإنترنت الخاص بك ويجب أن يتم تحميل الصورة بشكل صحيح هذه المرة.
كالمعتاد، قد لا يكون القرار للجميع، لا شيء على الإطلاق، ولكن آمل أن يكون هذا قد يأتي مفيدا للآخرين؛)
لست متأكدًا من فهم السؤال/المشكلة حقًا.
ك مكون مكون التطبيق, ، تعلن عن الموارد (الموارد) المطلوبة من خلال طلبك في طريقة قياسية (حاوية لاأدري) في web.xml
.
في وقت النشر ، ناقل الطلب والمسؤول من المفترض أن يتبع التعليمات التي قدمتها مكون مكون التطبيق لحل التبعيات الخارجية (من بين أشياء أخرى) على سبيل المثال عن طريق إنشاء مصدر بيانات على مستوى خادم التطبيق ورسم خرائط اسم JNDI الحقيقي إلى اسم المورد الذي يستخدمه التطبيق من خلال استخدام واصف نشر خادم التطبيق (على سبيل المثال sun-web.xml
للسمك الزجاجي). من الواضح أن هذا أ حاوية محددة الخطوة وبالتالي لا تغطيها مواصفات Java EE.
الآن ، إذا كنت ترغب في تغيير قاعدة البيانات التي يستخدمها التطبيق ، فسيتعين عليك إما:
- قم بتغيير التعيين في واصف نشر خادم التطبيق - أو -
- قم بتعديل تكوين مصدر البيانات الموجود لجعله نقاطًا على قاعدة بيانات أخرى.
وجود واجهة المسؤول لا يغير أي شيء حقًا. إذا فاتني شيء ما ، لا تتردد في إخباري. وفقط في حالة هذه الإجابة السابقة.