AMcoder - javascript, python, java, html, php, sql

Չհաջողվեց օգտագործել @Resource և JNDI որոնումը

Ես դժվարանում եմ կիրառել ներարկման հայեցակարգը, ինչպես նաև 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");

Իմ առաջին գրառումն այստեղ, այնպես որ հուսով եմ, որ պատշաճ կերպով հարցրի: Շնորհակալություն օգնության համար!

11.07.2013

  • Ստուգեք այստեղ՝ stackoverflow.com/ Հարցեր/6500632/ Եթե դա իսկապես պարզապես datasourceName է, թվում է, թե context.lookup("datasourceName");-ը պետք է աշխատի: Մյուս բանը, որ կարող եք ստուգել, ​​ադմինիստրատորի վահանակում է, գնացեք Summary of Servers->your server name->View JNDI tree և համոզվեք, որ ձեր տվյալների աղբյուրի անունը ցուցադրվում է: 11.07.2013
  • @better_use_mkstemp - Շնորհակալություն արձագանքելու համար: Տվյալների աղբյուրը լավ է աշխատում: Այսինքն, եթե ես փորձեմ JNDI որոնել տվյալների աղբյուրի համար ուղղակիորեն հետևյալ DataSource ds = (DataSource) context.lookup("myDataSource"); կոդով, կարող եմ մուտք գործել տվյալների աղբյուր: Այն, ինչ ես փորձում եմ անել այստեղ, այն է, որ օգտագործեմ XML կոնֆիգուրացիան՝ String ուղղակիորեն EJB-ին մատակարարելու համար: Հուսով եմ, որ պարզաբանվեց: 12.07.2013
  • Եթե ​​@Resource(name="datasourceName") օգտագործվում է, ապա java:comp/env/datasourceName-ը ճիշտ որոնման տող է: Ասել է թե, ես չգիտեմ, թե ինչու ներարկումը չի աշխատում, երբ նույն անունը նշված է անոտացիայի մեջ և XML-ում; դա պետք է աշխատի: 12.07.2013

Պատասխանները:


1

Լավ. Երկու օր անց ես տեսա, որ իմ սխալը ոչ մի տեղ չկա EJB-ի կոդում, այլ JSP-ի կոնֆիգուրացիայի մեջ, որը կանչում էր EJB-ը: Իմ սխալն այն է, որ ես ինչ-որ կերպ օգտագործել էի EJB դասի մեթոդները որպես POJO և ՈՉ կոնտեյների միջոցով: Ես ենթադրել էի, որ EJB մեթոդները կանչվելուց հետո բեռնարկղը ճիշտ է ներարկել EJB-ը JSP-ին: Բայց դա չեղավ: JSP-ում JNDI որոնում դրեցի և ամեն ինչ ինքն իրեն լուծվեց: Շնորհակալություն բոլորին ձեր պատասխանների համար:

14.07.2013
Նոր նյութեր

Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..