Huduma za msingi za Corba, mfano wa shirika la maombi la CORBA, mifano. Teknolojia ya CORBA

Ninajua kuwa CORBA hukuruhusu kutekeleza vitu vingi katika lugha tofauti za programu na hata kukimbia kwenye nodi tofauti za kompyuta. Hata hivyo, je, ni muhimu kuwa na ORB mbili tofauti zilizoandikwa katika lugha mbili tofauti?

Mfano: Njia A inaendesha programu ya Java J1 na Node B inaendesha programu ya C++ C1. Je! nipate "Java ORB" ya Node A na "C++ ORB" ya Node B au nifanye zote/baadhi ya ORB zishirikiane na programu zilizoandikwa kwa lugha yoyote ambayo ina ramani ya IDL?

Ningeshukuru sana ikiwa mtu angeweza kuniunganisha na chanzo, akieleza moja kwa moja jinsi ningependa ielezwe. Ya karibu zaidi ambayo nimepata ni "njia ya mpangaji programu hudanganya muundo au umoja, hupiga simu ya mbali kwa kutumia proksi, au kutekeleza kiolesura na darasa la mtumishi, kwa njia ile ile katika bidhaa zote za CORBA C++, kwa njia ile ile katika Java yote. bidhaa za CORBA, nk." d. ". Hii inanifanya nifikirie kuwa nitahitaji ORB mbili, lakini sio wazi vya kutosha. Kimsingi ningependa kujua ikiwa naweza kusema kwamba "kwa kuwa ORB imeandikwa katika C++, waandaaji wa programu pia wamepigwa marufuku kutumia C++".

Shukrani kwa

3 majibu

Haijalishi ORB inatekelezwa kwa lugha gani, cha muhimu ni kwamba inatoa vifungo vya lugha gani. Kwa lugha ya L, unahitaji orb ambayo hutoa vifungo kwa lugha ya L. Mara nyingi orbs hutoa tu kifungo kwa lugha ambayo wao wenyewe huandikwa, lakini pia inaweza kutoa vifungo kwa baadhi ya lugha nyingine.

Hapana. Hoja ya CORBA ni kwamba inatenganisha vipengele kabisa.

Ni wazi, programu zako lazima zitumie maktaba za mteja ambazo zinaweza kuingiliana nazo. ORB yako inaweza tu kusakinisha vifungo vya lugha moja, kwa hali ambayo utahitaji kutafuta vifungo vingine au kutafuta njia ya kuingiliana navyo (kwa mfano, ikiwa unatumia Python, bado unaweza kufanya kazi na maktaba za C++ ikiwa unataka. )

Jaribu kutumia teknolojia hii.

Kuna mbinu kadhaa zinazoweza kutumika wakati wa kutekeleza maombi ya CORBA, lakini ili kujumlisha, ndiyo, mfumo wa ORB lazima uwe katika lugha sawa na utekelezaji wa ombi lako.

Katika Java na C++, mkusanyaji wa IDL hutengeneza vijiti na mifupa ambayo hutumika kama gundi kati ya mtandao na programu yako. Unatoa utekelezaji wa vitu vyako vya CORBA, kwa kawaida vinarithi kutoka kwa darasa la IDL linalozalishwa na mkusanyaji (mifupa). Mifupa kwa namna fulani hupokea ombi kutoka kwa mteja na kisha huita utekelezaji wako. Kitu kimoja kinatokea kinyume chake kwa upande wa mteja.

Mifupa na mbegu kisha hutumia njia zilizotolewa na ORB kuita seva kwa mbali na kujibu majibu, hata ikiwa ni pamoja na kuanzisha miunganisho ya mtandao, ikiwa mteja na seva ziko kwenye mashine tofauti. "Uchawi" huu unatekelezwa na ORB na lazima uwepo katika programu yako katika mfumo wa maktaba, seti ya vitendaji, n.k. ambayo mbegu na mifupa itatumia kufanya kazi hiyo.

Kwa hivyo kila mpango lazima uwe na aina fulani ya uwakilishi wa ORB ili kuwasiliana na wateja na seva zingine za CORBA kwenye mashine zingine.

Walakini, kutoka kwa maoni ya kimantiki, ORB inaonekana kama safu ambayo kwa kweli na bila mshono inaunganisha wateja na seva zote mbili, kwa hivyo hata ikiwa programu ya C ++ ina utekelezaji wa ORB ulioandikwa katika C ++ na utekelezaji wa Java, ikiwa na ORB iliyoandikwa katika Java. ni ya kichawi itifaki za kawaida(GIOP, IIOP), wanaweza kuwasiliana na kila mmoja bila shida yoyote.

CORBA (Kitu cha Kawaida Omba Dalali usanifu)- teknolojia inayolenga kitu kwa kuunda programu zilizosambazwa. Teknolojia inategemea matumizi Wakala wa Ombi la Kitu (ORB) kwa kutuma na kupokea maombi kwa uwazi na vitu katika mazingira yaliyosambazwa. Teknolojia inakuwezesha kujenga maombi kutoka kwa vitu vilivyosambazwa vinavyotekelezwa katika lugha mbalimbali za programu. Kawaida CORBA kuendelezwa Kikundi cha Usimamizi wa Vitu (OMG).

Usanifu wa CORBA

Sehemu hii inatoa muhtasari mfupi CORBA kama ilivyoelezwa katika vipimo Mungu wangu toleo la 3.0. Mahitaji ya hati hii yanaweza kutimizwa kwa viwango tofauti kwa utekelezaji halisi. madalali wa ombi la kitu. Katika Mtini. Mchoro 2.1 unaonyesha ombi lililotumwa na mteja kwa utekelezaji wa kitu. Mteja ni huluki inayotaka kufanya operesheni kwenye kitu, na Utekelezaji ni mkusanyo wa msimbo na data ambayo hutekeleza kitu.

ORB inawajibika kwa mifumo yote muhimu ya kupata utekelezaji unaofaa wa kitu kwa ombi, kuandaa utekelezaji wa kupokea ombi, na uhamishaji wa data unaendelea kutimiza ombi. Kiolesura kinachoonekana kwa mteja ni huru kabisa na eneo la utekelezaji wa kitu, lugha ya programu ambayo imeandikwa, na mambo mengine yoyote ambayo hayajaonyeshwa katika vipimo vya interface.

Kiolesura cha simu kinachobadilika na kiolesura cha stub kina semantiki sawa, ili mpokeaji wa ujumbe hawezi kubainisha jinsi ombi lilitumwa. ORB hupata msimbo unaofaa wa utekelezaji wa kitu, hutuma vigezo kwake na kutoa udhibiti kupitia IDL mifupa au mifupa yenye nguvu (Mchoro 2.4). Mifupa ni maalum kwa kiolesura fulani na adapta ya kitu. Wakati wa utekelezaji wa hoja, utekelezaji unaweza kutumia huduma fulani ORB kupitia adapta ya kitu. Wakati ombi limekamilika, udhibiti na maadili ya matokeo yanarejeshwa kwa mteja.

Utekelezaji wa kitu unaweza kuchagua adapta ya kitu gani itumie kulingana na huduma gani inahitaji. Katika Mtini. Mchoro 2.5 unaonyesha jinsi kiolesura na taarifa za utekelezaji zinapatikana kwa wateja na utekelezaji wa kitu. Maingiliano yameelezewa ndani IDL au kutumia hazina ya kiolesura. Maelezo yao hutumika kutengeneza mbegu za mteja na mifupa kwa ajili ya utekelezaji.

Taarifa kuhusu utekelezaji wa kitu hutolewa wakati wa ufungaji na kuhifadhiwa kwenye hifadhi ya utekelezaji, na kisha kutumika wakati wa mchakato wa utoaji wa ombi.

Chanzo: JBuilder

Utangulizi

Katika shirika lolote, maeneo ya kazi yanayohusiana na biashara yanasambazwa kati ya wanachama mbalimbali wa shirika kwa zaidi usindikaji wa ufanisi kila sehemu. Kwa njia hiyo hiyo, vitu kwenye mtandao wa shirika vinasambazwa ili kutekeleza majukumu yao ya biashara kwa ufanisi zaidi. Kwa kushangaza, lengo la mfumo wa kitu kilichosambazwa ni kuunganisha vizuri shirika. Usambazaji wenye maana na wa kufikiria wa vitu katika michakato yote ya biashara ya shirika huunda mshikamano zaidi, ufanisi wa ziada na hufanya mfumo kwa ujumla kuwa wa busara zaidi. Walakini, usambazaji huu lazima ufikiriwe kikamilifu, kwa sababu kutawanya vitu kwenye upepo bila shaka ni hatari. Ili kuzuia makosa kama haya, makala haya yanatanguliza teknolojia zenye nguvu kama vile CORBA na Java, zinazotekelezwa katika zana za ukuzaji za Borland - VisiBroker na JBuilder. Mara nyingi inageuka kuwa mifumo iliyosambazwa inawasilisha utata mkubwa katika hatua zote za mzunguko wa maisha ya programu - kutoka kwa kubuni hadi usimamizi. JBuilder na VisiBroker huboresha mchakato huu kwa kurahisisha kuunda na kupeleka programu zilizosambazwa za CORBA. Kwa kuanzishwa kwa JBuilder 3.5, ushirikiano wa CORBA haujafumwa kwa kuongezwa kwa vipengele kadhaa vinavyolenga kusaidia wasanidi kuunda vipengee vya VisiBroker CORBA, huduma, seva na wateja katika Java.

Makala haya yanatumia mbinu ya kuwasilisha VisiBroker na yanaonyesha kila mada kwa kutumia programu halisi ya maisha. Badala ya kuwasilisha CORBA kwa ujumla, tutaelezea dhana tunapokutana nazo hapa. Mbinu hii husaidia kutambulisha vyema dhana za CORBA kwa kueleza nadharia kwa uwazi kwa mfano wa moja kwa moja.

CORBA ni nini?

Pamoja na ujio wa Intranet na Mtandao, kompyuta ya mtandao hatimaye inakuwa eneo kuu la maendeleo ya programu. Lakini ni jinsi gani mifumo mingi tofauti inaweza kuingiliana na kila mmoja? Ili kukabiliana na tatizo hili, OMG inaendelea kutengeneza vipimo vya CORBA. Vigezo hivi vinasawazisha jinsi programu zinavyowasiliana kwenye mtandao. CORBA, hata hivyo, huenda zaidi ya mwingiliano rahisi; ni suluhu ya muunganisho inayoweza kubadilika, inayoweza kubinafsishwa kwa programu za viwango vingi - kinachojulikana. vifaa vya kati, au programu ngazi ya kati. Usanifu wa Wakala wa Ombi la Kitu cha Kawaida ( Usanifu wa jumla Dalali wa Ombi la Kipengee (CORBA) ni seti ya vipimo vilivyotengenezwa na kusanifishwa na Kundi la Kusimamia Kitu (OMG).

OMG, au kikundi cha kazi kwa Ukuzaji wa Viwango vya Utayarishaji wa Vitu, ni muungano wa takriban makampuni 800 katika tasnia ya kompyuta. Lengo kuu la OMG ni kufafanua mfumo wa usanifu unaoitwa Usanifu wa Usimamizi wa Kitu (OMA), ambao ni mfumo wa usanifu wa kompyuta iliyosambazwa. OMG si shirika la kukuza viwango. Lengo lake ni kukuza upitishaji wa tasnia ya vipimo vya kiolesura kwa usimamizi wa kitu kilichosambazwa. Kwa mara nyingine tena, tunatambua kwamba muungano huu usio wa faida hauweki viwango vya sekta. Badala yake, OMG inakuza kupitishwa kwa viwango kwa kufikia makubaliano kati ya wanachama wake. Kwa asili yao, viwango vinavyozingatiwa kupitishwa na OMG si vya kinadharia; yametekelezwa na kujaribiwa kwa vitendo. Kiwango cha CORBA hufafanua jinsi vitu vinavyojiwakilisha vyenyewe na jinsi vinavyoingiliana katika mazingira yaliyosambazwa, pamoja na itifaki za mawasiliano za mawasiliano kati ya vitu.

Muundo wa kiwango cha CORBA huruhusu wasambazaji binafsi bidhaa za programu makampuni kama vile Borland kuunda programu zinazotii mapendekezo ya OMG. Vipengele kadhaa vya utekelezaji wa CORBA vinafafanuliwa na kiwango cha OMG; hata hivyo, wachuuzi wengi huongeza vipengele hivi vya msingi ili kutoa suluhisho kamili. Makala haya yanalenga utekelezaji wa CORBA VisiBroker na vipengele vinavyoiwakilisha.

Mfumo wa kitu kilichosambazwa ni nini?

Neno "kusambazwa" linamaanisha vitu vilivyotawanywa kijiografia. Kwa kweli, mfumo wa kitu kilichosambazwa ni mchanganyiko rahisi wa teknolojia mbili - mtandao na programu inayolenga kitu. Mitandao huwezesha kompyuta iliyosambazwa, na vitu hutoa usimbaji, utumiaji upya, na kuongezeka kwa uaminifu wa kiutendaji. Moja ya vichochezi muhimu zaidi vya kompyuta iliyosambazwa ni Wavuti. Kama mfumo mkubwa zaidi wa kusambazwa duniani, unaunganisha teknolojia, habari na vyombo vya habari tofauti tofauti. Walakini, sio kila mfumo unaosambazwa lazima "uelekezwe na kitu". Kuchanganya mbinu za mtandao na kifaa husababisha maboresho makubwa katika uundaji wa programu na usimamizi wa matengenezo, utumiaji tena, na uboreshaji.

Kwa nini kusambazwa?

Ikiwa shirika liko katika sehemu moja (yaani, ina eneo moja) na kompyuta chache tu, shirika kama hilo labda halihitaji kusambaza vitu vyake. Mashirika mengi, hata hivyo, hupita kwa haraka hatua hii na kuanza kupanua nyayo zao kwa maeneo mengi, njia nyingi za biashara, na kompyuta nyingi. Kwa mashirika haya, kompyuta iliyosambazwa inaweza kuongeza kiwango cha scalability ya suluhisho. Kwa kuongeza, motisha ya kuendeleza mifumo iliyosambazwa au ya ngazi nyingi inaweza kuwa na sababu kadhaa. Programu zilizosambazwa za viwango vingi hutoa faida kadhaa juu ya ukuzaji wa programu za mteja/seva. Ili kuelewa faida za matumizi ya n-tier, ni muhimu kutambua ubaya wa njia zingine; kwa mfano, kinyume cha diametric ya mfumo uliosambazwa - mfumo wa kati kulingana na kompyuta kuu moja. Kama watetezi wa usanifu wa mteja/seva wamebaini, mfumo huu una hasara kadhaa. Ikiwa kompyuta ya mfumo mkuu haipatikani, hakuna usindikaji unaoweza kufanywa. Kwa kuongeza, data zote lazima zihamishwe kompyuta ya kati, ambayo kimsingi ndio kumbukumbu kuu. Vile vile, katika mazingira ya mteja/seva, mteja kwa kawaida ni kipande kizito cha msimbo chenye hifadhidata maalum (SQL, AS/400, n.k.) iliyoundwa ili kutoa hifadhi ya data. Tatizo la mtindo huu ni kwamba mifumo mingi ya hifadhidata haiwezi kuwakilisha na kutekeleza sheria na taratibu zote za biashara zinazohitajika na mfumo changamano wa programu. Kwa sababu ya kutolingana huku, mantiki ya biashara mara nyingi hugawanywa kati ya programu ya mteja na programu ya seva. Aina hii ya mazoezi husababisha matatizo mengi yanayohusiana na uaminifu wa uendeshaji, utumiaji tena na sasisho, kwani mantiki ya biashara sio ya sehemu tofauti ya programu.

Tofauti na "frame kuu inaweza kufanya yote" au "nene" wateja katika mteja/seva, suluhu za viwango vingi hushinda matatizo haya mengi kwa kuunganisha mantiki ya biashara katika daraja la kati au daraja. Kutumia mbinu hii, vitu na utendaji iliyoundwa kufanya kazi na hifadhidata hutenganishwa. Matokeo yake ni uboreshaji, urekebishaji, na utumiaji bora wa programu.

Zaidi ya hayo, utendakazi wa kugawanya kwa kiasi kikubwa hupunguza muda unaohitajika kuunda programu mpya, na hivyo kuruhusu mifumo mipya kuunganishwa kwa urahisi na data na michakato ya sasa. Mteja mpya inaweza tu kutumia vifaa vya kati vilivyopo, na hivyo kutumia mantiki iliyopo ya biashara iliyoandikwa kwa programu za awali. Hatimaye, kuweka mantiki katika safu ya kati iliyofafanuliwa vyema huruhusu mkusanyiko wa maunzi yenye nguvu zaidi katika seva za vitu maalum. Viwango vya upakiaji vinapoongezeka, mashine mpya zinaweza kuongezwa, au kuboresha utendakazi, michakato ya seva inaweza kusambazwa tena kwa mashine zingine, kwa uwazi kabisa kwa mteja.

Kwa nini CORBA?

Uamuzi wa kutumia CORBA katika ombi la viwango vingi kawaida hutokana na utendaji wake uliothibitishwa wa tasnia, matumizi makubwa kama kiwango, na utekelezaji wazi wa jukwaa mtambuka. Pamoja na kiwango cha kufafanua violesura vya vitu, CORBA pia inafafanua itifaki ya kiolesura cha kawaida cha kitu (GIOP) na utekelezaji mahususi wa GIOP, unaoitwa IIOP, ambao unatumia juu ya TCP/IP.

Uwezo wa vitu vya CORBA kubadilishana taarifa kwenye Wavuti na ndani ya Mitandao kwa kutumia IIOP ni mojawapo ya sababu kuu kwa nini CORBA imekubaliwa sana. Wakati wa kuchagua programu za vifaa vya kati, CORBA hutoa faida kadhaa juu ya mbinu zingine zinazofanana na DCOM, ikijumuisha uhuru wa jukwaa, udhibiti zaidi juu ya michakato ya uhamisho wa habari kati ya vitu na utulivu uliothibitishwa.

Usanifu wa VisiBroker

Tathmini ya ORB

Usanifu wa CORBA unajumuisha huduma, miongozo na michakato kadhaa inayoruhusu vitu vilivyosambazwa kuwasiliana. OMA, kama ilivyoelezwa hapo awali, kimantiki imegawanywa katika vipengele viwili vya kiwango cha juu. Utengano huu huruhusu wabunifu wa mfumo kuunda usanifu uliosambazwa wa OMA kutoka kwa vipengee kutoka kwa wachuuzi wengi.

Kipengele Kinachoelekezwa na Mfumo: Dalali wa Ombi la Kitu ( Object Ombi Broker)
Kipengele kinachozingatia maombi: Vitu vya maombi vya CORBAfacilities.

Dalali wa Maombi ya Kitu (ORB) ndio sehemu kuu ya OMA. ORB inafafanua na kutoa njia ya kubadilishana habari kati ya vitu. ORB, au Dalali wa Ombi la Kitu, ni kituo cha kuunganisha ambacho hutoa seti ya huduma zinazoruhusu vitu viwili kuwasiliana kupitia mtandao. Hii hapa ni mifano ya baadhi ya huduma zinazotekelezwa katika ORB. Hizi ni uanzishaji wa kitu, eneo na mawasiliano. Huduma hizi zimeandikwa katika usanifu wa CORBA. Kuna watoa huduma wengi wa ORB. Baadhi ya wachuuzi wa ORB, kama vile Borland, pia hutekeleza huduma zingine za CORBA, kama vile huduma ya kutaja majina, huduma ya tukio, huduma ya muamala na huduma ya hifadhidata. Haya Huduma za ziada kutoa mfumo wa msingi wa kujenga mifumo ya programu inayoweza kusambazwa na kusambazwa.

Vifaa vya CORBA ni mkusanyiko wa vitu vilivyofafanuliwa katika IDL ambavyo vinaweza kutumiwa moja kwa moja na programu. Zinajumuisha vipengele vya usawa na vya wima vinavyoelezea sheria za mwingiliano kati ya vitu. Zinahusiana na Maharage ya Java kutoka ulimwengu wa Java.

Ubainifu kamili wa usanifu wa CORBA, kama ulivyokubaliwa na kuchapishwa na OMG, umegawanywa katika sehemu kuu tatu: kernel ya CORBA, ushirikiano wa CORBA, na upangaji wa OMG IDL kwa lugha mbalimbali. Kiwango cha CORBA hakibainishi sheria kali za kutekeleza usanifu. Wauzaji wa ORB wako huru kuunda ORB zao jinsi wanavyohitaji.

Broker ya Ombi la Kitu (ORB) - chombo cha kati ambacho hutoa seti ya huduma za kutafuta na kutumia utekelezaji vitu mbalimbali. Dalali wa Ombi la Kitu (ORB) ndio msingi wa OMA. Inafafanua miundombinu inayoruhusu vipengele vya CORBA kuwasiliana. Kumbuka, ORB ndiyo inayojulikana kama CORBA. Faida ya kutumia ORBs ni kwamba huficha ugumu wa mbinu ya kurudi nyuma iliyotumwa kwa kitu. Wakati kitu cha mteja kinapoita mbinu kwenye kifaa cha seva, bila kujali eneo lake, ORB hukata ombi na kupata seva inayolingana. Kwa urahisi, wachuuzi wa ORB sasa wanarekodi msimbo wote wa mawasiliano uliowahi kuandikwa na wasanidi programu. ORB zinaweza kuwasiliana kwa kutumia itifaki za kawaida za mawasiliano. Hii inaruhusu mteja wa CORBA na vitu vya seva kutekelezwa katika lugha tofauti za programu na mazingira ya uendeshaji. Baada ya seva ORB kukubali ombi la mteja, njia kwenye kitu cha seva inaitwa, kupitisha vigezo vinavyofaa. Mara tu kitu cha seva kinapomaliza kuchakata, seva ORB inarudisha matokeo kwa kitu cha mteja kupitia mteja ORB. Wateja wanaweza kupokea seti ya vigezo vya matokeo kutoka kwa ombi la mbinu ya kifaa kimoja cha seva. IDL katika vigezo na vigezo vya ndani/nje vinatekelezwa kwa kusudi hili pekee. Kwa hivyo, ORB huwakomboa waandaaji programu kutoka kwa kiasi kikubwa cha kazi ya kawaida. Vitu vinaweza kubadilishana habari bila kujali eneo lao, mfumo wa uendeshaji, au lugha ya programu.

Utekelezaji wa kimsingi wa CORBA kwa kawaida hujumuisha Dalali wa Ombi la Kipengee (ORB), mkusanyaji wa IDL (Lugha ya Ufafanuzi wa Kiolesura cha CORBA), na Huduma za Kawaida za Kitu (COS), ambazo husaidia vitu katika mchakato wa mwingiliano. Ikiwa kitu ni cha ndani, ORB hufanya ombi la njia ya ndani; ikiwa kitu kiko kwenye mashine nyingine inayohusishwa, ORB huwasiliana kwa kutumia GIOP (matumizi ya kawaida ni IIOP juu ya TCP/IP). Kwa hivyo, mteja haitaji "kujua" chochote kuhusu eneo la kitu, mfumo wa uendeshaji wa mwenyeji, au lugha ambayo ilitekelezwa ili kupata kumbukumbu yake.

Adapta za kitu, BOA na POA

Adapta ya kitu cha CORBA inahitajika ili kulinganisha dhana ya utekelezaji wa vitu katika lugha ya programu na dhana ya vitu vya CORBA. Huu ni ujumuishaji upya wa kanuni ya muundo wa adapta. Ifuatayo ndio ambayo adapta za kitu huwajibika:

Kuzalisha na Kutafsiri Marejeleo ya Kitu

  • Njia ya Kuita
  • Uanzishaji na uzima wa kitu na utekelezaji
  • Kuweka marejeleo ya kitu kwa utekelezaji wa kitu husika
  • Usajili wa mauzo

Adapta za kawaida za kitu cha CORBA:

  • Adapta ya Kitu cha Msingi (BOA) - Adapta ya kwanza ya kawaida ya kitu cha CORBA
  • Adapta ya Kitu Kibebeka (POA) - iliyoletwa katika kiwango cha CORBA 2.1, inachukua nafasi ya BOA

Watengenezaji waligundua kuwa BOA ilikuwa na dosari nyingi. Vipimo vya BOA yenyewe havikukamilika, na hivyo kufanya kuandika msimbo wa seva inayoweza kubebeka kuwa karibu kutowezekana. Hapa kuna shida zingine zinazotokea wakati wa kufanya kazi na BOA. Hii ina maana kwamba usajili wa utekelezaji na usindikaji wa hoja haukubainishwa, na mpangilio au majina ya madarasa ya mifupa hayakufafanuliwa. Zaidi ya hayo, hakuna mbinu za kuokoa na kurejesha hali ya kitu. Mizunguko ya maisha ya vitu vya CORBA na vitu vya utekelezaji vinafungamana kwa karibu na utekelezaji wa BOA, na vipimo vya BOA hupuuza kabisa kuendesha michakato sambamba katika mchakato wa seva.

Adapta ya Kitu Kibebeka inashughulikia baadhi ya mapungufu ya BOA. Vipimo vya POA vimeundwa ili kuwawezesha wasanidi programu kuandika programu za rununu na zinazoweza kupanuka. Wakati huo huo, POA inasaidia uwezo mbalimbali unaotoa udhibiti mzuri wa rasilimali zinazohitajika kutekeleza vipengee vya CORBA na kutuma maombi kwao. Inatoa miingiliano ya kudhibiti mzunguko wa maisha wa utekelezaji wa kitu na utayari wake wa kukubali maombi, POA inaweza kutumika hata kwa seva zilizo na mahitaji ya kigeni.

Istilahi za POA

POA ina seti yake ya dhana zinazopanua na kuboresha muundo wa kitu cha CORBA. Tuna kipengee cha CORBA ambacho ni "halisi", kitu dhahania, chenye uwezo wa kufikia marejeleo yake ya kitu na uwezo wa kukubali maombi. Kwa kuongeza, kuna mtumishi, ambayo ni kitu cha lugha ya programu ambacho kinapatikana ndani ya muktadha wa mchakato wa seva na kutekeleza kitu cha CORBA. Ubao wa pembeni unatoa umbo halisi kwa kitu kinacholingana cha CORBA. Zaidi ya hayo, POA inaauni Kitambulisho cha Kipengee, mfumo au kitambulishi kilichobainishwa na mtumiaji kinachotumika kutambua kitu ndani ya POA yake. Na hatimaye, mifupa ni kitu cha lugha ya programu inayounganisha mtumishi na POA, kuruhusu POA kutuma maombi kwa mtumishi.

Kitu cha CORBA na Mzunguko wa Maisha ya Mtumishi

POA hutoa utengano mkubwa kati ya maisha ya vitu vya CORBA na muda wote wa maisha wa ubao wa pembeni. Masharti yafuatayo yanarejelea mzunguko wa maisha wa kitu cha CORBA:

  • Kuanzisha - Kuanzisha kipengee kilichopo cha CORBA ili kukiruhusu kukubali maombi.
  • Kuzima ni kuzima kwa kitu amilifu cha CORBA.

Maneno yafuatayo yanarejelea mzunguko wa maisha wa ubao wa pembeni:

Wakati wa uhai wake, kitu cha CORBA kinaweza kuanzishwa na zaidi ya mtumishi mmoja. Wakati huo huo, ubao mmoja wa pembeni, kwa upande mwingine, unaweza kujumuisha zaidi ya kitu kimoja.

Uongozi wa POA

Sifa kuu ya usanifu wa POA ni kwamba seva inaweza kuwa na POA nyingi zilizowekwa ndani yake. Kwa upande mwingine, POA ya kiota inaweza kuundwa kwa kutumia uendeshaji wa utengenezaji kutoka kwa POA nyingine. Seva zote zina angalau, mzizi mmoja POA unaoweza kupatikana kutoka kwa ORB. Jina la POA iliyowekwa kiota hutambulisha POA hiyo katika muktadha wa mzazi wake. Jina la mzizi POA ni RootPOA.

Wasimamizi wa POA Kila POA ina Msimamizi wa POA anayehusishwa nayo, na Meneja wa POA hudhibiti mtiririko wa maombi kwa POA yake.

Msimamizi wa POA anaweza kuhifadhi maombi au kuyakataa. POA hutoa seti tajiri sana ya uwezo ambao hutoa kubadilika kwa kiwango cha juu kwa kuunda programu za seva. Vipimo vinasawazisha usanidi wa seva, kuruhusu watayarishaji programu kuunda programu ambazo zinaweza kubebeka kwenye ORB tofauti. Utekelezaji wa CORBA wa Visibroker unaauni vipengele vyote vya POA.

Uchunguzi wa IDL

Mojawapo ya vipimo muhimu ambavyo CORBA hutoa ni Lugha ya Ufafanuzi wa Kiolesura (IDL). IDL hufafanua vitu kwa njia inayotegemea lugha ili vitu viweze kufikiwa moja kwa moja kwa kutumia lugha yoyote inayotumika, mfumo wa uendeshaji au mtandao. Java na C++ ni lugha za programu zinazoruhusu msanidi programu kutekeleza suluhisho kwa shida za biashara. Kama IDL, haitegemei lugha zingine, na inaruhusu programu tu kufafanua miingiliano ya vitu, lakini sio utekelezaji wa vitu hivi.

CORBA hutoa teknolojia ya kitu kilichosambazwa ambayo huwezesha watumiaji kuunda programu wasilianifu, zinazoweza kupanuka. Vipimo vya IDL CORBA hutenganisha kiolesura na utekelezaji wake, kikiruhusu kiolesura kutekelezwa katika lugha ya programu inayofaa zaidi kazi mahususi. Mipangilio ya IDL imeundwa kwa C, C++, Ada, na Java, pamoja na lugha zingine. CORBA hutoa miundombinu ambayo inaruhusu utekelezaji tofauti wa vitu kuwasiliana na kila mmoja. Maswali ya vitu yamewekwa katika muundo wa kawaida ambao unaweza kutambuliwa na lugha tofauti na mifumo ya uendeshaji.

IDL hutumiwa kufafanua kiolesura cha kitu, ambacho kinakuwa makubaliano au mkataba kati ya mteja na seva ya kitu. Kiolesura kinaeleza utendakazi wote, vigezo vya ingizo na pato, na vighairi vyovyote ambavyo vinaweza kurushwa na kifaa cha seva. Kwa maneno mengine, interface inaelezea tabia ya kitu, sio jinsi tabia hiyo itatekelezwa. Kwa hivyo, IDL ni lugha bora ya kufafanua mifumo ya programu kubwa au ndogo, bila kujali lugha ya utekelezaji. Wasanifu wa mfumo na wasanifu hutumia IDL kuelezea ni huduma gani wanataka kutoa kwa wateja watarajiwa.

Kwa kuongeza, IDL ni njia bora ya kujumuisha miingiliano iliyorithiwa kwa sababu inatenganisha ubainifu wa kitu kutoka kwa utekelezaji wake. Vipengee vya seva ya CORBA vinaweza kuundwa ili kuunganishwa na programu zilizopo za urithi. Inatoa programu zilizopo na kiolesura chenye mwelekeo wa kitu, kinachoweza kufikiwa na mtandao.

IDL haina taarifa yoyote kuhusu jinsi kitu kinavyotekelezwa. IDL inaelezea kiolesura pekee. Utekelezaji wa kifaa cha seva unaweza kuwakilishwa katika lugha yoyote ya programu inayoauni CORBA. Ningependa kutambua kuwa IDL ni rahisi kujifunza. Inaauni seti ndogo ya sintaksia ya C++ bila miundo ya kitaratibu kama vitanzi vya na wakati. Kwa kuwa IDL inaelezea tu kiolesura cha kitu (km mbinu ya simu na vigezo), inaonyesha zaidi kwamba ni lugha rahisi kujifunza. Kwa wale ambao hawapendi wazo la kujifunza lugha nyingine, furahiya - VisiBroker inatoa suluhisho kamili la Java, ambapo kiolesura kinafafanuliwa kwenye kiolesura cha Java na mkusanyaji anabadilisha-wahandisi IDL na faili zinazohitajika kutoka kwa kiolesura cha Java. faili. Kipengele hiki pia huruhusu miundo ya darasa la Java kama vile Vekta kutumika kama vigezo vya simu.

IDL kimsingi ni lugha katika haki yake yenyewe, ingawa muundo wake ni sawa na C++ na Java. Nyenzo kadhaa zinapatikana kwenye tovuti ya OMG (www.omg.org) ambayo hutoa taarifa kuhusu kuanza kutumia IDL.

CORBA hutoa uwazi wa eneo. Wateja hawana haja ya kujua eneo la utekelezaji wa kitu. Hii hutoa unyumbufu wa kupanga vitu kwenye mashine moja, kwa mbali, au kwa kuendelea kusogeza kitu katika mazingira yanayobadilika. Mteja anaweza kutumia Huduma ya Kutaja ya CORBA kupata vipengee vya seva. Mahali halisi ya kitu cha seva ni wazi kwa mteja. Kwa kuongezea, VisiBroker ina Wakala Mahiri wa "nje ya sanduku" anayefaa, ambaye hufanya kazi kama Huduma ya Saraka wakati. utafutaji wa haraka na kuamua eneo la vitu.

CORBA IIOP

Itifaki ya Mtandao ya CORBA Inter-ORB (IIOP) hutoa ORBs uhuru wa wauzaji. ORB zinaweza kuingiliana kulingana na vipimo vya IIOP. Hiyo ni, IIOP inahakikisha kuwa vitu vya CORBA vinavyotekelezwa kwa kutumia ORB za mchuuzi mmoja vitaweza kuwasiliana na vitu vya CORBA vinavyotekelezwa kwenye ORB nyingine zozote.

Usanifu wa Usimamizi wa Kitu (OMA) unafafanua seti kuu ya vipimo, inayoitwa CORBAservices, ambayo inaweza kujumuishwa katika mifumo changamano ya programu. Huduma hizi huruhusu vitu vya programu kuwasiliana kwa kutumia njia za kawaida. Wachuuzi wametekeleza "CORBAservices" ili kuwezesha uundaji wa mifumo mikubwa iliyosambazwa.

Kwa upande mwingine, ikiwa msanidi programu atapanga kuandika programu kwa kutumia Enterprise Java Beans, IIOP inafaidika kutokana na usaidizi wa RMI/IIOP uliotangaza mwingiliano katika lugha nyingi na miongoni mwa vyombo kutoka kwa wachuuzi wengi. Chombo cha EJB Inprise kinatokana na CORBA. Inprise Application Server inatoa uoanifu wa CORBA na ramani za RMI-over-IIOP na Java-over-IDL.

Kuunda Seva ya CORBA Kwa Kutumia JBuilder

Ufafanuzi wa Kitu

Kwa kuzingatia vipengele hivi viwili, ufafanuzi wa kitu kama IDL na ORB kama njia ya mawasiliano kati ya vitu hivi, tunaweza kuanza kuchunguza kutengeneza programu ya CORBA kwa kutumia JBuilder. Kama mradi wowote wa programu, changamoto za awali zinazokabili utekelezaji wa programu yetu zitakuwa tathmini na muundo. Kwa kuwa CORBA ni kiwango kinacholenga kitu, ni lazima tugawanye mchakato wetu wa biashara kuwa vitu vya kimantiki, sifa zake, na shughuli ambazo tutahitaji kutekeleza kwenye vifaa hivi na vitu hivi. Ili kukamilisha kazi hizi, tutatumia seva rahisi ya Waliohudhuria ambayo itaweza kutoa makadirio ya mahudhurio kwenye mkutano wa Borland/Inprise.

Kuanza, tutafanya utendakazi kuwa rahisi kwa kufafanua kiolesura kimoja tu, ambacho tutawaita Wahudhuriaji. IDL. Kiolesura kinaeleza utendakazi wa kitu chetu kwa wateja. Ilitajwa hapo awali kwamba tunaweza kutumia Kafeini kufafanua violesura vyetu katika Java, lakini tunataka kuonyesha hili katika IDL.

Ukuzaji wa CORBA huko JBuilder

Katika ulimwengu wa kompyuta, Java imejiimarisha haraka kama jukwaa la kawaida la kuunda programu na programu za Mtandao na Intranet. Mojawapo ya sababu kuu za mafanikio ya Java ni kubebeka kwa jukwaa karibu kabisa. Programu zilizoandikwa katika Java zinaweza kukimbia katika mazingira anuwai. mifumo ya uendeshaji ah na usanidi wa vifaa. Changanya sifa hizi na urahisi wa utumiaji wa Java, usaidizi wa kushughulikia kwa upendeleo, usaidizi wa nyuzi, na ukusanyaji wa takataka, na una lugha ambayo ni mazingira bora ya ukuzaji wa kompyuta ya mtandao, haswa upangaji wa programu kwenye Mtandao.

  • Java - kitu kilichoelekezwa
  • Java - kirafiki
  • Java inatoa vighairi, usaidizi wa nyuzi, na mkusanyiko wa takataka
  • Java inaonyesha vizuri kwenye IDL

Java na CORBA zilitengenezwa kwa kila mmoja. Java inatoa unyumbulifu wa jukwaa mtambuka unaohitajika ili kuunda na kusambaza vitu kwenye mtandao wa kompyuta na mifumo mbalimbali ya uendeshaji. CORBA hutoa zana za kuunganisha na kuunganisha vitu vilivyosambazwa vilivyoandikwa katika lugha mbalimbali. Hebu tuangalie jinsi teknolojia hizi mbili zinavyofanya kazi pamoja.

Kwa sasa, wabunifu wa mfumo wa CORBA wanaweza kuwasilisha mifumo ya programu iliyosambazwa iliyofafanuliwa katika IDL na kutekelezwa kwa kutumia Java vivinjari vya kisasa na teknolojia za mtandao.

Kabla ya Java na CORBA watumiaji wa mbali ni wazi kulikuwa na ukosefu wa ufikiaji rahisi wa habari za mfumo mkuu. Mawasiliano na mainframe ni ngumu. Tunapaswa kuwa na wasiwasi kuhusu matoleo mapya ya jukwaa, itifaki za mawasiliano na lugha.

Kwa kupelekwa mteja mwembamba unaweza kutumia HTML ya kawaida kwenye mteja na seva za Java (ambazo ni mara mbili ya ukubwa wa wateja wa CORBA) kwenye seva ya wavuti. Katika usanifu wa ngazi tatu, programu ya maombi imegawanywa kati ya mteja, seva, na kiwango cha kati. Kiwango cha kati hurahisisha mteja na seva na hurahisisha utumaji kuliko mfumo wa viwango viwili ambamo mteja na seva huunganishwa moja kwa moja.

Katika CORBA, seva hutekeleza vitu, na wateja huita mbinu kwenye vitu hivyo. Maelezo IDL ni mkataba kati ya mteja na seva na mteja anachohitaji kufanya ni kutumia kitu kinachotekelezwa na seva.

Sasa kwa kuwa tumefafanua CORBA ni nini na jinsi inavyotekelezwa, wacha tuendelee kuandika maombi. Lugha za hivi punde za programu zinasaidia ukuzaji wa CORBA, ikijumuisha C++, Java na Object Pascal Delphi. Kwa hivyo, zana za msingi za RAD zinaunga mkono kiwango cha OMG kwa viwango tofauti. JBuilder alikuwa mmoja wa wa kwanza zana, iliyoundwa ili kuunganisha kwa uthabiti zana za ukuzaji za CORBA kwenye IDE, na JBuilder3.5 iliongeza uwezo kadhaa mpya wa kuunda seva za VisiBroker, wateja na huduma zingine za CORBA. Tutajifunza maendeleo kwa kutumia Java na JBuilder.

Ukuzaji wa maombi ya usanifu wa CORBA katika mazingira ya Jbuilder

Hapo awali, seva yetu ya Wahudhuriaji itajumuisha kitu kimoja, ConferenceManager, ambacho kitaarifu maombi ya uwezekano wa kuhudhuria mkutano. Tunataka kuweza kuuliza AttendeesManager kuhusu idadi inayotarajiwa ya wageni mwaka huu.

Katika IDL tunafafanua hili kama ifuatavyo: // Attendees.idl moduli bicon2000 ( interface Wahudhuriaji ( nambari ndefu (katika mwaka uliopita); );

Tulifafanua moduli inayoitwa bicon2000 (kifupi kwa Mkutano wa Borland/Inprise 2000). Ramani ya moduli kwa kifurushi cha Java, na ni nafasi ya majina ambamo kiolesura kinapatikana. Ndani ya moduli ya bicon2000 tunafafanua kiolesura kimoja kinachoitwa Waliohudhuria. Kama violesura vya Java, kiolesura hiki kimsingi ni mkataba kati ya mteja na seva inayoashiria ni njia zipi ambazo kitu cha Waliohudhuria hufichua kwa matumizi. Tunaweza kuona hapa jinsi IDL inavyofanana na C++ na Java katika syntax yake. Aina za data pia zinafanana; tunarejesha nambari ndefu (nambari kamili) kwa idadi ya wageni wetu, na kama mchango tunachukua thamani ambayo ilikuwa mwaka jana. Hoja ya "mwaka jana" imetambuliwa kama ndani kwa sababu kifaa cha seva (kilichofafanuliwa katika kesi hii kama nje) hakitabadilisha thamani hii. Kiolesura cha Waliohudhuria hufichua "nambari" moja tu, ikimaanisha kuwa kitu cha Java tunachotumia kutekeleza Wahudhuriaji kitahitaji tu kuauni mbinu hii moja. Ili kuunda faili hii ya IDL, chagua Faili, Mpya... kutoka kwa Menyu ya Juu. Teua kichupo cha Biashara kutoka kwa kidirisha cha Matunzio ya Vitu. Na kisha chagua Mfano wa IDL.

Ufafanuzi umekamilika; kinachohitajika kufanywa ni "kukusanya" muundo wa kawaida katika lugha maalum, kwa upande wetu, madarasa ya Java. Kukusanya faili ya IDL hutoa miingiliano ya Java, vijiti vya mteja, na mifupa ya seva ambayo hutekelezwa ili kuwasiliana. Madarasa haya hushughulikia upakiaji/upakuaji wa data, unaojulikana kama kupanga, kutoka kwa aina za data za Java kwenye mteja hadi aina za data za CORBA, na kisha kurudi kwenye aina za data za Java kwenye seva. Madarasa haya ya mbegu na mifupa pia hushughulikia upitishaji wa ujumbe wa IIOP ambao hutokea kati yao.

Bonyeza kulia kwenye ikoni ya Attendees.idl na uchague Fanya kutoka kwa menyu ya pop-up inayoonekana, ambayo itazalisha madarasa muhimu.

Ili kutengeneza seva ya CORBA ambayo itatekeleza mbinu ya "nambari", chagua Faili, Mpya... kutoka kwenye menyu ya upau wa vidhibiti. Teua kichupo cha Enterprise kwenye Matunzio ya Vitu, kisha uchague Programu ya Seva ya CORBA. Kutumia faili mpya ya IDL itaunda faili zilizobaki za seva. Kwa kuongeza, GUI itaundwa ambayo inaweza kuwa mwenyeji wa seva.

Faili zilizoundwa:

Waliohudhuria .java: Kiolesura cha Java kinacholingana na kiolesura chetu cha IDL. Kitu cha Java ambacho hutoa utekelezaji wa kitu chetu cha Waliohudhuria hutekelezea kiolesura hiki.

AttendeesHelper.java: Darasa dhahania linalotumiwa na mteja kufunga kifaa cha Seva na kutoa mbinu mbalimbali za huduma za kurejesha Vitambulisho vya Waliohudhuria, kupunguza Huduma za CORBA zilizorejeshwa kutoka kwa aina ZOZOTE, n.k. AttendeesHolder.java: Inatumiwa na Msaidizi, darasa hili ni darasa la usaidizi ambalo hutoa uwezo wa kupitisha kitu cha Waliohudhuria kama kigezo cha CORBA.

AttendeesOperations.java: Darasa la kiolesura linalotumika kama njia mbadala ya kuunganisha mifupa kupitia wajumbe. Pia husaidia kushinda kizuizi cha madarasa ya Java ambayo hayawezi kurithi kutoka kwa miingiliano mingi.

AttendeesPOA.java: Darasa la Java POA ambalo Kitu halisi kitatekelezwa.

AttendeesPOATie.java: Huu ni utekelezaji uliokabidhiwa kwa kiolesura. Kila mfano wa darasa la kufunga lazima uanzishwe kwa mfano wa darasa la utekelezaji ambalo hutekelezea darasa la Uendeshaji ambalo linakabidhi kwa kila operesheni.

AttendeesStub.java: Inatumiwa na Msaidizi kukasimu simu za mbinu kwa kitu cha mbali, hii ni msimbo wa stub wa kutumika kwa upande wa mteja.

Kwa upande wa seva:

Bicon2000ServerApp.java: Programu ya seva ambayo itapakia ServerFrame na kufanya AttendeesImpl (utekelezaji).

AttendeesImpl .java: Utekelezaji halisi. Hili ni darasa la Java ambalo tutabadilisha kutekeleza matokeo ya kupiga njia ya "nambari". Kwa njia hii tunarudi (int)(1.2 * mwaka jana).

ServerFrame .java: Darasa la Fremu (GUI).

ServerMonitor.java: Huhifadhi faili ya kumbukumbu ya seva na ndicho chombo cha kurasa zote za Seva Monitor.

ServerMonitorPage.java: Hutekeleza ukurasa wa Kufuatilia Seva ili kuonyesha vihesabio vya kiolesura.

ServerResources.java: Ina mifuatano ya programu ya seva kwa ujanibishaji.

Ili kuzalisha mteja anayeweza kupiga nambari ya mbinu, chagua Faili, Mpya... kutoka kwenye menyu ya Juu. Chagua kichupo cha Biashara kutoka kwa Matunzio ya Vitu. Wakati wa kutumia IDL, hii itatoa darasa la ClientImpl. Ili kupima mteja haraka, tengeneza njia kuu katika darasa hili.

utupu tuli wa umma (String args) hutupa Vighairi ( System.out.println(new AttendeesClientImpl().nambari(10000)); )

Kuendesha Maombi

Ili kuendesha programu, kwanza zindua SmartAgent. Chagua Zana kutoka kwenye menyu ya Upau wa vidhibiti na uchague VisiBroker Smart Agent. Ikiwa menyu imeangaliwa, tayari una Wakala Mahiri anayeendesha. Bofya kulia kwenye bicon2000ServerApp.java na uchague Endesha kutoka kwenye menyu ibukizi. Kuanzisha mteja, chagua AttendeesClientImpl na uchague Endesha kutoka kwenye menyu ibukizi. Matokeo yanapaswa kurudi 12000.

Sasa una programu halisi ya CORBA inayofanya kazi. JBuilder haipunguzi tu kazi ya kuchosha ya kuunda programu kwenye safu ya amri ya EMACS, pia hukuruhusu kutoa prototypes haraka na uthibitisho wa dhana ya programu yako kwa takriban dakika.

Smart Agent

Ili kuelewa kikamilifu msimbo uliotolewa na Jbuilder, ni lazima tujifunze baadhi ya maelezo mapya kuhusu utekelezaji wa VisiBroker CORBA. Kipengee kipya cha kwanza cha kujadiliwa ni Ajenti Mahiri, wakati mwingine hurejelewa kwa jina la OSAGENT inayoweza kutekelezeka. Smart Agent ni mchakato wa kuanzisha jukwaa mahususi ambao hutoa huduma za saraka kwa wateja wa CORBA na utekelezaji. Wakati mwingine hulinganishwa na opereta wa habari, na maombi ya mteja ikilinganishwa na simu kwa huduma ya habari, ambapo mteja anaomba mtu mwingine kwa jina na operator huunganisha pande hizo mbili. Wakati mteja anajaribu kuunganisha kwa kitu mahususi, Ajenti Mahiri hutafuta mfano wa kitu hicho na kurudisha rejeleo kwa mteja. Kwa upande mwingine wa modeli hii, wakati utekelezwaji wa kitu unapatikana, hujiandikisha wenyewe kwa Ajenti Mahiri ili wateja waweze kuzipata. Vile vile, wakati utekelezaji unatoka, itajiondoa kwenye usajili wa Smart Agent. Iwapo kwa sababu yoyote ile utekelezaji wa kitu utaisha bila kukaguliwa na Wakala Mahiri, wakala huyo hatimaye atagundua hili kupitia ping na kuangalia utekelezaji wenyewe. Smart Agent ni mojawapo ya michakato muhimu katika muundo wa VisiBroker CORBA katika kutoa eneo la kitu, hutazama tu kitu wakati ombi linapoingia. Mteja hahitaji kujua kama kipengee kiko ndani ya kompyuta moja, au kimataifa, au kama kinatumia mfumo tofauti wa uendeshaji.

Utekelezaji wa Kitu cha Upande wa Seva darasa la umma WaliohudhuriaImpl huongeza bicon2000.bicon2000.WaliohudhuriaPOA ( Jina la kamba = "Waliohudhuria"; ... ... nambari ya int ya umma(int lastYear) ( ServerMonitor.log("(" + jina + ") WaliohudhuriaImpl.java number()" ); return (int)(1.2 * last Year); ) ) Msimbo wa Upande wa Seva // SmartAgent husikiliza kwenye bandari ya UDP 14000. // Hii mara nyingi huitwa mapigo ya moyo ya smartagent. System.getProperties().weka("ORBagentPort", "14000"); // Anzisha ORB org.omg.CORBA. ORB orb = org.omg.CORBA.ORB.init(args, System.getProperties()); // Kupata RootPOA; badala ya kuanzisha BOA, // tunapata marejeleo ya //the root POA POA poaRoot = POAHelper.narrow (orb.resolve_initial_references("RootPOA")); // Kuweka mfululizo wa kamba ambayo itasajili jina hili // kitu = "Waliohudhuria"; // Kuweka sera (muda wa maisha) katika Persistent org.omg.CORBA.Policy AttendeesPolicies = ( poaRoot.create_lifespan_policy(LifespanPolicyValue.PERSISTENT) ); // Katika BOA, kitu kinakuwa kinaendelea (kilichohifadhiwa) ikiwa kinapokea // jina. Baadhi ya BOA zinaweza kuhimili vitu vya muda mfupi na //vinavyoendelea. Walakini, POA moja inaweza tu kuauni vitu // vilivyohifadhiwa au vya muda mfupi. Poa ya mizizi tuliyopata // hapo juu inasaidia tu vitu vya muda mfupi. Walakini, sisi // tunahitaji kitu kilichohifadhiwa. Kwa hivyo, tutaunda //POA nyingine na sera ya mzunguko wa maisha ya "kuendelea". POA poaWaliohudhuria = poaRoot.create_POA(jina + "_poa", poaRoot.the_POAManager(), AttendeesPolicies); // Katika BOA, mtumishi ni kitu cha CORBA. Lakini katika POA, mtumishi na // kitu cha CORBA ni tofauti. Badala ya kuunda kipengee cha CORBA na kuweka // obj_is_tayari kuwezesha kitu hicho, sasa tutaunda // mtumishi na kuiwasha kwenye POA kwa kutumia kitambulisho. Opereta mpya //AttendeesImpl()) ni utekelezaji wa mtumishi na kuwezesha //mtumishi huyo kwa kutumia kitambulisho katika myPOA poaAttendees.activate_object_with_id (name.getBytes(), new AttendeesImpl()); // Amilisha meneja wa POA poaRoot.the_POAMAnager().amilisha(); // Subiri hadi maombi yafike orb.run(); Darasa la umma la Msimbo wa Upande wa Mteja AttendeesClientImpl ( boolean bInitialized = uongo; bicon2000.bicon2000.Waliohudhuria _waliohudhuria; com.borland.cx.OrbConnect orbConnect1; String name = "Waliohudhuria"; AttendeesClientImpl() ya umma (inapatikana); jaribu (jaribu) ex) ( ex.printStackTrace(); ) ) utupu wa faragha jbInit() hutupa Vighairi ( ) public boolean init() ( ikiwa (!bInitialized) ( jaribu ( org.omg.CORBA.ORB orb = null; if (orbConnect1 !=) null) ( orb = orbConnect1.initOrb(); ) ikiwa (orb == null) ( // Anzisha orb ya ORB = org.omg.CORBA.ORB.init((String)null, System.getProperties()); ) // Pata Kipengee cha Seva _waliohudhuria = bicon2000.bicon2000.AttendeesHelper.bind(orb, "/" + jina + "_poa", name.getBytes()); bInitialized = true; ) kamata (Isiofuata kanuni) ( ex.printStackTrace( ); ) ) rudisha biInitialized; ) nambari ya int ya umma(int lastYear) ( init(); rudisha _attendees.number(lastYear); ) utupu kuu wa umma tuli (String args) hutupa Vighairi ( System.out.println(new AttendeesClientImpl() .nambari(10000)); ))

Kupanua mfano wetu

Ombi la Wahudhuriaji tuliloandika lilikuwa mfano uliorahisishwa kupita kiasi wa jinsi Mfumo halisi wa Mahudhurio unaweza kuonekana. Ili kutathmini zaidi IDL na manufaa ya CORBA, tutarejea kwa ufupi mradi wetu wa Waliohudhuria. Katika zoezi letu, taarifa za mgeni zilirejeshwa kwa kupiga simu njia rahisi kwa Waliohudhuria kupinga. Huenda tukahitaji kuongeza mabadiliko ya asilimia, asilimia ya kila siku, nafasi za hoteli, na kutopatikana kwa ufuatiliaji wa kipekee. njia hii kupiga simu. IDL yetu ingeonekana kitu kama hiki:

/** * Attendees.idl * Mfano wa IDL kwa mkutano wa Borland/Inprise * */ moduli bicon2000 ( /** * Kiolesura cha Mtu hufafanua mtu */ Kiolesura cha Mtu ( kamba getName(); ); /** * Wahudhuriaji kiolesura hufafanua kitu cha mkutano * Wahudhuriaji Huu ni mkutano wa siku tatu. */ interface Wahudhuriaji ( enum ConferenceDays ( DAY1, DAY2, DAY3 ); isipokuwa RoomNotAvailable (); nambari ndefu (katika mwaka uliopita wa muda mrefu); asilimia ya kueleaOngeza(); asilimia ya kueleaIncreaseOnDay (katika Siku za Mikutano ambayoSiku gani); kitabu cha booleanHotelRoom(mhudhuriaji binafsi) huongeza (RoomNotAvailable); ); );

Kumbuka kuwa moduli hii ina kiolesura zaidi ya kimoja. Mifupa miwili na proksi ni misimbo ya vitu viwili ambayo itatolewa wakati IDL2JAVA inaendeshwa. Ni muhimu kuelewa kwamba IDL ni lugha tajiri sana ambayo inaweza kuelezea kabisa muundo wa kitu chetu na, wakati imekusanywa, hatimaye tunasalia na utekelezaji tu wa vitu vya Java, kama ilivyo kwa madarasa yoyote ya Java. Hii inaonyesha kwamba muundo wa maombi ya CORBA hauwekei vikwazo au kutoa mawazo yoyote kuhusu uwezekano wa utekelezaji.

Huduma za ziada za VisiBroker

Katika mfano wetu, tuligusia vipengele vingi vya msingi vilivyotolewa na VisiBroker hasa, na usanifu wa CORBA kwa ujumla. Kuna, hata hivyo, kadhaa huduma za ziada na michakato ambayo haijatumika katika mfano huu ambayo mara nyingi inahitajika kwa kiwango kikubwa Maendeleo ya CORBA. Hapa ni baadhi ya vipengele hivi:

Console - Inprise VisiBroker Console ni zana inayokuruhusu kutazama na kudhibiti huduma za VisiBroker ORB kwa kutumia kiolesura cha picha. Hasa, unaweza kutumia vivinjari vya huduma vya ORB kudhibiti seva za kifaa, kudhibiti usanidi wa walinda lango, kutazama hazina ya kiolesura, kuhariri miktadha ya majina, kutafuta matukio ya vitu, na kutazama OAD kwenye mtandao wako. Muundo wa VisiBroker Console ni sawa na violesura vya kiweko vya picha katika Inprise Application Server na Inprise AppCenter.

SmartAgent - Smart Agent VisiBroker (osagent) ni huduma ya saraka inayobadilika, inayosambazwa ambayo hutoa vifaa vinavyotumiwa na programu za mteja na utekelezaji wa kitu. Smart Agent lazima iwe inaendeshwa na angalau mpangishi mmoja ndani ya mtandao wako wa karibu. Mpango wa mteja wako unapopiga simu bind() kwenye kitu, Wakala Mahiri hushauriana kiotomatiki. Ajenti Mahiri hupata utekelezaji uliobainishwa ili muunganisho uweze kuanzishwa kati ya mteja na utekelezaji. Mawasiliano na Smart Agent ni wazi kabisa kwa programu ya mteja. Sera ya POA ikiwekwa kuwa PERSISTENT na activate_with_id inatumiwa, Ajenti Mahiri husajili kitu au utekelezaji ili programu ya mteja iweze kuitumia. Wakati kitu au utekelezaji umezimwa, Smart Agent huiondoa kwenye orodha ya vitu vinavyopatikana. Kama ilivyo kwa programu za mteja, mawasiliano na Smart Agent ni wazi kabisa kwa utekelezaji wa kitu.

OsFind- Iwapo tunataka kuhakikisha kuwa Wakala Mahiri anafahamu kifaa, tunaweza kuthibitisha hili kwa kutumia huduma mahususi ya VisiBroker inayoitwa osfind. Tunapoendesha osfind, tunaona kuwa kifaa chetu kimesajiliwa na Wakala Mahiri na kinapatikana kwa maombi ya mteja. SmartAgent, inayoendesha katika mazingira ya Windows, hutoa console kwa kutazama vitu vilivyosajiliwa. Zaidi ya hayo, unaweza kuibua kuona faili ya kumbukumbu na vifungo. OSFIND pia huripoti maelezo kuhusu Pepo la Kuanzisha Kipengee, mchakato maalum wa VisiBroker ambao unaweza kuwezesha seva kama watoa huduma kama wanavyoombwa na wateja.

Kitatuzi

RMI-over-IIOP - RMI (maombi ya njia za mbali - piga simu mbinu za mbali) ni utaratibu wa Java unaokuruhusu kuunda na kutumia vitu katika mazingira yaliyosambazwa. Kwa maana hii, RMI ni ORB ambayo ni lugha mahususi (Java) na isiyotii CORBA. OMG imetoa vipimo vya ramani vya Java hadi IDL ambavyo huruhusu madarasa ya Java yaliyoandikwa kwa kutumia RMI kuingiliana na vitu vya CORBA kwa kutumia usimbaji wa IIOP. VisiBroker ina vikusanyaji viwili vinavyokuruhusu kurekebisha madarasa yako yaliyopo ya Java ili kufanya kazi na vitu vingine vinavyotumia VisiBroker ORB. Kikusanyaji cha java2iiop hukuruhusu kurekebisha darasa lako linalooana na RMI ili kutumia IIOP, na kutengeneza mifupa kamili, mbegu na madarasa ya Msaidizi. Mkusanyaji wa java2idl hutoa IDL kutoka kwa madarasa yako ya Java, hukuruhusu kuyatekeleza katika lugha zingine kando na Java.

Hifadhi ya Kiolesura ni huduma ya hiari inayoweza kutoa maelezo kuhusu kiolesura maalum kinapoombwa na wateja. Kwa njia hii, wateja wanaweza kuuliza hazina ya kiolesura ili kujifunza ni njia gani zinazotolewa na kiolesura na kwa upande wao kuwaita. Hifadhi ya kiolesura pia inaweza kutumika kuhifadhi maelezo ya ziada kuhusu kiolesura, kama vile maelezo ya kuwezesha.

OAD- Pepo iliyotajwa kwa ufupi ya OAD au Object Activation Demoni inaweza kutumika kuamilisha michakato ya seva inapohitajika, kama vitu vya ombi la mteja ndani yake, au kwa njia za kuwaita. OAD hutumia michoro iliyohifadhiwa kwenye hazina ya kiolesura ili kubainisha ni seva zipi zinazotoa miingiliano.

Huduma za Majina- Hukuruhusu kupata vipengee kulingana na muktadha wa kutaja - kitu maalum ambacho huhifadhi marejeleo ya kitu cha kipekee na kuunganisha majina. Kupitia huduma za kutoa majina, wasanidi programu na wasimamizi wanaweza kuweka majina ya kimantiki kwa vitu ambavyo vinaweza kupatikana kwa kutumia majina hayo baadaye.

Vipokezi/Vishughulikia Tukio/Vichochezi- Huduma hizi zinaweza kuandikwa ili kutoa udhibiti mkubwa zaidi wa kufunga na kufunga tena, kushughulikia hitilafu, na kutoa huduma za kiwango cha chini kama vile kusawazisha mzigo au usimbaji fiche.

Mlinda lango- Mlinda lango huruhusu wateja wa VisiBroker kuwasiliana na seva zilizomo mitandao mbalimbali, wakati wa kuzingatia vikwazo vya usalama vilivyowekwa na vivinjari vya wavuti na ngome. Mlinda lango hufanya kama lango kati ya wateja na seva wakati vikwazo vya usalama vilivyowekwa na usalama wa sanduku la mchanga la Java au ulinzi wa kuongezeka, usiruhusu wateja kuwasiliana moja kwa moja na seva. Mlinda lango ni seva ya proksi ya GIOP ambayo inatii kikamilifu vipimo vya Firewall vya OMG CORBA. Kwa kuongezea, Mlinda lango hutoa utendakazi ufuatao: uwekaji kamba, uwazi wa eneo, uwezo wa kupiga simu tena, uwekaji tunnel wa HTTP, hufanya kazi kama seva rahisi ya wavuti kwa madarasa ya upakiaji, vidhibiti vya ufikiaji vinavyotegemea IP, kusawazisha mzigo, uvumilivu wa hitilafu.

Kiolesura cha Uombaji Kinachobadilika- Kiolesura hiki huruhusu wateja wa CORBA kuita mbinu za wakati wa utekelezaji kwa majina na kugundua mbinu hizo wakati wa utekelezaji kwa kufikia hazina ya kiolesura. DII hukuruhusu kuunda wateja bila kutumia faili za stub zinazozalishwa kutoka kwa msimbo wa IDL.

Kiolesura cha Mifupa chenye Nguvu- Kama DII, DSI inaruhusu utekelezaji wa kitu kuundwa bila kupanua madarasa ya mifupa. Inaweza kuwa muhimu kuruhusu kitu kutekeleza miingiliano mingi.

Kufunga Kufunga- Huhakikisha kwamba utekelezaji wa vipengee vya CORBA huundwa kutoka kwa madarasa ambayo hayarithi kutoka kwa org.omg.CORBA.Object. Ukaushaji wa kitu, unaojulikana kama ufungaji wa kitu, huruhusu seva kupiga simu za moja kwa moja kwa utekelezaji wa kweli wa kitu. Hii ni muhimu sana wakati wa kuunda vitu vya CORBA kutoka kwa madarasa yaliyopo, kwani Java haitumii urithi mwingi.

Stubs Smart- Mipako inayoingilia simu zote za mbinu, kutoa vidhibiti vyema vya kukatiza ili kuongeza msimbo kwa ajili ya usalama, akiba, na kusawazisha upakiaji.

Hitimisho

Tulijadili dhana kuu za VisiBroker CORBA na kutekeleza mfano rahisi wa matumizi yake. Ingawa ni salama kusema kwamba programu za ulimwengu halisi ni ngumu zaidi, mfano huu unawakilisha dhana nyingi kuu za usanifu wa CORBA. Ni wazi kwamba CORBA ni kiwango cha makubaliano ya sekta ambayo imebadilisha kwa kiasi kikubwa jinsi uundaji wa mifumo ya habari inaweza kutekelezwa kwa kutekeleza mifumo ya vitu vilivyosambazwa na kutoka kwa mifumo ya urithi hadi safu. usanifu wa kisasa. Kwa kusoma makala hii, watengenezaji na wasanifu wataweza kupata ufahamu wazi wa usanifu wa msingi wa CORBA na motisha kwa matumizi yake, pamoja na ujuzi wa vitendo wa jinsi ya kuongeza manufaa ya VisiBroker katika maombi ya baadaye yaliyotengenezwa katika mazingira ya JBuilder.


Ripoti lazima iwe na:

    Taarifa ya tatizo lililotatuliwa na programu inayofanya kazi vizuri.

    Mwongozo wa mtumiaji wa programu iliyotatuliwa, iliyo na maelezo ya violesura vya vitendaji vyote vya programu.

    Orodha ya programu na maoni muhimu.

  1. Maswali ya kudhibiti

          CORBA ni nini?

          Nini kilitokea IDL? Ni ya nini?

          Je, mteja na seva huingiliana vipi?CORBA?

          Je, data huhamishwaje kati yao?

          Je, seva ya jina ni ya nini?

          Jinsi inavyoanza CORBA seva?

  1. Fasihi

    Ken Arnold, James Gosling, David Holmes.Lugha ya programu ya Java™.

    Tovuti rasmiJavahttp:// java. jua. com/ (kuna sehemu katika Kirusi na kitabu cha maandishi).

    Java™ 2 SDK, Toleo la Kawaida Hati - http://java.sun.com/products/jdk/1.5/index.html.

    James Gosling, Bill Joy, Guy Steele.Uainishaji wa lugha Java ( Uainishaji wa Lugha ya Java http :// www . javasoft . com / hati / vitabu / jls /). Tafsiri kwa lugha ya Kirusi -http:// www. umoja- vologda. ac. ru/ java/ jls/ index. html

    Tovuti rasmi ya mradiKupatwa kwa juahttp:// www. kupatwa kwa jua. org/.

  1. Kiambatisho cha 1. CORBA

Teknolojia CORBA (KawaidaKituOmbiDalaliUsanifu) ni kiwango cha kuandika maombi yaliyosambazwa yaliyopendekezwa na muunganoMungu wangu (FunguaUsimamiziKikundi) Kwa kuunda vitu vya CORBA, tunaweza, kwa mfano, kupunguza kwa kiasi kikubwa muda unaohitajika kutatua matatizo ambayo yanahitaji kiasi kikubwa cha hesabu. Hili linawezekana kwa kuweka vitu vya CORBA kwenye mashine tofauti. Kila kitu cha mbali hutatua kazi ndogo maalum, na hivyo kumwondolea mteja kazi isiyo ya lazima.

Msingi wa CORBA ni Dalali wa Ombi la Kitu. ORB inasimamia mwingiliano wa vitu katika mazingira ya mtandao iliyosambazwa. IIOP (Itifaki ya Mtandao wa Inter-ORB) ni itifaki maalum ya mwingiliano kati ya ORB.

Kitu maalum kinachoitwa stub hufanya kazi katika nafasi ya anwani ya mteja. Baada ya kupokea ombi kutoka kwa mteja, hupakia vigezo vya ombi katika muundo maalum na kupeleka kwa seva, au tuseme kwa mifupa.

Mifupa ni kitu kinachofanya kazi katika nafasi ya anwani ya seva. Baada ya kupokea ombi kutoka kwa mteja, huifungua na kuituma kwa seva. Mifupa pia hubadilisha majibu ya seva na kuyapitisha kwa mteja (stub).

Ili kuandika programu yoyote ya CORBA kwa kutumia teknolojia ya Java, unahitaji kuwa na vitu viwili - kifurushi cha JDK1.5 kilichosakinishwa na mkusanyaji wa idlj (…\ jdk 1.5.0\ bin\ idlj. mfano) JDK hutoa seti ya madarasa ya kufanya kazi na vitu vya CORBA, na idlj hupanga lugha ya IDL hadi Java.

6 .1 Kuunda programu rahisi ya CORBA

      1. Kuandika kiolesura

Uumbaji CORBA maombi yamewashwa Javahuanza na kuandika kiolesura cha kitu cha mbali kwa kutumia lugha ya maelezo ya kiolesura (KiolesuraUfafanuziLugha, IDL).

Hebu tuundefailihabari.idl

moduli ya HelloApp

interface Habari

kamba sayHello();

kuzima kwa njia moja ();

Kiolesura hiki kinaelezea njia mbili tukuzimisha Na semaHujambo . Zaidi ya hayo, haijalishi kwetu ni nini njia hizi zinafanya, jambo kuu ni kwamba tunaamua kuwa zipo na kuamua ni vigezo gani vya pembejeo na pato wanazo.

Ifuatayo unapaswa kuendesha mkusanyajiIDL- kwa- Javaidlj:

idlj – kuangukaHabari. idl

Folda mpya imeonekana kwenye saraka ya sasaHabari Programu , ambayo ina faili sita za java. Kila mmoja wao ana madhumuni yake mwenyewe.

    HabariPOA. javajava- darasa la kufikirika ambalo sio zaidi ya mifupa ya seva (mifupa) na hutoa utendaji wa seva.

    _ HabariStub. java- darasa linalotekeleza mbegu ( mbegu) mteja. Hutoautendaji wa mteja.

    HabariMsaidizi. java Na HelloHolder. java- madarasa ambayo hutoa kazi za msaidizi kwaCORBA vitu.

    HelloOperesheni. java- darasa lililo na maelezo ya kiolesurahabari katika lugha Java.

    Habari. java- darasa - mrithiHelloOperesheni, kiolesura cha kusaidiaorg. Mungu wangu. CORBA. Kitu.

      1. Kuunda seva

Sasa kazi yetu ni kuandika darasa linalotumia kiolesurahabari . Kwa upande wetu itakuwaHabariImpl . Tafadhali kumbuka kuwa ni mrithi wa darasaHabariPOA . KATIKA HabariImpl mbinu zilizotangazwa ndaniHabari . idl .

Ili kurahisisha kazi, tamko la mbinu linaweza kuchukuliwa kutoka kwa faili HelloOperesheni . java , imetengenezwa jdlj .

orb ya kibinafsi ya ORB;

orb = orb_val;

Kamba ya umma semaHello() (

rudi "\nHujambo ulimwengu!!\n";

kuzima kwa utupu wa umma () (

orb.shutdown(uongo);

Hatua inayofuata ni kuunda halisiseva sehemu ya programu. Hii itakuwa darasaHelloServer.

Itakuwa na njia moja tu - kazi ya kawaidakuu.

Jambo la kwanza tunalofanya ni kuunda ORB. Kisha tunaunda mfano wa darasa la kitu cha mbali (HabariImpl) na uisajili katika ORB. Ifuatayo, tunaita huduma maalum ya jina (NameService) na kujiandikisha jina la kitu cha mbali ndani yake ili mteja apate kuipata.

Hebu tuangalie kwa makini hatua hizi.

1. Uundaji na uanzishaji wa ORB. Imetolewa kwa kupiga simu njia tulindani yake darasa la ORB

2. Kuunda mfano wa darasa la kitu cha mbali na kusajili katika ORB

helloImpl.setORB(orb);

3. Kupata muktadha wa jina (NamingContext)

org.omg.CORBA. Object objRef =

Katika mstari wa kwanza tunapata rejeleo la kitu kwa huduma ya jina (NameService). Lakini kwa kweli hiki ni kitu cha kawaida cha CORBA na ili kuitumia kama muktadha wa kumtaja (NamingContext), unahitaji kupiga njia hiyo.nyembamba darasa NamingContextHelper , ambayo inaonekana kubainisha kipengee hiki cha CORBA.

4. Kusajili jina la kitu cha mbali (HabariImpl)

Jina la kamba = "Habari";

ncRef. funga tena (njia, href);

Jina limesajiliwa ili mteja apate kitu cha mbali. Kusudi hili linahudumiwa na kazifunga tena (JinaComponentnc, Kituobj) interface NamnaMuktadha.

5. Kusubiri maombi kutoka kwa mteja

orb. kukimbia();

Seva sasa iko tayari kutumika.

// HelloServer.java

agiza HelloApp.*;

kuagiza org.omg. CosNaming.*;

agiza org.omg.CORBA.*;

kuagiza org.omg. PortableServer.*;

kuagiza org.omg. PortableServer.POA;

ingiza java.util. Mali;

darasa HelloImp inapanua HelloPOA (

orb ya kibinafsi ya ORB;

utupu wa umma setORB(ORB orb_val) (

orb = orb_val;

// tumia njia ya sayHello()

Kamba ya umma semaHello() (

rudi "\nHujambo ulimwengu!!\n";

// tumia njia ya kuzima ()

kuzima kwa utupu wa umma () (

orb.shutdown(uongo);

darasa la umma HelloServer (

utupu tuli wa umma (String args) (

jaribu (

ORB orb = ORB.init(args, null);

// pata marejeleo ya rootpoa na uwashe POAMAnager

POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

rootpoa.the_POAMmanager().amilisha();

// unda mtumishi na uisajili na ORB

HelloImpl helloImpl = HelloImpl mpya ();

helloImpl.setORB(orb);

// pata kumbukumbu ya kitu kutoka kwa mtumishi

org.omg.CORBA. Ref ya kitu = rootpoa.servant_to_reference(helloImpl);

Hello href = HelloHelper.finyu(ref);

// NameService inaomba huduma ya jina

orb.resolve_initial_references("NameService");

// Tumia NamingContextExt ambayo ni sehemu ya Interoperable

// Uainishaji wa Huduma ya Kutaja (INS).

NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

// funga Rejeleo la Kitu katika Kutaja

Jina la kamba = "Habari";

Njia ya Kipengele cha Jina = ncRef.to_name(jina);

ncRef.rebind(njia, href);

System.out.println("HelloServer iko tayari na inasubiri...");

// subiri maombi kutoka kwa wateja

orb.run();

kukamata (Isipokuwa e) (

System.err.println("ERROR:" + e);

System.out.println("HelloServer Inatoka...");

      1. Kuunda mteja

Wacha tuendelee kuandika nambari ya mteja.

Hatua za msingi za kuandika maombi ya mteja

    Uundaji na Uanzishaji wa ORB

    Kupata muktadha wa huduma ya jina (NamnaMuktadha)

    Kutafuta kitu cha mbali

    Kupiga simu kwa njia ya sayHello.

    Kupiga simu kwa njia ya kuzima.

Kama unaweza kuona, vidokezo viwili vya kwanza vinaambatana na hatua za kuunda programu ya seva, kwa hivyo hatutazingatia.

Hoja ya tatu pia ni rahisi sana kutekeleza. Kitu kinaundwaJinaComponent. Njia hiyo inaitwakutatua (JinaComponentnjia), ambayo hutafuta kitu cha mbali kwa jina (kawaidaCORBAkitu). Kwa kutumia mbinunyembamba (org. Mungu wangu. CORBA. Kituobj) darasa habariMsaidizi(iliyotolewaidljcompiler) tunapata kumbukumbu ya kitu kwenye kiolesurahabari.

Jina la kamba = "Habari";

Sasa unaweza kupiga simu njiasemaHujambo:

Njiakuzimishahuzima seva.

helloImpl.shutdown();

//testClient.java

agiza HelloApp.*;

kuagiza org.omg. CosNaming.*;

kuagiza org.omg. CosNaming. NamingContextPackage.*;

agiza org.omg.CORBA.*;

darasa la umma HelloClient

{

tuli Habari hujamboImpl;

utupu tuli wa umma (String args)

{

jaribu (

// unda na uanzishe ORB

ORB orb = ORB.init(args, null);

// pata muktadha wa kumtaja mzizi

org.omg.CORBA. Object objRef =

orb.resolve_initial_references("NameService");

// Tumia NamingContextExt badala ya NamingContext. Hii ni

// sehemu ya Huduma inayoingiliana ya kumtaja.

NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

// suluhisha Rejeleo la Kitu katika Kutaja

Jina la kamba = "Habari";

helloImpl = HelloHelper.narrow(ncRef.resolve_str(jina));

System.out.println("Imepata mpini kwenye kitu cha seva:" + helloImpl);

System.out.println(helloImpl.sayHello());

helloImpl.shutdown();

) kukamata (Isipokuwa e) (

System.out.println("ERROR:" + e);

e.printStackTrace(System.out);

}

}

}

      1. Mkusanyiko Na uzinduzi maombi

MafailiHelloServer. java na HelloClient. java, Habari. idlna foldaHelloApp, imeundwaidkj. mfanolazima ihifadhiwe kwenye folda moja.

Ili kukusanya mteja na seva, unahitaji kuandika kwenye mstari wa amri

javac *.java HelloApp/*.java

javac. mfanoiko katika…\jdk1.5.0\ bin.

JumatanoKupatwa kwa juahairuhusu kukimbiaCORBAmaombi. Kwa kuanzia

1. Anzisha hudumaorbdKitu Ombi Dalali Daemon (…\ jdk1.5.0\ bin\ orbd. mfano) Hii inafanywa ili tuweze kupata kiunga cha huduma ya jina.

kuanza orbdORBInitialPort 1050

Kigezo -ORBInitialPort- nambari ya bandari ambayo seva ya jina itafanya kazi.

2. Uzinduzi seva

seva ya jina.

3. Uzinduzi mteja

Hubainisha lango ambalo seva ya jina inafanya kazi. Parameta - ORBInitialHost inabainisha mwenyeji ambayo inaendeshaseva ya jina.

Kwa urahisi wa mkusanyiko na uzinduzi, unaweza kuundapopofaili:

idlj – kuanguka Hello.idl

javac *.java HelloApp/*.java

anza java HelloServer - ORBInitialPort 1050 - ORBInitialHost localhost

java HelloClient - ORBInitialPort 1050 - ORBInitialHost localhost


6.2 Lugha ya IDL

LughaMungu wangu IDL (Kiolesura Ufafanuzi Lugha- Lugha ya Maelezo ya Kiolesura) ni sintaksia inayojitegemea ya teknolojia ya kuelezea violesura vya vitu. Wakati wa kuelezea usanifu wa programu,Mungu wangu IDLhutumika vyema kama nukuu ya ulimwengu wote kwa kufafanua mipaka ya kitu ambacho huamua tabia yake kuhusiana na vipengele vingine vya mfumo wa habari.Mungu wangu IDLhukuruhusu kuelezea violesura ambavyo vina mbinu na sifa tofauti. Lugha pia inasaidia urithi wa interface, ambayo ni muhimu kwa tumia tena vitu na uwezekano wa upanuzi wao au vipimo.

IDLni lugha ya kujieleza tu, yaani haina utekelezaji wowote.IDLvipimo vinaweza kukusanywa (kuchorwa) katika faili za vichwa na prototypes maalum za seva ambazo zinaweza kutumika moja kwa moja na kipanga programu. Hiyo niIDLnjia fulani zinaweza kuandikwa, na kisha kutekelezwa, katika lugha yoyote ambayo uchoraji wa ramani unapatikanaIDL. Lugha kama hizo ni pamoja naC, C++, SmallTalk, Pascal, Java, Ada.

Kwa kutumiaIDLUnaweza kuelezea sifa za sehemu, na madarasa ya wazazi ambayo hurithi, na isipokuwa ambazo hutupwa, na, hatimaye, mbinu zinazofafanua kiolesura, na maelezo ya vigezo vya pembejeo na pato.

MuundoCORBA IDLfaili inaonekana kama hii:

moduli (

;

;

;

kiolesura [:] (

;

;

;

;

()

.

.

()

.

.

}

kiolesura [:]

.

.

}

Sintaksia ya lughaIDLni nyepesi kabisa na haiwezekani kuielezea katika mwongozo wa kufundishia.

Ili kutekeleza kiolesura seva ya barua inaweza kuongezewaHabari. idl

moduli ya HelloApp

{

muundo wa TMessage

{

kamba Kwa;

kamba Kutoka;

Ujumbe wa kamba;

};

typedef mlolongo TMessages;

interface Habari

{

TMessages GetMessages (katika Jina la kamba, hesabu fupi);

njia moja utupu Tuma (katika kamba Mteja, katika kamba Jina, katika kamba Ujumbe);

kamba sayHello();

kuzima kwa njia moja ();

};

};

typedef mlolongo wa TMessages; tangazo aina yenye nguvu safu ujumbeTMessage.

Alexander Godin

Teknolojia ya CORBA ni kiwango cha kuandika maombi yaliyosambazwa yaliyopendekezwa na muungano wa OMG (Open Management Group). Kwa kuunda vitu vya CORBA, tunaweza, kwa mfano, kupunguza kwa kiasi kikubwa muda unaohitajika kutatua matatizo ambayo yanahitaji kiasi kikubwa cha hesabu. Hili linawezekana kwa kuweka vitu vya CORBA kwenye mashine tofauti. Kila kitu cha mbali hutatua kazi ndogo maalum, na hivyo kumwondolea mteja kazi isiyo ya lazima.

Wacha tuangalie mwingiliano wa vitu katika usanifu wa CORBA

Mtini. 1 Mwingiliano wa vitu katika usanifu wa CORBA

Msingi wa CORBA ni Dalali wa Ombi la Kitu. ORB inasimamia mwingiliano wa vitu katika mazingira ya mtandao iliyosambazwa. IIOP (Itifaki ya Mtandao wa Inter-ORB) ni itifaki maalum ya mwingiliano kati ya ORB.

Kitu maalum kinachoitwa stub hufanya kazi katika nafasi ya anwani ya mteja. Baada ya kupokea ombi kutoka kwa mteja, hupakia vigezo vya ombi katika muundo maalum na kupeleka kwa seva, au tuseme kwa mifupa.

Mifupa ni kitu kinachofanya kazi katika nafasi ya anwani ya seva. Baada ya kupokea ombi kutoka kwa mteja, huifungua na kuituma kwa seva. Mifupa pia hubadilisha majibu ya seva na kuyapitisha kwa mteja (stub).

Ili kuandika programu yoyote ya CORBA kwa kutumia teknolojia ya Java, unahitaji kuwa na vitu viwili - kifurushi cha JDK1.2 kilichosakinishwa na kikusanyaji. idltojava. JDK hutoa seti ya madarasa ya kufanya kazi na vitu vya CORBA, na idltojava ramani ya lugha ya IDL hadi Java.

Kuunda programu ya CORBA katika Java huanza kwa kuandika kiolesura cha kitu cha mbali kwa kutumia Lugha ya Ufafanuzi wa Kiolesura (IDL).

Hebu tuunde faili test.idl testApp ya moduli (jaribio la kiolesura ( hesabu ndefu (katika kamba msg); );

Kiolesura hiki kinaelezea njia moja tu hesabu. Zaidi ya hayo, haijalishi kwetu njia hii inafanya nini, jambo kuu ni kwamba tunaamua kuwa iko, tunaamua ni vigezo gani vya pembejeo na pato vinavyo.

Hebu tumia mkusanyaji idltojava.

Idltojava Hello.idl Kumbuka. Mkusanyaji huyu hutumia kichakataji cha awali cha lugha ya C++ kwa chaguo-msingi, kwa hivyo sio lazima kushughulika na ujumbe wa makosa Amri au jina la faili si sahihi(njia yake lazima ibainishwe katika utofauti wa mazingira wa CPP) zima matumizi yake kwa kuweka bendera. idltojava -fno-cpp Hello.idl Matokeo ya programu hii yanaweza kuwakilishwa kwa namna ya mchoro.

Mtini.2 Uendeshaji wa mkusanyaji wa idltojava
Folda mpya imeonekana kwenye saraka ya sasa testApp, ambayo ina faili tano za java. Kila mmoja wao ana madhumuni yake mwenyewe.

_testImplBase.java - darasa la abstract ambalo sio zaidi ya mifupa ya seva (mifupa) na hutoa utendaji wa seva;

_testStub.java - darasa linalotumia mbegu ya mteja. Hutoa utendaji wa mteja;

test.java - darasa lililo na maelezo ya kiolesura cha majaribio katika Java;

testHelper.java Na testHolder.java - madarasa ambayo hutoa huduma za matumizi kwa vitu vya CORBA.

Sasa kazi yetu ni kuandika darasa linalotumia kiolesura mtihani. Madarasa kama hayo yanapaswa kutajwa ili jina lao liwe na neno "Mtumishi", kwa upande wetu litakuwa testMtumishi.

Class testServant huongeza _testImplBase ( public int count(String msg) ( return msg.length(); ) )

Tafadhali kumbuka kuwa darasa hili limerithiwa kutoka _testImplBase. Kama unaweza kuona, njia ya kuhesabu inatekelezwa hapa, ambayo in katika mfano huu Huhesabu idadi ya barua katika ujumbe uliopokelewa.

Sasa hebu tuendelee kuandika sehemu ya seva ya programu.

Jambo la kwanza tunalofanya ni kuunda ORB. Kisha tunaunda mfano wa darasa la kitu cha mbali (testServant) na kuisajili kwenye ORB. Ifuatayo, tunaita huduma maalum ya jina (NameService) na kujiandikisha jina la kitu cha mbali ndani yake ili mteja apate kuipata (kuna njia nyingine ya kupata kitu cha mbali, lakini zaidi juu yake baadaye).

Hebu tuangalie kwa makini hatua hizi.

  1. Uundaji na uanzishaji wa ORB. Imetolewa kwa kupiga simu njia tuli ndani yake darasa la ORB

    ORB orb = ORB.init();

  2. Kuunda mfano wa darasa la kitu cha mbali na kusajili katika ORB

    testServant testRef = new testServant();

    orb.connect(testRef);

  3. Kupata muktadha wa kumtaja (NamingContext)

    org.omg.CORBA.Object objRef =

    orb.resolve_initial_references("NameService");

    NamingContext ncRef = NamingContextHelper.narrow(objRef);

    katika mstari wa kwanza tunapata rejeleo la kitu kwa huduma ya jina (NameService). Lakini kwa kweli hiki ni kitu cha kawaida cha CORBA na ili kuitumia kama muktadha wa kumtaja (NamingContext), unahitaji kupiga njia hiyo. nyembamba darasa NamingContextHelper, ambayo inaonekana kubainisha kipengee hiki cha CORBA.

  4. Kusajili jina la kitu cha mbali (testServant)

    Kama ilivyoelezwa hapo awali, usajili wa jina unafanywa ili mteja apate kitu cha mbali. Kusudi hili linahudumiwa na kazi rebind(NameComponent nc, Object obj) kiolesura NamnaMuktadha.

    NameComponent nc = new NameComponent("test", ""); // parameta ya kwanza // inaonyesha jina la kitu, // si lazima kutumia njia ya pili ya NameComponent = (nc); ncRef.rebind(njia, testRef);

  5. Inasubiri maombi kutoka kwa mteja. java.lang.Object Sync = new java.lang.Object(); iliyosawazishwa (usawazishaji) ( sync.wait(); )

    Baada ya seva kusindika ombi kutoka kwa mteja na kutekeleza njia hesabu itaingia katika hali ya kusubiri tena.

Seva sasa iko tayari kutumika

Kuorodhesha 1. testServer.java

Ingiza testApp.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; agiza org.omg.CORBA.*; agiza java.lang.*; class testServant huongeza _testImplBase ( public int count(String msg) ( return msg.length(); ) ) testServer ya darasa la umma ( public void main(String args) ( jaribu ( ORB orb = ORB.init(args, null); testServant testRef = new testServant(); orb.connect(testRef); org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContext ncRef = NamingContextHelper.narrow(objRef); NameComponent nc("NewTestService) ", ""); NameComponent path = (nc); ncRef.rebind(path, testRef); java.lang.Object sync = new java.lang.Object(); iliyosawazishwa (sync) ( sync.wait() ) ) catch (Isipokuwa e) ( System.err.println("ERROR: " + e); e.printStackTrace(System.out); ) ) )

Tafadhali kumbuka kuwa shughuli zote zinazofanywa kwenye vipengee vya CORBA zimo kwenye kizuizi cha kujaribu kukamata.

Wacha tuendelee kuandika nambari ya mteja.

Hatua za msingi za kuandika maombi ya mteja

  1. Uundaji na Uanzishaji wa ORB
  2. Kupata muktadha wa huduma ya jina ( NamnaMuktadha)
  3. Kutafuta kitu cha mbali
  4. Njia ya Kuita hesabu.

Kama unaweza kuona, vidokezo viwili vya kwanza vinaambatana na hatua za kuunda programu ya seva, kwa hivyo hatutazingatia.

Hoja ya tatu pia ni rahisi sana kutekeleza. Kitu kinaundwa JinaComponent. Njia hiyo inaitwa kutatua (njia ya Kipengele cha Jina), ambayo hutafuta kitu cha mbali (kitu cha kawaida cha CORBA) kwa jina. Kwa kutumia mbinu nyembamba(org.omg.CORBA.Object obj) darasa testMsaidizi(iliyotengenezwa idltojava compiler) tunapata rejeleo la kitu kwenye kiolesura mtihani.

NameComponent nc = new NameComponent("test", ""); Njia ya Kipengele cha Jina = (nc); org.omg.CORBA.Object obj= ncRef.resolve(njia); test testRef = testHelper.narrow(obj);

Sasa unaweza kupiga simu njia hesabu

String msg = "jaribu kuhesabu"; int count = testRef.count(msg);

Kuorodhesha 2. testClient.java

Ingiza testApp.*; import org.omg.CosNaming.*; agiza org.omg.CORBA.*; agiza java.lang.*; public class testClient ( public static void main(String args) ( jaribu ( ORB orb = ORB.init(args, null); org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContext ncRef = NamingContextHelper. nyembamba(objRef); NameComponent nc = new NameComponent("test", ""); NameComponent path = (nc); test testRef = testHelper.narrow(ncRef.resolve(njia)); String msg = "jaribu kuhesabu"; int count = testRef.count(msg); System.out.println("idadi ya herufi katika ujumbe ni:" + count); ) catch (Isipokuwa e) ( System.out.println("ERROR: " + e) ​​​; e.printStackTrace(System.out); ) ))

Kuzindua maombi

  1. Kuanzisha seva ya jina (iliyojumuishwa na JDK1.2). Hii inafanywa ili tuweze kupata kiunga cha huduma ya jina la tnameserv

    kwa chaguo-msingi seva huanza kwenye mlango wa 900. Thamani hii inaweza kubadilishwa kwa kubainisha kigezo cha uzinduzi -ORBInitialPort, kwa mfano.

    Tnameserv -ORBInitialPort 1024

  2. Kuanzisha seva testServer java testServer -ORBInitialPort 1024 // inaonyesha bandari // ambayo seva ya jina hufanya kazi
  3. Kuzindua mteja testClient java testClient -ORBInitialHost javas.stu.neva.ru -ORBInitialPort 1024

    parameta ya -ORBInitialHost inabainisha seva pangishi ambayo inaendesha testServer

baada ya kutekeleza programu hii, koni itaonyeshwa

Idadi ya herufi katika ujumbe ni:12

Kuunganisha kwa seva bila kutumia huduma ya jina

Wazo la msingi la njia hii ni kwamba seva huhifadhi mfano wa darasa la kitu cha mbali ( testMtumishi) kama faili ya maandishi popote, kupatikana kwa mteja. Mteja hupakia data kutoka kwa faili (kwenye kitu Kamba) na hubadilisha kwa kutumia njia maalum kuwa kumbukumbu ya kitu kwa kitu cha mbali.

Yote hii inatekelezwa kama ifuatavyo

Wacha tuondoe sehemu fulani ya nambari - hii inatumika pia kwa mteja ( testServer.java Na testClient.java)

  1. Hebu tuondoe org.omg.CosNaming.* kutoka kwa maktaba ya kuleta. org.omg.CosNaming.NamingContextPackage.*;
  2. Wacha tufute nambari inayolingana na hatua ya 3-kipengee cha 4
Badala ya msimbo wa mbali, tutaingiza - kwa seva: // kubadilisha kitu kwa kamba Kamba ior = orb.object_to_string(testRef); Jina la faili la kamba = System.getProperty("user.home") + System.getProperty("file.separator")+"test_file"; //tengeneza faili test_file Fos ya FileOutputStream = FileOutputStream mpya(jina la faili); PrintStream ps = PrintStream(fos) mpya; // andika data kwake ps.print(ior); ps.funga();

kwa mteja:

Jina la faili la kamba = System.getProperty("user.home") + System.getProperty("file.separator")+"test_file"; // fungua faili FileInputStream fis = new FileInputStream(jina la faili); DataInputStream dis = DataInputStream mpya(fis); //soma data Kamba ior = dis.readLine(); //geuza kuwa kitu cha CORBA org.omg.CORBA.Object obj = orb.string_to_object(ior); // pata marejeleo ya jaribio la kifaa cha mbaliRef = testHelper.narrow(obj);

Wacha tukusanye programu, tuzindua seva na mteja kwa njia ile ile kama tulivyofanya hapo awali (katika kesi hii hakuna haja ya kuanza seva ya jina).