info  fabercon.fi | 0400 533 978 tai 044 204 2029

RESTful-rajapintojen käyttö JavaFX-sovelluksessa

Alla olevan kuvan esimerkissä sepät ovat tehneet sovelluksen businesslogiikan sovelluspalvelimelle. Serverilla olevaa sovelluksen koodia ei tarvitse muuttaa millään lailla, jos desktop-käyttöliittymä korvataan web-käyttöliittymällä. Kontroller-luokka pitää yhteyttä serverille RESTful-palvelujen kautta. Palvelurajapinnan käsittely Java-koodissa on rakennettu tässä ratkaisussa erittäin käytetyn Apache HttpClient-kirjaston avulla, sen päälle edelleen rakentaen. Tuloksena on kirjasto, jota voidaan käyttää kaikissa vastaavissa sovelluksissa ilman modifiointia.

RESTFul service with JavaFX application

Asynkronisten palvelujen hallinta JavaFX:n puolella on suhteellisen monivaiheista. RESTful-palvelujen datatyyppinä on joko XML tai JSON. Jälkimmäinen on vienyt suosiossa selvän voiton, siksi käytämme JSONia. JSON-olio on muutettava joko POJO-olioiksi tai JavaFX:n Property-olioiksi, sillä JSON ei ole käytännöllinen formaatti Java sovelluksessa. Tilanne on sama, käyttipä rajapinnassa JSONia tai XML:aa.

Tämä konvertointi on ylimääräinen työ. Konvertointi on lisäksi toteutettava molempiin suuntiin. JSONin ja Javan POJO-luokkien välinen konvertointi hoituu helposti vaikkapa Goolen Gson-kirjaston avulla. Propertyjen ja JSONin välistä konvertointia varten ei toistaiseksi löydy kuin ilmainen FxJson-kirjasto. Konvertoinnin voi kohtuullisella työllä toteuttaa sovelluskohtaisesti koodaamalla, kyse on vain tietojen lukeminen luokasta toiseen.

Vaikka data saataisiin tietokannasta Javan POJO-oliona, edellä kuvattua ongelmaa ei pääse pakoon. Silloin datamuunnos on tehtävä POJOn ja Propertyjen kesken, siltä osin kuin datan sidontaa käyttöliittymän komponentteihin tarvitaan.

Ongelmia JavaFX-sovelluksen rakenteessa ovat siis:
– edellä kuvattu ”ylimääräinen” datamuunnos JSON- ja Property-tietoluokkien välillä
– edellä kuvatun (RESTful) palvelurajapinnan hallinta on osa kontrolleria
– kontrollerin rooli on liian laaja ja keskeinen, se hallitsee kaikkea

Myöhemmin selvitämme ratkaisuja, miten kontrolleri voidaan jakaa osiin ja pohdimme myös sitä, onko datan sidonnalle (ts. databindaukselle) vaihtoehtoja.

Scroll to Top