Java labor segédlet. Alkalmazás fejlesztési környezetek c. tárgyhoz. késztette: Filep Szabolcs 2017.

Hasonló dokumentumok
A Java EE 5 plattform

JAVA webes alkalmazások

GIRO GSM MODEM/VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

DAT adatcserefájl AutoCAD MAP DWG mapobject konvertáló program dokumentáció

Abstract osztályok és interface-ek. 7-dik gyakorlat

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

Bevezető. Servlet alapgondolatok

Google Cloud Print útmutató

Oktatási cloud használata

SSL VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ

A JAVA FUTTATÁSAKOR ELŐFORDULÓ HIBA-

OZW V7.0 firmware frissítés, Remote Tool Access részletes ismertető

BaBér bérügyviteli rendszer telepítési segédlete év

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

ALKALMAZÁSOK ISMERTETÉSE

QBE Édes Otthon lakásbiztosítás tarifáló webservice. Fejlesztői dokumentáció 1.0.2

OOP #14 (referencia-elv)

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Concurrency in Swing

Bérprogram vásárlásakor az Ügyfélnek ben és levélben is megküldjük a termék letöltéséhez és aktiválásához szükséges termékszámot.

Viczián István IP Systems JUM XIX szeptember 18.

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Mesterséges Intelligencia I. kötelező program

A Web Services protokoll használata hálózati szkennelésre (Windows Vista SP2 vagy újabb verzió, valamint Windows 7 és Windows 8 esetén)

Telepítési Kézikönyv

E-Freight beállítási segédlet

A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan

TERC V.I.P. hardverkulcs regisztráció

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Programozási nyelvek II. JAVA

API tervezése mobil környezetbe. gyakorlat

Hiba bejelentés azonnal a helyszínről elvégezhető. Egységes bejelentési forma jön létre Követhető, dokumentált folyamat. Regisztráció.

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

WebEC kliens számítógép telepítése és szükséges feltételek beállítása, az alábbi ellenőrző lista alapján történik.

Frissítési útmutató

Valimed API. REST API a magyarországi orvos pecsétszámok validálására

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

EDInet Connector telepítési segédlet

Google Cloud Print útmutató

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Internetkonfigurációs követelmények. A számítógép konfigurálása. Beállítások Windows XP alatt

Mikroszámla. Interneten működő számlázóprogram. Kézikönyv

Felhasználói segédlet a Scopus adatbázis használatához

Információ és kommunikáció

Ingyenes DDNS beállítása MAZi DVR/NVR/IP eszközökön

Programozási nyelvek és módszerek Java Thread-ek

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

A FileZilla program beállítása az első belépés alkalmával

VIRTUAL APPLIANCE KÉZIKÖNYV VIRTUAL APPLIANCE KÉZIKÖNYV

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Követelmények és feladatleírás

További részletes tájékoztatásért lásd: System Administration Guide (Rendszeradminisztrátori útmutató).

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Sú gó az ASIR/PA IR Públikús felú lethez

Könyvtári címkéző munkahely

1. DVNAV letöltése és telepítése

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05 Geodéziai Feldolgozó Program

Változáskezelés Verzió Dátum Változás Pont Cím Oldal Kiadás: Verzió: 2.0. Oldalszám: 2 / 8

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Kameleon Light Bootloader használati útmutató

EDUROAM WI-FI beállítása

Felhasználói kézikönyv

Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

TANÚSÍTVÁNY TELEPÍTÉSE THUNDERBIRD LEVELEZŐ KLIENSBEN WINDOWS VISTÁN. Tartalom jegyzék

Információ és kommunikáció

Az importálás folyamata Felhasználói dokumentáció verzió 2.1.

Szoftver Tervezési Dokumentáció. Nguyen Thai Binh

Multimédiás adatbázisok

A JAVA FUTTATÁSAKOR ELŐFORDULÓ HIBA-

Mesterséges Intelligencia II. kötelező feladat (3. forduló) - Ajánló rendszer 2.

Titkosítás NetWare környezetben

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

Számítógépes Hálózatok. 3. gyakorlat

Java és web programozás

S, mint secure. Nagy Attila Gábor Wildom Kft.

Microsoft SQL Server telepítése

Telepítés, újratelepítés több számítógépre, hálózatos telepítés Kulcs-Bér program

Tartalom jegyzék 1 BEVEZETŐ SZOFTVER ÉS HARDVER KÖVETELMÉNYEK 2 2 TELEPÍTÉS 2 3 KEZELÉS 5

Objektumorientált Programozás VI.

Bevezetés a Python programozási nyelvbe

italc felhasználói dokumentáció

15.4.2a Laborgyakorlat: Böngésző beállítása

ConnectAlarm alkalmazás Központ/modul programozási segédlet V1.0

Szathmáry László Debreceni Egyetem Informatikai Kar

Programozási nyelvek II.: JAVA

Tudás Reflektor. Copyright 2011; Kodácsy Tamás;

A WORDPRESS TELEPÍTÉSÉNEK LÉPÉSEI

RTCM alapú VITEL transzformáció felhasználó oldali beállítása Spectra Precision Survey Pro Recon szoftver használata esetén

BaBér. Bérügyviteli rendszer. Telepítési segédlet 2014.

A MOKKA hitelesítő szoftver telepítése és használata

StartÜzlet online számlázó modul Használati Útmutató

VBA makrók aláírása Office 2007 esetén

Kommunikáció Androidon Mobilinternet Wifi

és az instanceof operátor

Átírás:

Java labor segédlet az Alkalmazás fejlesztési környezetek c. tárgyhoz késztette: Filep Szabolcs 2017. Szerzői jogok Jelen dokumentum a BME Villamosmérnöki és Informatikai Kar hallgatói számára készített elektronikus jegyzet. A dokumentumot az Alkalmazásfejlesztési környezetek c. tantárgyat felvevő hallgatók jogosultak használni, és saját céljukra 1 példányban kinyomtatni. A dokumentum módosítása, bármely eljárással részben vagy egészben történő másolása tilos, illetve csak a szerző előzetes engedélyével történhet.

1.oldal Bevezetés A labor célja, hogy megismertesse a hallgatókat a rendszerek közötti kommunikációs formák közül az egyik legelterjettebbel, a REST alapú kommunikációval. A tárgy előadásai részletesen tárgyalják a különböző Java alapú keret-rendszereket és eszközöket és bemutatják a REST fogalmát és alapelveit. A labor témaválasztása mögötti szándék az, hogy bemutassuk, hogyan készíthetünk olyan alkalmazást, ami valós idejű külső adatokat képes feldolgozni és az eredményt elérhetővé tenni más rendszerek számára, pl. mobil alkalmazások számára. A labor tartalma és menete: 1. Bevezetés és a megvalósítandó feladat rövid ismertetése 2. OpenWeatherAPI regisztráció (10 perc szükséges a regisztráció aktiváláshoz, ezért ezzel érdemes kezdeni). 3. Közös kutatómunka a lehetséges megoldásokról és időjárási adatforrásokról 4. Elméleti háttér rövid ismertetése (IoT, REST, HTTP) 5. Fejlesztési eszközök rövid ismertetése (Java, Eclipse, Maven, HttpComponents, Gson, REST kliensek (böngésző, Postman, Restlet stb.)) 6. Projekt váz áttekintése 7. Önálló feladatok A feladat A feladat egy olyan alkalmazás készítése, ami képes megmondani, hogy jelenleg melyik városban van a leghidegebb és melyikben a legmelegebb az országban. 1.oldal / 8

2.oldal Kérdések: - Milyen lehetséges megoldások jöhetnek szóba? - Melyiknek milyen költség vonzata van? - Mennyire megbízható az adat forrása? - Megvalósítható lenne-e saját hőmérők üzembe helyezése a városokban? - Ha megvan az eredmény, hogyan szolgáltassuk ezt a felhasználónak vagy más rendszereknek? Projekt váz áttekintése Projekt váz letöltése és importálása az Eclipse fejlesztő eszközbe. JSON fájlok 1. Városok listája egy fájlban: current.city.list.json (18MB!) a. Ezt lehet frissíteni kézzel az openweathermap.org-ról 2. Példa egy város adatainak megtekintésére (city.example.json) a. hozzá tartozó osztály: City.java 3. Példa válasz az OpenWeatherMap API-tól (weather.example.json) a. hozzá tartozó osztályok: Weather.java, Main.java, Maven pom.xml - a Maven konfigurációs fájl - Gson - a JSON - Java objektum mappeléshez - HttpComponents a HTTP híváshoz Java forráskód MinMaxWeatherApplication.java - a main() metódus példányosítja az osztályt és start metódussal indítja - a minmaxvalues példányváltózóban tárolja az aktuális minimum és maximum hőmérsékletet CityReadFromJson.java a current.city.list.json fájl beolvasását végzi, méghozzá stream-elve, hogy ne kelljen egyszerre memóriába tölteni az egész fájl tartalmát (18MB!) A Gson ad támogatást JSON fájlformátum feldolgozására A json package -ben találhatók azok a POJO-k (Plain Old Java Object), amiket a Gson használ, hogy a JSON fájlból Java objektumokat készítsen (vagy fordítva). Ezekbe az osztályokba csak azok a mezők kerültek bele, amiket az alkalmazás 2.oldal / 8

3.oldal használ, de tetszőlegesen bővíthetők bármilyen mezővel, amelyek a json fájlokban előfordulhatnak. WeatherApiCaller.java: Ez az osztály felelős az OpenWeatherMap API currentweather szolgáltatásának igénybevételéért: technikailag egy cityid-val és API-key kiegészített URL meghívásáért és a hőmérsékletet tartalmazó válasz objektum összeállításáért. Ha túl sokszor hívjuk, akkor előfordulhat, hogy 429-es hibát ad vissza az API, amit csak 1 napos várakozással, vagy új API kulcs regisztrációval oldhatunk fel. TemperatureCollectorTask.java: Ez az osztály külön szálként is futtatható (implements Runnable). Feladata, hogy egy város hőmérsékletét összehasonlítsa az eddigi minimum és maximum hőmérsékletekkel és ha szükség, módosítsa azokat. Szekvencia diagram az alkalmazás működéséről 3.oldal / 8

4.oldal Feladatok 1. feladat: OpenWeatherMap.org regisztráció Látogass el ide: https://home.openweathermap.org/ Sign up! 1. Regisztrálj be az oldalra! API keys A fejlécben a névre kattintva tudod szerkeszteni az API kulcsaidat. Az API kulcsok arra valók, hogy egy saját alkalmazásból is hozzáférhess az OpenWeatherMap szolgáltatásaihoz. Egy API kulcs jelen esetben például így néz ki: Használhatod a default kulcsot vagy készíthetsz újat is. 1. Másold be ezt a kulcsot az WeatherApiCaller osztály megfelelő helyére: private final static String API_KEY = "<Your API key comes here>" ; 2. Próbáld ki az API néhány hívását a https://openweathermap.org/current oldalon található minták alapján a böngésző segítségével 4.oldal / 8

5.oldal Kérdések - Mit csinál a &mode=html és a &mode=xml paraméter, ha hozzáilleszted az URL-hez, amikor meghívod a szolgáltatást? - Hogyan viszonyulnak ezek a különböző reprezentációk a REST név feloldásában a Representational State Transfer-ben szereplő a representational szóhoz? :) - Mi a válasz tartalom alapértelmezett formátuma? 2. feladat: városok beolvasása Add hozzá az alábbi kódrésztet a MinMaxWeatherApplication osztály start() metódusához, azért, hogy induláskor beolvassa a magyar városokat. System. out.println( "Start reading cities from file..." ); List<City> cities = new CityReaderFromJson().readCitiesForCountry( "hu" ); Kérdések: - Mennyi magyar várost talált? - Öszesen hány város van a current.city.list.json fájlban? 3. feladat: SingleThreadCollector elkészítése Implementáld a checkandcollecttemperatures() metódus belsejét. Ennek a metódusnak két feladata van: 1. A start() metódusból hívd meg a collectinsinglethread() metódust. 2. egy foreach segítségével, a paraméterben kapott city listán, minden városra hívjon meg egy új TemperatureCollectorTask példány run () metódusát. 3. ezek után írja ki a minmax értékét a consolra: System. out.println( "RESULT: \n " + minmax); 4. Fejezd be a TemperatureCollectorTask osztály setminandmax() metódusát, ami a paraméterben kapott időjárási adattal frissíti a minmax objektum hőmérsékleti adatait, amennyiben hidegebb vagy melegebb várost talált. Figyelj rá, hogy a Float-okat compareto() metódussal hasonlítsd össze: pl. float1. compareto (float2) Kérdések: - Mennyi ideig fut így az alkalmazás, ameddig kiszámolja a végeredményt? - Mitől ilyen lassú, hogy több másodpercig is eltart? - Hogyan lehetne gyorsítani a futási időt? 5.oldal / 8

6.oldal 4. feladat: MultiThreadCollector elkészítése Annak érdekében, hogy gyorsabban eredményt adjon az alkalmazás, fejezd be a a MultiThreadCollector osztály checkandcollecttemperatures() metódusát: 1. A foreach belsejében ahelyett, hogy közvetlenül a TemperatureCollectorTask run() metódusát hívnád, használd az ExecutorService -t, ami a példányváltozó szinten már rendelkezésre áll. Ezzel párhuzamosítani lehet a task futtatásokat, és így a HTTP hívásokat. 2. Az MinMaxWeatherApplication osztályban készíts egy collectinmultithread() metódust az előző alapján és írd át benne a one by one szöveget parallely -re és, hogy MultiThreadCollector-t használja. Kérdések: - Mennyivel gyorsult az alkalmazás? - Mitől gyorsult így fel? - Hogyan lehet szabályozni a párhuzamosan futtatott HTTP hívások számát az alkalmazásban? - Figyeld meg a finishandprintresult() metódust! A jelenlegi beállítások szerint legfeljebb mennyi ideje van az alkalmazásnak, hogy minden OpenWeatherMap API hívás lefusson? (keresd meg a kódban a választ!) 5. feladat: saját REST API készítése Mit tudunk tenni, ha mi is szeretnénk más rendszereket adatot szolgáltatni hasonló felületen? Először is szükségünk van egy HTTP szerverre, ami fogadja a kéréseket és válaszokat rá a HTTP protokollnak megfelelően. 6.oldal / 8

7.oldal A legelterjedtebb Java-s HTTP szerverek: Apache Tomcat, Jetty, Glassfish, Wildfly, WebLogic (utóbbiak már sokkal többet tudnak, mint egy sima HTTP szerver). A Java 6-os verziója óta azonban az Oracle JDK-ban is van egy beépített kis HTTP szerver, amit tudunk használni erre a célra. Az alkalmazásban már van egy MinMaxHttpServer, ami a 8000-es porton figyel, ha elindítjuk. Ehhez kell elkészíteni a RestHttpHandler handle() metódusát, hogy tetszőleges hívás esetén JSON formátumban visszaadja a kiszámolt minimum és maximum hőmérsékleti adatok. 1. Készítsd el a RestHttpHandler osztály handle() metódusát. Használd a Gson osztályt az adatok JSON formátumúvá alakításához. Ha a böngészőből hívod, akkor az eredmény valami ilyesmi kell legyen: { "mintempweather" : { "main" : { "temp" : 8.2 }, "id" : 3046526, "name" : "Pecs" }, "maxtempweather" : { "main" : { "temp" : 11 }, "id" : 717771, "name" : "Mateszalka" } } 2. Egészítsd ki ezt a metódust, hogy ha a requesturi egyenlő /stop, akkor állítsa le a HTTP szervert (httpexchange.getrequesturi().tostring().equals( "/stop" ) ). 3. Próbáld ki az alkalmazást böngészőből. 4. Próbáld ki az alkalmazást Postman-ből (böngésző kiegészítő) is, ha ennek telepítése lehetséges....itt a vége, további jó Java programozást! :) 7.oldal / 8