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.