Jifahamishe na nyenzo za kinadharia zilizowasilishwa katika viambatisho vya miongozo hii na programu za sampuli. Soma maandishi ya kazi kazi ya maabara, pendekeza uwekaji wa sehemu na utendaji ili kukidhi mahitaji ya mgawo wa maabara, na uandike mpango.
2. Kazi ya maabara
Kuendeleza mteja wa barua na seva. Mteja - programu ya dirisha, ambayo itakuruhusu kutuma na kupokea ujumbe kutoka kwa seva. Utambulisho wa wateja kwenye seva, itifaki ya uhamishaji ujumbe iko kwa hiari ya wanafunzi.
Seva inaweza kuwa programu ya console. Unaweza kuhifadhi ujumbe katika faili ya maandishi. Inashauriwa kufanya seva iwe na nyuzi nyingi.
Ili kuingiliana kati ya mteja na seva, tumia teknolojia ya CORBA.
Kama nyongeza, inapendekezwa kutekeleza seva au mteja sio kwenye Java.
3. Yaliyomo kwenye ripoti
Ripoti lazima iwe na:
1. Taarifa ya tatizo kutatuliwa na mpango kazi vizuri.
2. Mwongozo wa mtumiaji wa programu iliyotatuliwa, iliyo na maelezo ya miingiliano ya kazi zote za programu.
3. Kuorodhesha programu na maoni muhimu.
4. Maswali ya kudhibiti
1. CORBA ni nini?
2. IDL ni nini? Ni ya nini?
3. Je, mteja na seva huingiliana vipi katika CORBA?
4. Data huhamishwaje kati yao?
5. Seva ya jina ni ya nini?
6. Je, unawezaje kuanzisha seva ya CORBA?
5. Fasihi
1. Ken Arnold, James Gosling, David Holmes. Lugha ya programu ya Java™.
2. Tovuti rasmi ya Java - http://java.sun.com/ (kuna sehemu katika Kirusi yenye kitabu cha maandishi).
3. Java™ 2 SDK, Toleo la Kawaida Hati - http://java.sun.com/products/jdk/1.5/index.html.
4. James Gosling, Bill Joy, Guy Steele. Vipimo Lugha ya Java(Ainisho ya Lugha ya Java - http://www.javasoft.com/docs/books/jls/). Tafsiri kwa Kirusi - http://www.uni-vologda.ac.ru/java/jls/index.html
5. Tovuti rasmi ya mradi wa Eclipse ni http://www.eclipse.org/.
6. Kiambatisho cha 1. CORBA
Teknolojia ya CORBA( Usanifu wa Dalali wa Ombi la Kawaida) ni kiwango cha uandishi maombi yaliyosambazwa, iliyopendekezwa 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 kuwasha vitu vya CORBA magari 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).
Kuandika programu yoyote ya CORBA kwa kutumia Teknolojia ya Java, unahitaji kuwa na mambo mawili - hii kifurushi kilichowekwa JDK1.5 na mkusanyaji wa idlj (...\jdk1.5.0\bin\idlj.exe). 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
6.1.1 Kuandika kiolesura
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 ya hello.idl
Module HelloApp(interface Hello(string sayHello(); utupu wa njia moja (););
Kiolesura hiki kinaelezea njia mbili tu, kuzima na semaHujambo. Zaidi ya hayo, haijalishi kwetu njia hizi zinafanya nini, jambo kuu ni kwamba tunaamua kuwa zipo na kuamua ni vigezo gani vya pembejeo na pato wanazo.
idlj – kuanguka Hello.idl
Imeonekana kwenye saraka ya sasa folder mpya Habari Programu, ambayo ina faili sita za java. Kila mmoja wao ana madhumuni yake mwenyewe.
· HelloPOA.java java ni darasa la dhahania ambalo si chochote zaidi ya kiunzi cha seva (mifupa) na hutoa utendaji wa seva.
· _HelloStub.java - darasa linalotumia mbegu za mteja. Hutoa utendaji wa mteja.
HelloHelper.java na HelloHolder.java ni madarasa ambayo hutoa kazi za sekondari kwa vitu vya CORBA.
· HelloOperations.java – darasa lililo na maelezo ya kiolesura cha hujambo katika Java.
· Hello.java – darasa ambalo ni mrithi wa HelloOperations, linalosaidia kiolesura cha org.omg.CORBA. Kitu.
6.1.2 Kuunda seva
Sasa kazi yetu ni kuandika darasa linalotumia kiolesura habari. Kwa upande wetu itakuwa HabariImpl. Tafadhali kumbuka kuwa ni mrithi wa darasa HabariPOA. KATIKA HabariImpl mbinu zilizotangazwa ndani Habari . idl .
Ili kurahisisha kazi, tamko la mbinu linaweza kuchukuliwa kutoka kwa faili HelloOperesheni . java , imetengenezwa jdlj .
Class HelloImpl huongeza HelloPOA (ya faragha ORB orb; public void setORB (ORB orb_val) (orb = orb_val;) // tekeleza sayHello() methodpublic String sayHello() (rudi "\nHujambo ulimwengu!!\n";) // tekeleza shutdown() methodpublic utupu shutdown() (orb .zima (sivyo);))
Hatua inayofuata ni kuunda upande halisi wa seva ya programu. Hili litakuwa darasa la HelloServer.
Itakuwa na njia moja tu - kazi kuu ya kawaida.
Jambo la kwanza tunalofanya ni kuunda ORB. Kisha tunaunda mfano wa darasa la kitu cha mbali (HelloImpl) na kusajili kwenye ORB. Ifuatayo tunaita huduma maalum majina (NameService) na uandikishe jina la kitu cha mbali ndani yake ili mteja aweze kuipata.
Hebu tuangalie kwa makini hatua hizi.
1. Uundaji na uanzishaji wa ORB. Imetolewa kwa kupiga simu mbinu tuli ndani yake darasa la ORB
2. Kuunda mfano wa darasa la kitu cha mbali na kusajili katika ORB
helloImpl.setORB(orb);
3. Kupata muktadha wa kumtaja (NamingContext)
org.omg.CORBA. Object objRef = orb.resolve_initial_references("NameService");
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 (HelloImpl)
Jina la kamba = "Habari";
ncRef.rebind(njia, href);
Jina limesajiliwa ili mteja apate kitu cha mbali. Chaguo za kubandika tena (NameComponent nc, Object obj) za kiolesura cha NamingContext hutekeleza kusudi hili.
5. Kusubiri maombi kutoka kwa mteja
Seva sasa iko tayari kutumika.
// HelloServer.javaiimport HelloApp.*;agiza org.omg. CosNaming.*;import org.omg. CosNaming. NamingContextPackage.*;import org.omg.CORBA.*;import org.omg. PortableServer.*;leta org.omg. PortableServer.POA;leta java.util. Properties;class HelloImpl huongeza HelloPOA (private ORB orb;public void setORB (ORB orb_val) (orb = orb_val;) // tekeleza sayHello() methodpublic String sayHello() (rudi "\nHujambo ulimwengu!!\n";) // tekeleza shutdown() methodpublic void shutdown() (orb.shutdown(false);))
darasa la umma HelloServer (
utupu tuli wa umma (String args) (
// unda na uanzishe ORB
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);
// pata muktadha wa kumtaja mzizi
// NameService inaomba huduma ya jina
org.omg.CORBA. Object objRef =
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
kukamata (Isipokuwa e) (
System.err.println("ERROR:" + e);
e.printStackTrace(System.out);
System.out.println("HelloServer Inatoka...");
6.1.3 Kuunda mteja
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 kumtaja (NamingContext)
3. Kutafuta kitu cha mbali
4. Kupiga simu kwa njia ya sayHello.
5. Kuita 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. Kipengee cha NameComponent kimeundwa. Njia ya kutatua(NameComponent) inaitwa, ambayo hupata kitu cha mbali (kitu cha kawaida cha CORBA) kwa jina. Kwa kutumia mbinu nyembamba (org.omg.CORBA. Object obj) ya darasa la helloHelper (iliyotolewa na mkusanyaji wa idlj), tunapata marejeleo ya kitu kwenye kiolesura cha hujambo.
Jina la kamba = "Habari";
helloImpl = HelloHelper.narrow(ncRef.resolve_str(jina));
Ninajua kuwa CORBA hukuruhusu kutekeleza vitu vingi kwenye lugha mbalimbali 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: Node A huanza Programu ya Java J1, na nodi 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 mbinu zinazotolewa na ORB kuita seva kwa mbali na kujibu, 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.
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.
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?
Fasihi
Ken Arnold, James Gosling, David Holmes.Lugha ya programu ya Java™.
Tovuti rasmiJava – http:// java. jua. com/ (kuna sehemu katika Kirusi na kitabu cha maandishi).
Java™ 2 SDK, Hati za Toleo la Kawaida - 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 jua – http:// www. kupatwa kwa jua. org/.
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
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 njia hizi zinafanya nini, 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.
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 ya jina maalum (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...");
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 rejeleo la 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);
}
}
}
Mkusanyiko Na uzinduzi maombi
MafailiHelloServer. java na HelloClient. java, Habari. idlna foldaHelloApp, imeundwaidkj. mfanolazima ihifadhiwe kwenye folda moja.
Kukusanya mteja na seva unahitaji mstari wa amri piga
javac *.java HelloApp/*.java
javac. mfanoiko katika…\jdk1.5.0\ bin.
JumatanoKupatwa kwa juahairuhusu kukimbiaCORBAmaombi. Kwa kuanzia
1. Anzisha hudumaorbd – Kitu Ombi Dalali Daemon (…\ jdk1.5.0\ bin\ orbd. mfano) Hii inafanywa ili tuweze kupata kiunga cha huduma ya jina.
kuanza orbd – ORBInitialPort 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 isiyotegemea 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 cha seva ya barua, unaweza kuongezaHabari. 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.
CORBA ( Usanifu wa Dalali wa Ombi la Kawaida)- 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
KATIKA sehemu hii imepewa mapitio mafupi 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.
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.
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.
- Uundaji na uanzishaji wa ORB. Imetolewa kwa kupiga simu njia tuli ndani yake darasa la ORB
ORB orb = ORB.init();
- Kuunda mfano wa darasa la kitu cha mbali na kusajili katika ORB
testServant testRef = new testServant();
orb.connect(testRef);
- 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.
- 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);
- 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 ziko kwenye kizuizi cha kujaribu kukamata.
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
- 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(iliyotolewa 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
- 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
- Kuanzisha seva testServer java testServer -ORBInitialPort 1024 // inaonyesha bandari // ambayo seva ya jina hufanya kazi
- 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)
- Hebu tuondoe org.omg.CosNaming.* kutoka kwa maktaba ya kuleta. org.omg.CosNaming.NamingContextPackage.*;
- Wacha tufute nambari inayolingana na hatua ya 3-kipengee cha 4
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 (endesha seva ya jina ndani kwa kesi hii Hakuna haja).