Práca s triedou %Installer

cache.jpg V tom­to po­kra­čo­va­ní se­riá­lu vám uká­že­me po­uži­tie eš­te stá­le po­mer­ne čer­stvej no­vin­ky, ur­če­nej na po­uží­va­teľ­skú úp­ra­vu in­šta­lá­cie Cac­hé. S príc­ho­dom ver­zie 2009.1 sa sú­čas­ťou Cac­hé stal ba­lík % In­staller, kto­rej hlav­nou úlo­hou je po­skyt­núť kom­for­tné API na tvor­bu up­ra­ve­ných in­šta­lač­ných skrip­tov Cac­hé. Mno­hí z vás si in­šta­lá­ciu Cac­hé up­ra­vu­je­te tak, aby ok­rem server­a in­šta­lo­va­la aj ap­li­kač­ný kód a pred­kon­fi­gu­ro­va­la run­ti­me pros­tre­die ap­li­ká­cie. Z vlas­tnej skú­se­nos­ti vie­te, že mož­nos­ti Cac­hé v tej­to ob­las­ti ne­bo­li kto­vieaké. To sa te­raz po­dstat­ne me­ní. Ako ba­lík % In­staller fun­gu­je? Zá­klad­nou trie­dou na prá­cu je % In­staller.In­staller. Tá­to trie­da po­sky­tu­je roz­hra­nie pre va­šu vlas­tnú in­šta­lač­nú trie­du, kto­rú vy­tvo­rí­te tak, že ne­bu­de de­diť od žiad­ne­ho pred­ka. Va­ša trie­da však mu­sí ob­sa­ho­vať ľu­bo­voľ­ne naz­va­ný ele­ment XDa­ta, kto­rý mu­sí mať dek­la­ro­va­ný [XML­Na­mes­pa­ce = IN­STALLER]. Tým kom­pi­lá­tor spoz­ná, že ide o in­šta­lač­nú trie­du, a vy­ge­ne­ru­je správ­ny kód na pri­po­je­nie a spus­te­nie pri in­šta­lá­cii Cac­hé. Na správ­nu kom­pi­lá­ciu nes­mie­te za­bud­núť pri­dať do dek­la­rá­cie trie­dy di­rek­tí­vu im­port % oc­cIn­clu­de. Čo všet­ko sa dá v kon­taj­ne­ri XDa­ta de­fi­no­vať? Na­mes­pa­ce IN­STALLER ob­sa­hu­je pr­vky , , , a mno­hé ďal­šie. Tie­to pr­vky de­fi­nu­jú kon­fi­gu­rá­ciu in­šta­lá­cie. Eš­te sa im bu­de­me ve­no­vať nes­kôr. Ok­rem kon­fi­gu­rač­ných pr­vkov exis­tu­jú aj pr­vky a , kto­ré umož­ňu­jú de­fi­no­vať me­tó­dy, kto­ré sa ma­jú vy­ko­nať v prie­be­hu in­šta­lá­cie. Ok­rem kon­taj­ne­ra XDa­ta mu­sí­te v in­šta­lač­nej trie­de dek­la­ro­vať a im­ple­men­to­vať me­tó­du se­tup (). Po­ďme sa te­raz po­zrieť na jed­not­li­vé pr­vky a me­tó­du se­tup () bliž­šie.

Preh­ľad vy­bra­ných ele­men­tov kon­taj­ne­ra XDa­ta:

Ele­ment Opis
Ma­ni­fest Ko­re­ňo­vý pr­vok XML stro­mu
Na­mes­pa­ce Po­vin­ný - po­to­mok pr­vku Ma­ni­fest, ob­sa­hu­je de­fi­ní­ciu no­vo vy­tvá­ra­né­ho/mo­di­fi­ko­va­né­ho náz­vo­vé­ho pries­to­ru. Má at­ri­bú­ty Crea­te, Co­de (da­ta­set s ru­ti­na­mi) a Da­ta (da­ta­set s glo­bál­mi).
Con­fi­gu­ra­tion Po­vin­ný - po­to­mok pr­vku Na­mes­pa­ce, sku­pi­no­vý pr­vok.
Da­ta­ba­se Po­vin­ný - po­to­mok pr­vku Con­fi­gu­ra­tion, ob­sa­hu­je in­for­má­ciu o vy­tvá­ra­nom/mo­di­fi­ko­va­nom da­ta­se­te. Má ok­rem iné­ho tie­to at­ri­bú­ty: Dir, Crea­te, Re­sour­ce, Bloc­ksi­ze, Colla­tion, Ini­tial­Si­ze a iné.
Var Vo­li­teľ­ný pr­vok - po­to­mok pr­vku Ma­ni­fest, de­fi­nu­je pre­men­né po­uži­teľ­né v rôz­nych čas­tiach do­ku­men­tu XML.
Im­port Vo­li­teľ­ný - po­to­mok pr­vku Na­mes­pa­ce, de­fi­nu­je sú­bor s glo­bál­mi, ru­ti­na­mi či trie­da­mi, kto­rý sa má na­čí­tať.
In­vo­ke Vo­li­teľ­ný - po­to­mok pr­vku Na­mes­pa­ce, de­fi­nu­je me­tó­du trie­dy, kto­rá sa má vy­ko­nať po im­por­te ru­tín, glo­bá­lov či tried.

Na to, aby sa spus­til vy­ge­ne­ro­va­ný kód opí­sa­ný v kon­taj­ne­ri XDa­ta, mu­sí­me de­fi­no­vať už spo­mí­na­nú me­tó­du se­tup (). Jej im­ple­men­tá­cia mu­sí vy­ze­rať tak­to:

Clas­sMet­hod se­tup(By­Ref pVars, pLog­Le­vel As %In­te­ger, pIn­staller As %In­staller.In­staller) As %Sta­tus [ Co­de­Mo­de = ob­jec­tge­ne­ra­tor, Inter­nal ]
   {
    #; Let XGL do­cu­ment ge­ne­ra­te co­de for this met­hod. 
    Quit ##class(%In­staller.Ma­ni­fest).%Ge­ne­ra­te(%com­pi­led­class,%co­de, na­zevXDa­ta­Kon­tej­ne­ru)
   }

Jed­no­duc­há in­šta­lač­ná trie­da vy­uží­va­jú­ca opí­sa­ný pr­vok mô­že vy­ze­rať nap­rík­lad tak­to (krá­te­né):

□XDa­ta IN­STALL   [ XML­Na­mes­pa­ce = IN­STALLER ]
{
   □<Ma­ni­fest>
	<!-- VA­RIAB­LES -- >
	<Var Na­me=”SOUR­CE PATH” Va­lue=”c:\ku­tac\in­stall\ca­he2010\“ />
	<Var Na­me=”FI­LE LO­CA­LE”   Va­lue=”loc_ycsw.xml”   />
	<Var Na­me=”FI­LE LOA­DER”  Va­lue=”ku­tac.loa­der.rsa“ />
	<Var Na­me=”NEW_NS”  Va­lue=”KU­TAC” />
	<Var Na­me=”SYS_NS”   Va­lue=”%SYS  />
	<Var Na­me=”SET_SU­PE­RU­SER”  Va­lue=”1” />
	<Var Na­me=”SET_UN­KNOWN_USER”  Va­lue=”1” />
	<Var Na­me=”SET_UP­GRA­DE_ALL”  Va­lue=”1” />
	<Var Na­me=”IS_UP­GRA­DE”  Va­lue=´#{##class(%SYS.Na­mes­pa­ce) .Exists(”${NEW_NS}”)}´ />

 <!-- no­va in­sta­la­ce -->
□<If Con­di­tion=”${IS_UP­GRA­DE}=0”>
	<Log To­pic=”KU­TAC.De­mo” Text=”Pro­va­dim cis­tou in­sta­la­ci” Le­vel=”1” />
	<! –- ap­li­kac­ni na­mes­pa­ce -->
  □	<Na­mes­pa­ce Na­me=”${NEW_NS} Crea­te=”yes” Co­de=”${NEW_NS}”  Da­ta=”${NEW_NS}”  En­semb­le=”0”  >
□	<Con­fi­gu­ra­tion>
		<Da­ta­ba­se na­me=”${NEW_NS}”  Crea­te=”yes” Dir=”${MGR­DIR}${NEW_NS}” Pub­lic­Per­mis­sions=”” Re­sour­ce=”%DB_${NEW_NS}” />
		<Var Na­me=”URL”  Va­lue=´/csp/#{$ZCVT(“${NEW_NS}”,”L” )}´/ >
		<Var Na­me=”DIR”  Dir=´${CSPDIR}#{$ZCVT(”${NEW_NS}”,”L” )}´/ >
 □	<CSPAp­pli­ca­tion Url=´${URL}´ Di­rec­to­ry=´${DIR}´
	Re­sour­ce=””  Des­crip­tion=”${NEW_NS} CSP Inter­fa­ce” Re­cur­se=”true”
			Coo­kie­Path=´${URL}´Aut­hen­ti­ca­tion­Met­hods=”32 ” />
	<Con­fi­gu­ra­tion>
	</Na­mes­pa­ce>
  □	<Na­mes­pa­ce Na­me=”${NEW_NS} Crea­te=”no” En­semb­le=”0”  >
<! –- Nas­ta­ve­ní da­ta­bá­ze CAC­HE­LIB -->
		□<If Con­di­tion=”${SET_CAC­HE­LIB$”>
		  <Log To­pic=”KU­TAC.De­mo” Text=”Ku­tac.In­staller.Set­CAC­HE­LIB (0)” Le­vel=”0” />
	   □<In­vo­ke Class=”Ku­tac.De­mo” Met­hod=”Set­CAC­HE­LIB” Chec­kSta­tus=”true” >
		     <Arg Va­lue=”0”/>
		</In­vo­ke>
		</If>
<! –- Nas­ta­ve­ní lo­ka­lu -->
	□<If Con­di­tion=”${SET_LO­CA­LE}”>
		<Log To­pic=”KU­TAC.De­mo” Text=”Ku­tac.In­staller.Set­Lo­ca­le (${SOUR­CE_PATH}$ {FI­LE_LO­CA­LE})” Le­vel=”0” />
	   □<In­vo­ke Class=”Ku­tac.De­mo” Met­hod=”Set­lO­CA­LE” Chec­kSta­tus=”true” >
		     <Arg Va­lue=”${SOUR­CE_PATH}$ {FI­LE_LO­CA­LE}” />
		</In­vo­ke>

V praxi pri tvor­be zlo­ži­tej­ších in­šta­lač­ných schém naj­skôr zis­tí­te, že ho­ci znač­ky XML vám dá­va­jú po­mer­ne veľ­kú voľ­nosť, aj tak pre niek­to­ré úlo­hy nes­ta­čia (napr. de­fi­no­va­nie po­uží­va­teľ­ských úč­tov a ro­lí, nas­ta­ve­nie NLS), tak­že asi čas­to vy­uži­je­te pr­vky a < In­vo­ke>.

Tes­to­va­nie a la­de­nie ob­sa­hu trie­dy: Je sa­moz­rej­mé, že trie­da s ta­ký­mi­to zá­sad­ný­mi schop­nos­ťa­mi mu­sí mať mož­nosť byť pred na­sa­de­ním otes­to­va­ná. Na tes­to­va­nie mô­že­te po­užiť prí­ka­zo­vý ria­dok Cac­hé, z kto­ré­ho spus­tí­te me­tó­du se­tup () buď bez od­ov­zda­ných vstup­ných pa­ra­met­rov, ale­bo s ni­mi. Ho­ci tak­to:

%SYS> Set vars(Sour­ce­Dir)="c:\ku­tac\in­staller\cac­he2009"
%SYS> Set vars(Up­da­ted)="Yes"
%SYS> Do ##class(KU­TAC.De­mo).se­tup(.vars,3)

Na to, aby in­šta­lač­ný skript Cac­hé (na ľu­bo­voľ­nom ope­rač­nom sys­té­me) za­vo­lal váš in­šta­lá­tor, mu­sí­te trie­du expor­to­vať zo Stu­dia do sú­bo­ru s náz­vom De­faul­tIn­stallerClass.xml v in­šta­lač­nom ad­re­sá­ri Cac­hé. Ak chce­te pri in­šta­lá­cii po­užiť al­ter­na­tív­ny ná­zov sú­bo­ru s in­šta­lač­nou trie­dou ale­bo od­ov­zdať pa­ra­met­re zís­ka­né z ope­rač­né­ho sys­té­mu pri prá­ve vy­ko­ná­va­nej in­šta­lá­cii, mu­sí­te in­šta­lá­ciu Cac­hé vy­ko­nať z prí­ka­zo­vé­ho riad­ka, a nie dvoj­kli­kom na iko­nu in­šta­lač­né­ho sú­bo­ru (iba Win­dows).

Tu je al­ter­na­tív­na in­šta­lá­cia pod Win­dows:

se­tup_cac­he.exe IN­STALLER­MA­NI­FEST="c:\ku­tac\in­staller\MyIn­staller.xml" IN­STALLER­MA­NI­FES­TPA­RAMS="Sour­ce­Dir=c:\my­sour­ce­dir,Up­da­ted=Yes" 
A zde pro Unix/Li­nux:
ISC_IN­STALLER_MA­NI­FEST=c:\MyS­tuff\MyIn­staller.xml
ISC_IN­STALLER_PA­RA­ME­TERS=Sour­ce­Dir=c:\my­sour­ce­dir,Up­da­ted=Yes
cin­stall

Ako vi­dí­te, unixové sys­té­my vy­uží­va­jú pre­men­né pros­tre­dia mies­to ar­gu­men­tov prí­ka­zu cin­stall. Ten­to prís­pe­vok je vzhľa­dom na roz­siah­losť té­my len veľ­mi struč­ný vý­rez a ne­zahŕňa zďa­le­ka všet­ky ele­men­ty a mož­nos­ti in­šta­lá­to­ra. Je­ho cie­ľom je uviesť či­ta­te­ľa do té­my a naz­na­čiť, ka­diaľ sa mož­no ube­rať pri zos­ta­vo­va­ní vlas­tnej in­šta­lač­nej trie­dy. Ak in­šta­lu­je­te na Win­dows, mô­že­te eš­te sa­mi po­kra­čo­vať tým, že po­mo­cou nás­tro­jov ty­pu In­stallShield ale­bo Or­ca si sa­mi up­ra­ví­te po­uží­va­teľ­ské roz­hra­nie in­šta­lá­to­ra Cac­hé, nap­rík­lad mô­že­te vy­brať niek­to­ré di­aló­gy a nah­ra­diť ich vý­cho­dis­ko­vý­mi hod­no­ta­mi či, nao­pak, pri­dať vlas­tné di­aló­gy a in­šta­lá­tor úpl­ne up­ra­viť na svoj ob­raz. To­to však znač­ne pre­sa­hu­je roz­sah člán­ku a prí­pad­né po­ku­sy nec­hám úpl­ne na vás.

V nas­le­du­jú­cej čas­ti sa bu­de­me ve­no­vať dy­na­mic­ké­mu od­ba­ve­niu vlas­tnos­tí a me­tód tried.

Ďal­šie čas­ti >>

Zdroj: Infoware 4/2011



Ohodnoťte článok:
   
 

24 hodín

týždeň

mesiac

Najnovšie články

No­vá im­ple­men­tá­cia dy­na­mic­ké­ho SQL
Kedysi dávno sme sa venovali tvorbe dopytov s použitím ručne písaného kódu bez jazyka SQL. V tejto časti si, naopak, ukážeme, akým spôsobom sa v Caché vyvíjali dopyty, a oboznámime sa s najnovšou implementáciou dynamických dopytov SQL. čítať »
 
Dy­na­mic­ké od­ba­ve­nie vlas­tnos­tí a me­tód tried
V tejto časti nášho seriálu sa oboznámime s veľmi užitočnou schopnosťou tried Caché, ktorá je k dispozícii už dlhší čas, ale až v posledných verziách sa dostáva viac do popredia čítať »
 
Prá­ca s trie­dou %In­staller
V tomto pokračovaní seriálu vám ukážeme použitie ešte stále pomerne čerstvej novinky, určenej na používateľskú úpravu inštalácie Caché. čítať »
 
Vy­uži­tie po­uží­va­teľ­skej pro­jek­cie na Unit Tes­ting
V predchádzajúcej časti sme sa oboznámili s balíčkom % UnitTesting a ukázali sme na praktickom príklade, ako s ním pracovať. Asi vám v priebehu čítania napadlo, či by nebolo možné tvorbu testovacích tried nejako automatizovať. čítať »
 
Tes­to­va­nie kó­du po­mo­cou Unit Tes­ting nás­tro­ja Cac­hé
Koľkí z nás vývojárov môžu na otázku, či testujú svoj kód, odpovedať úprimne: áno? čítať »
 
Try – catch ošet­re­nie chýb a pre­po­je­nie do sys­té­mo­vé­ho pro­to­ko­lu chýb
Na početné otázky priaznivcov programovania s vysokovýkonnou objektovou databázou InterSystems Caché vám prinášame niekoľko aktuálnych tipov a trikov. čítať »
 
 
 
  Zdieľaj cez Facebook Zdieľaj cez Google+ Zdieľaj cez Twitter Zdieľaj cez LinkedIn Správy z RSS Správy na smartfóne Správy cez newsletter