Ես դժվարանում եմ կիրառել ներարկման հայեցակարգը, ինչպես նաև JNDI-ն EJB-ների հետ, և ես կցանկանայի ձեր օգնությունը: Ես սովորում եմ սա և իսկապես ուզում եմ հասկանալ և կիրառել @Resource և/կամ JNDI որոնումների տեխնիկան XML կոնֆիգուրացիայով: Ես կարծես թե չեմ կարող գտնել նախնական պարամետրերից որևէ մեկը իմ JNDI որոնումներում: Այժմ, մինչ ես շարունակեմ, եթե ես ձեռքով մուտքագրեմ իմ տվյալների աղբյուրի JNDI անունը, ամեն ինչ հիանալի է աշխատում: Այն, ինչ ես փորձում եմ անել (կրկին որպես վարժություն) այն է, որ օգտագործեմ @Resource կամ JNDI՝ JNDI տվյալների աղբյուրի անունը ինքնին ստանալու և այնուհետև կատարել JNDI որոնում տվյալների աղբյուրի վրա: Ես գիտեմ, որ դուք կարող եք ուղղակիորեն ներարկել DataSource օբյեկտը, բայց եթե ես չեմ կարող ներարկել String, ես պետք է սկսեմ սրանից:
Նախ, ահա իմ ejb-jar.xml-ի կարևոր մասը.
<env-entry>
<description>DataSource JNDI lookup name</description>
<env-entry-name>datasourceName</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>myDataSource</env-entry-value>
</env-entry>
Ինչ վերաբերում է ներարկման, օգտագործելով @Resource, ես փորձել եմ, ես փորձել եմ հետևյալ դաշտը EJB-ում
@Resource(name = "datasourceName")
String dsName;
Ես նաև փորձել եմ mappedName-ով և որոնմամբ (օգտագործելով JNDI որոնում), ոչինչ չի ստացվում: Այնուհետև ես փորձել եմ JNDI որոնումը հետևյալ կերպ.
// get JNDI name from environment entry in EJB Context and use to lookup DataSource
Context context = new InitialContext();
String dsName = (String) context.lookup("java:comp/env/SRS/datasourceName");
(Հավելվածի անունը SRS է) - Սա գալիս է NamingException-ով, որ JNDI որոնումը ոչինչ չի գտել: Ես փորձել եմ հետևյալ որոնումները.
String datasourceName = (String) context.lookup("java:comp/env/SRS/Status/datasourceName"); // name of EJB is Status
String datasourceName = (String) context.lookup("datasourceName");
String datasourceName = (String) context.lookup("SRS/datasourceName");
String datasourceName = (String) context.lookup("SRS/Status/datasourceName");
String datasourceName = (String) context.lookup("java:global/SRS/datasourceName");
String datasourceName = (String) context.lookup("java:global/SRS/Status/datasourceName");
Իմ առաջին գրառումն այստեղ, այնպես որ հուսով եմ, որ պատշաճ կերպով հարցրի: Շնորհակալություն օգնության համար!