Programavimas

Lengvai kurkite konfigūruojamas programinės įrangos programas

Lengvai konfigūruojamos programinės įrangos kūrimas yra nepaprastai svarbus šiandieninėje verslo aplinkoje. Programinės įrangos programos nebėra vertinamos vien pagal verslo logikos kiekį, kurį jos apima; jie taip pat vertinami pagal tai, kaip lengva juos prižiūrėti. Gebėjimas pakeisti programinės įrangos veikimą konfigūruojant yra svarbus šio priežiūros ciklo aspektas.

Nors „Java“ kalba teikia daugybę funkcijų, tokių kaip nuosavybės failai ir išteklių paketai, kad būtų lengviau konfigūruoti, joms trūksta funkcijų, reikalingų šiandieninei dinamiškai verslo aplinkai. Daugelyje „Java“ standartų, įrankių ir talpyklų jau naudojami pažangesni ir pritaikyti XML konfigūracijos formatai.

„Obix Framework“ yra atviro kodo sistema, teikianti bendras priemones ir formatus, kaip konfigūracijos duomenis saugoti XML ir pasiekti šiuos duomenis naudojant paprastus „Java“ objektus. Tai leidžia moduliuoti konfigūracijos duomenis leidžiant konfigūracijos failus importuoti ir įtraukti vienas į kitą ir konfigūracijos informaciją sutvarkyti į „modulius“.

Be to, jis palaiko „karštuosius“ konfigūracijos pakeitimus - automatiškai aptinkant ir automatiškai įkeliant konfigūracijos duomenų pakeitimus, taip pat palaiko „Java Naming and Directory Interface API“ (JNDI). Be to, jį galima įvairiais būdais integruoti į „Java“ programas, įskaitant „Java Management Extensions“ (JMX) ir „Java Platform“, „Enterprise Edition“ klausytojus, kuriems nereikia kodavimo, taip pat paprastas „Java“ klases, kurias galima tiesiogiai iškviesti. Galiausiai, sistema suteikia lengvai naudojamą papildinio API, leidžiančią kūrėjams ją išplėsti, kad atliktų su inicializavimu susijusias užduotis. Šią API „Obix“ komanda naudojo teikdama inicializavimo įrankius kitoms atvirojo kodo sistemoms, tokioms kaip „Apache“ log4j, Hibernate ir Commons DBCP (duomenų bazių jungčių telkiniai).

Šioje pamokoje aprašau hipotetinį scenarijų, kuriam reikalinga konfigūruojama programinė įranga ir kuriam mes sukuriame griaučių programas naudodami „Obix“. Pirmasis pavyzdys yra pats artimesnis „Hello World“ stiliaus koncepcijos įrodymui, o antrasis ir trečiasis išplėtė šią programą, kad parodytų mažiau nereikšmingus konfigūracijos aspektus.

Atkreipkite dėmesį, kad visi šio straipsnio kodų pavyzdžiai yra supakuoti kaip archyvas, kurį galima atsisiųsti naudojant nuorodą, pateiktą šaltiniuose.

Probleminis scenarijus

Vertinant finansinį turtą, pvz., Atsargas ar pasirinkimo sandorius, kartais reikia tūkstančius kartų imituoti turto kainą ir imti šių verčių vidurkį - manant, kad vidurkis geriausiai atspėja „tikrąją“ turto būsimą vertę. Tokiems modeliavimams paprastai reikia statistinių duomenų apie dabartinę turto (-ų) kainą, vidutinę kainą per tam tikrą laikotarpį, taip pat nukrypimą nuo vidurkio.

Tarkime, kad mes kuriame programą tokių priemonių vertinimui. Ši programa turės atsisiųsti statistinius duomenis per interneto paslaugą, o išsami informacija, pvz., URL ir autentifikavimo informacija, skirta prisijungti prie šios paslaugos, yra saugoma konfigūracijos dokumente. Pakanka pasakyti, kad tam tikrai vertinimo užklausai atliktinų modeliavimų skaičius taip pat turėtų būti lankstus ir todėl bus nurodytas konfigūracijos būdu.

1 pavyzdys: pagrindinis konfigūracijos failas

Šiame pavyzdyje savo programai sukuriame pagrindinį konfigūracijos failą „example1-config.xml“, kuriame yra išsami prisijungimo prie žiniatinklio tarnybos, teikiančios vertinimo proceso statistinius duomenis, išsami informacija. Šiame konfigūracijos faile taip pat bus išsaugotas simuliacijų, kurias reikia atlikti bet kuriai vertinimo užklausai, skaičius. Šis failas (taip pat kitų pavyzdžių konfigūracijos failai) yra atsisiunčiamo archyvo, susieto su šia mokymo programa, konfigūracijos kataloge. Konfigūracijos failo turinys yra išvardytas taip:

//www.some-exchange.com/marketdata

trading_app_dbo

greitasis žodis

10000

Jei panagrinėsime failą išsamiau, atkreipkite dėmesį, kad jis prasideda šakniniu mazgu ; tai žymi „Obix“ konfigūracijos dokumento pradžią. Ten yra keturi mazgų, kurių kiekvienas apima konfigūracijos įrašą. Pirmieji trys turi URL, vartotojo ID ir slaptažodį prisijungdami prie įvesties paslaugos; paskutiniame įraše nurodomas kiekvienos vertinimo užklausos modeliavimo skaičius. Atkreipkite dėmesį, kad kiekvienas įrašas turi unikalų raktą, kaip nurodyta entryKey atributą ir kad kiekvieno įrašo vertė yra apibendrinta a mazgas.

Tada sukursime savo vertinimo programos karkasą ir, dar svarbiau, pademonstruosime, kaip konfigūracijos dokumentas yra skaitomas vykdymo metu. Vadinama interesų klasė Pavyzdys1.java ir galima rasti atsisiunčiamo archyvo aplanke, susietame su šia mokymo programa. Klasės apibrėžimas yra toks:

importuoti org.obix.configuration.Configuration; importuoti org.obix.configuration.ConfigurationAdapter; importuoti org.obix.configuration.ConfigurationAdapterFactory;

public class1 pavyzdys {public static void main (String [] args) {ConfigurationAdapterFactory adapterFactory = ConfigurationAdapterFactory.newAdapterFactory ();

„ConfigurationAdapter“ adapteris = adapterFactory.create (null);

adapter.adaptConfiguration (Configuration.getConfiguration (), "config / example1-config.xml"); printMarketDataInfo (); }

private static void printMarketDataInfo () {Configuration globalConfig = Configuration.getConfiguration ();

System.out.println ("Duomenų tarnybos URL: \ t \ t" + globalConfig.getValue ("market.data.service.url"));

System.out.println ("Duomenų tarnybos vartotojo ID: \ t \ t" + globalConfig.getValue ("market.data.service.uid"));

System.out.println ("Duomenų tarnybos slaptažodis: \ t \ t" + globalConfig.getValue ("market.data.service.password"));

System.out.println ("Modeliavimo skaičius: \ t \ t" + globalConfig.getValue ("Val.simuliacijos skaičius.")); }}

Norėdami paleisti šį ir tolesnius pavyzdžius, turite atsisiųsti „Obix Framework“ dvejetainius failus į vietą, prieinamą per savo klasės kelią. Jūsų klasės kelias turi nurodyti „Obix“ biblioteką, obix-framework.jar, kurį galima rasti sistemos šakninio katalogo lib aplanke. Jums taip pat reikės šių trečiųjų šalių atvirojo kodo bibliotekų: dom.jar, jaxen-full.jar, sax.jar, saxpath.jarir xercesImpl.jar, kurį galite rasti sistemos šakninio katalogo lib / thirdParty aplanke.

Vykdydami šią klasę, turėtumėte gauti tokį rezultatą:

Duomenų tarnybos URL: //www.some-exchange.com/marketdata Duomenų paslaugos vartotojo ID: ID: trading_app_dbo Duomenų tarnybos slaptažodis: greitojo slaptažodžio modeliavimo skaičius: 10000 

Norėdami išskaidyti šią klasę, mes pradedame nuo pagrindinio metodo. Pirmoji šio metodo eilutė sukuria klasės egzempliorių org.obix.configuration.ConfigurationAdapterFactory, kuris yra atsakingas už konfigūracijos adapterio (klasės egzemplioriaus) sukūrimą org.obix.configuration.ConfigurationAdapter). Savo ruožtu adapteris yra atsakingas už faktinį konfigūracijos dokumento nuskaitymą iš nurodytos vietos (nurodytą kaip failo kelią arba URL).

Šis kodo ekstraktas nuskaito mūsų konfigūracijos failo turinį į visuotinį / statinį konfigūracijos egzempliorių, pasitelkdamas adapterio metodą adaptConfiguration ()ir perduodant nuorodą į visuotinį egzempliorių, gautą iš skambučio Configuration.getConfiguration ()Ir mūsų konfigūracijos failo config / example1-config.xml kelią:

adapter.adaptConfiguration (Configuration.getConfiguration (), "config / example1-config.xml"); 

Atkreipkite dėmesį, kad konfigūracijos duomenims saugoti galima sukurti naują konfigūracijos egzempliorių, o ne naudoti statinį (visuotinį) egzempliorių, tačiau paprastumo (ir trumpumo) sumetimais šiam pavyzdžiui naudojame statinį egzempliorių.

Toliau trumpai išnagrinėsime metodą printMarketDataInfo (), kuris paprasčiausiai nuskaito konfigūracijos įrašus (t. y XML mazgai) ir atspausdina jų reikšmes (t. Y. Jų vaiko mazgai). Atkreipkite dėmesį, kad kiekvieno įrašo vertė gaunama iškviečiant metodą „getValue“ (...) apie susijusius Konfigūracija egzempliorius, perduodamas įrašo pavadinimą / raktą, kaip nurodyta įrašo mazge entryKey atributas. Nepaisant to, atkreipkite dėmesį, kad įrašas gali turėti kelias reikšmes, kurios bus parodytos vėliau šioje pamokoje.

2 pavyzdys: konfigūracijos duomenų moduliavimas

Tokio pobūdžio programos paprastai sugeneruos ataskaitą, kurioje bus išsamiai aprašyti užklausos rezultatai tam tikru formatu. Mūsų hipotetinis taikymas nesiskiria; ji gali parengti vertinimo ataskaitas įvairiais formatais. Be to, ataskaitų formatus, naudojamus tam tikroje programos paleidime, diktuoja konfigūracijos įrašas, o visos sugeneruotos ataskaitos siunčiamos el. Paštu mūsų organizacijos gavėjų sąrašui, kur gavėjai taip pat nurodomi konfigūracijos rinkinyje.

Logiška, kad ataskaitų teikimas yra atskiras funkcionalumas, palyginti su vertinimu, nors abu yra susiję; todėl būtų gana protinga apibendrinti mūsų „ataskaitų“ konfigūracijos duomenis. Tai ne tik suteikia švaresnį konfigūracijos duomenų atskyrimą, bet ir palengvina pradedančiojo vizualizaciją apie programos funkcionalumą.

Apibendriname šio pavyzdžio ataskaitų konfigūraciją sukurdami ataskaitų teikimo konfigūracijos modulį, kuris yra mūsų šakninio modulio antrinis elementas. Mes modifikuojame konfigūracijos failą iš paskutinio pavyzdžio, pridedant žemiau pateiktą mazgą prie jo mazgų sąrašo; gautas failas vadinamas example2-config.xml ir jį galima rasti šaltinio archyvo konfigūracijos kataloge.

.................... .................... .......... ......... [email protected]

skaičiuoklės teksto failas pdf

Šiame konfigūracijos faile iškart išsiskiria du dalykai: pirmasis, žinoma, yra mūsų modulio apibrėžimas , po kurio eina antrasis modulio įvesties mazgas . Mes pradedame nuo modulio apibrėžimo. „Obix“ konfigūracijos dokumente gali būti bet koks submodulių skaičius. Dviejų elementų draudimas - neaptariamas šioje pamokoje - moduliai palaiko tą patį mazgų rinkinį kaip ir šakninis modulis. Kitaip tariant, moduliuose yra įrašų ir juose gali būti kitų modulių; taigi moduliai gali būti efektyviai naudojami medžio struktūrai atkartoti.

Prisiminkime, kad paskutiniame pavyzdyje minėjau, kad konfigūracijos įrašas gali turėti kelias reikšmes. Šią funkciją rodo konfigūracijos įrašas, skirtas laikyti ataskaitų formatus, t. . Kaip matote, tai skiriasi nuo kitų įrašų tuo, kad turi tris reikšmes - nurodant tris formatus, kuriais turėtų būti kuriamos ataskaitos.

Dabar mes nagrinėjame „Java“ kodą, norėdami skaityti įrašus mūsų ataskaitų konfigūravimo modulyje. Mes modifikuojame ankstesnio pavyzdžio „Java“ šaltinį pridedant šį metodą; pakeistas šaltinio failas (klasė) pervadinamas Pavyzdys2.java, ir galima rasti archyvo aplanke, susietame su šia mokymo programa:

private static void printReportingConfig () {Configuration globalConfig = Configuration.getConfiguration ();

Konfigūracijos ataskaitosConig = globalConfig.getModule ("ataskaitos.parametrai");

System.out.println ("Ataskaitų paskirties vieta: \ t \ t" + reportConig.getValue ("ataskaitos.distination.email"));

System.out.println ("Ataskaitų formatai: \ t \ t" + reportConig.getValues ​​("ataskaitos_formatai")); }

Vykdydamas šią klasę, jis turėtų pagaminti išvestį:

Duomenų tarnybos URL: //www.some-exchange.com/marketdata Duomenų paslaugos vartotojo ID: ID: trading_app_dbo Duomenų tarnybos slaptažodis: greitojo slaptažodžio modeliavimo skaičius: 10000

„Reporting Config“ parametrai = ataskaitų paskirties vieta: [email protected] ataskaitų teikimo formatai: [skaičiuoklė, teksto failas, pdf]

Išsamiai išnagrinėję papildomą metodą pastebime, kad jis pirmiausia gauna nuorodą į visuotinį Konfigūracija instancija; tada jis gauna nuorodą į konfigūracijos modulį, kuriame yra ataskaitų teikimo konfigūracijos informacija. Metodas pasiekia šias užduotis pasitelkdamas metodą „getModule“ (...) pagrindiniame modulyje, perduodant gaunamo modulio ID. Atkreipkite dėmesį, kad ši sintaksė yra bendrinė ta prasme, kad bet kurio modulio, net jei jis nėra šakninio modulio, antrinio elemento gavimas pasiekiamas iškviečiant „getModule“ (...) duotame modulyje.

$config[zx-auto] not found$config[zx-overlay] not found