SlideShare a Scribd company logo
1 of 26
Download to read offline
| 1WebSockets i OpenLayers spojeni Spring-om
Kapsch – O kompaniji
| 2WebSockets i OpenLayers spojeni Spring-om
Kapsch CarrierCom
WebSocket
| |Presentation heading Presentation subheading 330.04.2014
Što je to WebSocket
Protokol koji pruža full-duplex komunikacijske
kanale preko jedne TCP konekcije
Dizajniran za implementaciju u web
preglednicima i web serverima
| 4WebSockets i OpenLayers spojeni Spring-om
preglednicima i web serverima
2011 standardiziran od strane IETF kao
RFC 6455
API u Web IDL-u standardiziran od strane W3C
Zašto je nastao WebSocket
Za komunikaciju između servera i klijenta su se
koristili različiti „hackovi” na HTTP protokolu
WebSocket protokol omogućava bolju
interaktivnost
| 5WebSockets i OpenLayers spojeni Spring-om
interaktivnost
Porast web baziranih sadržaja (igre, chat,
video…) koji traže bidirekcijsku komunikaciju
Kako radi WebSocket protokol
1. Uspostavljanje WebSocket
konekcije
• Klijent zahtjeva unapređenje
protokola na koje server, ukoliko
to može, odgovara
2. Razmjena podataka
ServerClient
HTTP GET Upgrade Request
HTTP 101 Switching Protocols Response
send(data)
1
| 6WebSockets i OpenLayers spojeni Spring-om
2. Razmjena podataka
• Do zatvaranja konekcije
asinkrona razmjena podataka
3. Zatvaranje WebSocket
konekcije
• Klijent inicira zatvaranje
konekcije
send(data)
onmessage(data)
Close
.
.
.
3
2
OnMessage(data)
Send(data)
Što treba imati na umu
Proxy, firewall ili neki drugi mrežni element može blokirati
WebSocket komunikaciju između servera i klijenta
Preglednik na klijentskoj strani ne podržava WebSocket
komunikaciju
| 7WebSockets i OpenLayers spojeni Spring-om
komunikaciju
• Internet Explorer & IE Moblie – 10.0
• Firefox – 6.0
• Chrome – 14.0
• Safari & iOS Safari – 6.0
• Android Browser – 4.4
Java & WebSockets
JSR 356: JavaTM API for WebSocket (finaliziran
22 Svibanj, 2013)
| 8WebSockets i OpenLayers spojeni Spring-om
Čak i prije JSR 356 većina web servera (Tomcat,
Glassfish, Jetty, JBoss,…) imaju implementaciju
WebSocket protokola, no nema standarda
Aplikacija
Klijent u pregledniku vidi
stranicu s kartom
Na karti se prikazuju
lokacije vozila
Klijent
| 9WebSockets i OpenLayers spojeni Spring-om
lokacije vozila
Vozila periodički šalju svoju
lokaciju na server
Server podatke o lokaciji
prosljeđuje pregledniku, tj.
karti
Server
Vozila
Kapsch CarrierCom
Spring, WebSocket, STOMP
Serverski dio aplikacije
| |Presentation heading Presentation subheading 1030.04.2014
Spring – WebSocket
Podrška za WebSocket u Spring 4
Spring 4 sadrži novi spring-messaging modul koji
preuzima određene apstrakcije iz Spring
Integration projekta
| 11WebSockets i OpenLayers spojeni Spring-om
Integration projekta
Podržava STOPM protokol
Omogućuje „fallback” u slučaju da WebSocket
protokol nije podržan
STOMP
WebSocket se nalazi malo iznad TCP, te kao
takav predstavlja tzv. spojni protokol
Za komunikaciju potrebno je implementirati pod
protokol, na primjer STOMP
| 12WebSockets i OpenLayers spojeni Spring-om
protokol, na primjer STOMP
Streaming Text Oriented Messaging Protocol
Neovisan o jeziku aplikacije
(language-agnostic)
Poruka o lokaciji
Poruka koju izmjenjuju Vozila, Server i Klijent.
public class Location {
private int vehicleId;
| 13WebSockets i OpenLayers spojeni Spring-om
private int vehicleId;
private float lon;
private float lat;
}
Kontroler
Kontroler koji obrađuje poruke poslane iz vozila.
@Controller
public class LocationController {
| 14WebSockets i OpenLayers spojeni Spring-om
@MessageMapping("/inlocations")
@SendTo("/topic/vlocations")
public Location handleInLocation(
Location inLocation) throws Exception {
return inLocation;
}
}
Konfiguracija WebSocketa
Konfiguracija WebSocket-a.
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
| 15WebSockets i OpenLayers spojeni Spring-om
public void configureMessageBroker(MessageBrokerRegistry config)
{
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry)
{
registry.addEndpoint("/inlocations").withSockJS();
}
}
Kapsch CarrierCom
OpenLayers, sockjs.js, stomp.js
Klijentski dio aplikacije
| |Presentation heading Presentation subheading 1630.04.2014
OpenLayers (1)
Biblioteka za prikaz karti
Otvoreni kod
Podržava prikaz karti iz više izvora
| 17WebSockets i OpenLayers spojeni Spring-om
Podržava prikaz karti iz više izvora
OpenStreetMap
Google
Bing
Yahoo
OpenLayers (2)
Bazni slojevi (base layer) Markeri (markers)
Karta
| 18WebSockets i OpenLayers spojeni Spring-om
Geometrija (geometry)Kontrola (control)
OpenLayers (3)
OpenStreetMap – OSM
Bazni sloj koji se koristi kao karta
Web Map Service (WMS)
| 19WebSockets i OpenLayers spojeni Spring-om
Koristi EPSG:900913 projekciju
Projekcije
EPSG:4326 (geodetske koordinate, širina i dužina)
EPSG:900913 (sferni Mercator, metari)
OpenLayers (4)
DOM objekt u kojem će se iscrtati karta
<div id="map"></div>
Inicijalizacija karte, OSM sloja i sloja s markerima
var map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.OSM('Simple OSM Map');
map.addLayer(layer);
| 20WebSockets i OpenLayers spojeni Spring-om
map.addLayer(layer);
var markers = new OpenLayers.Layer.Markers('Markers');
map.addLayer(markers);
Dodavanje markera na kartu
var size = new OpenLayers.Size(24,24);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon('/icons/vehicle1.png',size,offset);
var location = new OpenLayers.LonLat(13.595356,45.226899).transform(
new OpenLayers.Projection('EPSG:4326'), map.getProjectionObject());
var marker = new OpenLayers.Marker(location,icon);
markers.addMarker(marker);
sockjs.js & stomp.js (1)
Otvaranje konekcije
function connect() {
var socket = new SockJS('/inlocations');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
setConnected(true);
console.log('Connected: ' + frame);
| 21WebSockets i OpenLayers spojeni Spring-om
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/vlocations', function(location){
showLocation(JSON.parse(location.body).content);
});
});
}
Zatvaranje konekcije
function disconnect() {
stompClient.disconnect();
setConnected(false);
console.log('Disconnected');
}
sockjs.js & stomp.js (2)
Slanje lokacije
function sendLocation(location) {
stompClient.send('/app/inlocations', {}, JSON.stringify(location));
}
Prikaz lokacije
function showLocation(location) {
if(!marker) {
| 22WebSockets i OpenLayers spojeni Spring-om
if(!marker) {
addMarker(location);
}
else {
var lPx = map.getPixelFromLonLat(
new OpenLayers.LonLat(location.longitude, location.latitude)
.transform(
new OpenLayers.Projection('EPSG:4326'),
map.getProjectionObject()
)
);
marker.moveTo(lPx);
}
}
Kapsch CarrierCom
Demonstracija
| |Presentation heading Presentation subheading 2330.04.2014
Zaključak
Dobro analizirati zahtjeve aplikacije, možda
WebSocket nije najbolje rješenje
Dobro analizirati infrastrukturu, možda
WebSocket komunikaciju nije moguće ostvariti
| 24WebSockets i OpenLayers spojeni Spring-om
WebSocket komunikaciju nije moguće ostvariti
Dobro analizirati klijente, možda nemaju
preglednike (ili infrastrukturu) koji podržavaju
WebSocket-e
„Hope for the best, prepare for the worst”
Reference
WebSocket
http://www.websocket.org
Spring
http://spring.io/guides/gs/messaging-stomp-websocket
| 25WebSockets i OpenLayers spojeni Spring-om
http://spring.io/guides/gs/messaging-stomp-websocket
STOMP
http://en.wikipedia.org/wiki/Streaming_Text_Oriented_Messaging_Protocol
OpenLayers
http://openlayers.org
OpenStreetMap
http://www.openstreetmap.org
Hvala!
| 26WebSockets i OpenLayers spojeni Spring-om
Hvala!

More Related Content

What's hot

JavaCro14: Pakiranje i instalacija JEE rješenja
JavaCro14: Pakiranje i instalacija JEE rješenjaJavaCro14: Pakiranje i instalacija JEE rješenja
JavaCro14: Pakiranje i instalacija JEE rješenjaMiroslav Resetar
 
Mean Stack JavaCro 2014
Mean Stack JavaCro 2014Mean Stack JavaCro 2014
Mean Stack JavaCro 2014Nenad Pecanac
 
Putting REST to rest with gRPC
Putting REST to rest with gRPCPutting REST to rest with gRPC
Putting REST to rest with gRPCKarlo Novak
 

What's hot (12)

JavaCro14: Pakiranje i instalacija JEE rješenja
JavaCro14: Pakiranje i instalacija JEE rješenjaJavaCro14: Pakiranje i instalacija JEE rješenja
JavaCro14: Pakiranje i instalacija JEE rješenja
 
Mean Stack JavaCro 2014
Mean Stack JavaCro 2014Mean Stack JavaCro 2014
Mean Stack JavaCro 2014
 
JavaCro'14 - JavaScript single-page applications i JEE, can they fit together...
JavaCro'14 - JavaScript single-page applications i JEE, can they fit together...JavaCro'14 - JavaScript single-page applications i JEE, can they fit together...
JavaCro'14 - JavaScript single-page applications i JEE, can they fit together...
 
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan VučakJavantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
Javantura Zagreb 2014 - Java na klijenstskoj strani - Ivan Vučak
 
JavaCro'15 - Microservice architecture - Nenad Pečanac
JavaCro'15 - Microservice architecture - Nenad PečanacJavaCro'15 - Microservice architecture - Nenad Pečanac
JavaCro'15 - Microservice architecture - Nenad Pečanac
 
Putting REST to rest with gRPC
Putting REST to rest with gRPCPutting REST to rest with gRPC
Putting REST to rest with gRPC
 
JavaCro'15 - API as a new architecture - Miroslav Rešetar
JavaCro'15 - API as a new architecture - Miroslav RešetarJavaCro'15 - API as a new architecture - Miroslav Rešetar
JavaCro'15 - API as a new architecture - Miroslav Rešetar
 
JavaCro'15 - Enterprise service bus - Juraj Ćutić
JavaCro'15 - Enterprise service bus - Juraj ĆutićJavaCro'15 - Enterprise service bus - Juraj Ćutić
JavaCro'15 - Enterprise service bus - Juraj Ćutić
 
JavaCro'15 - RESTful Web APIs Design - Denis Kranjčec
JavaCro'15 - RESTful Web APIs Design - Denis KranjčecJavaCro'15 - RESTful Web APIs Design - Denis Kranjčec
JavaCro'15 - RESTful Web APIs Design - Denis Kranjčec
 
JavaCro'15 - BOOTylicious Spring - Karlo Novak
JavaCro'15 - BOOTylicious Spring - Karlo NovakJavaCro'15 - BOOTylicious Spring - Karlo Novak
JavaCro'15 - BOOTylicious Spring - Karlo Novak
 
JavaCro'15 - WebRTC in PBZ video chat - Zoran Perak
JavaCro'15 - WebRTC in PBZ video chat - Zoran PerakJavaCro'15 - WebRTC in PBZ video chat - Zoran Perak
JavaCro'15 - WebRTC in PBZ video chat - Zoran Perak
 
JavaCro'15 - Java parallelization - Zlatko Sirotić
JavaCro'15 - Java parallelization - Zlatko SirotićJavaCro'15 - Java parallelization - Zlatko Sirotić
JavaCro'15 - Java parallelization - Zlatko Sirotić
 

Viewers also liked

Viewers also liked (20)

JavaCro'14 - Vaadin scalability myth – Gordan Ivanović
JavaCro'14 - Vaadin scalability myth – Gordan IvanovićJavaCro'14 - Vaadin scalability myth – Gordan Ivanović
JavaCro'14 - Vaadin scalability myth – Gordan Ivanović
 
JavaCro'14 - Developing Google Chromecast applications on Android – Branimir ...
JavaCro'14 - Developing Google Chromecast applications on Android – Branimir ...JavaCro'14 - Developing Google Chromecast applications on Android – Branimir ...
JavaCro'14 - Developing Google Chromecast applications on Android – Branimir ...
 
JavaCro'14 - Automatic database migrations – Marko Elezović
JavaCro'14 - Automatic database migrations – Marko ElezovićJavaCro'14 - Automatic database migrations – Marko Elezović
JavaCro'14 - Automatic database migrations – Marko Elezović
 
JavaCro'14 - GWT rebooted – Gordan Krešić
JavaCro'14 - GWT rebooted – Gordan KrešićJavaCro'14 - GWT rebooted – Gordan Krešić
JavaCro'14 - GWT rebooted – Gordan Krešić
 
JavaCro'14 - How to handle large amounts of data in real time using a cloud e...
JavaCro'14 - How to handle large amounts of data in real time using a cloud e...JavaCro'14 - How to handle large amounts of data in real time using a cloud e...
JavaCro'14 - How to handle large amounts of data in real time using a cloud e...
 
JavaCro'14 - Securing web applications with Spring Security 3 – Fernando Redo...
JavaCro'14 - Securing web applications with Spring Security 3 – Fernando Redo...JavaCro'14 - Securing web applications with Spring Security 3 – Fernando Redo...
JavaCro'14 - Securing web applications with Spring Security 3 – Fernando Redo...
 
JavaCro'14 - The World of Java – in Croatia – Branko Mihaljević and Aleksande...
JavaCro'14 - The World of Java – in Croatia – Branko Mihaljević and Aleksande...JavaCro'14 - The World of Java – in Croatia – Branko Mihaljević and Aleksande...
JavaCro'14 - The World of Java – in Croatia – Branko Mihaljević and Aleksande...
 
JavaCro'14 - Automatized testing with Selenium 2 – Juraj Ćutić and Aleksander...
JavaCro'14 - Automatized testing with Selenium 2 – Juraj Ćutić and Aleksander...JavaCro'14 - Automatized testing with Selenium 2 – Juraj Ćutić and Aleksander...
JavaCro'14 - Automatized testing with Selenium 2 – Juraj Ćutić and Aleksander...
 
JavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija Kranjec
JavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija KranjecJavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija Kranjec
JavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija Kranjec
 
JavaCro'14 - Cloud Platforms in Internet of Things – Krešimir Mišura and Bran...
JavaCro'14 - Cloud Platforms in Internet of Things – Krešimir Mišura and Bran...JavaCro'14 - Cloud Platforms in Internet of Things – Krešimir Mišura and Bran...
JavaCro'14 - Cloud Platforms in Internet of Things – Krešimir Mišura and Bran...
 
JavaCro'14 - JCalc Calculations in Java with open source API – Davor Sauer
JavaCro'14 - JCalc Calculations in Java with open source API – Davor SauerJavaCro'14 - JCalc Calculations in Java with open source API – Davor Sauer
JavaCro'14 - JCalc Calculations in Java with open source API – Davor Sauer
 
JavaCro'14 - WebLogic-GlassFish-JaaS Strategy and Roadmap – Duško Vukmanović
JavaCro'14 - WebLogic-GlassFish-JaaS Strategy and Roadmap – Duško VukmanovićJavaCro'14 - WebLogic-GlassFish-JaaS Strategy and Roadmap – Duško Vukmanović
JavaCro'14 - WebLogic-GlassFish-JaaS Strategy and Roadmap – Duško Vukmanović
 
JavaCro'14 - Profile any environment with Java Flight Recorder – Johan Janssen
JavaCro'14 - Profile any environment with Java Flight Recorder – Johan JanssenJavaCro'14 - Profile any environment with Java Flight Recorder – Johan Janssen
JavaCro'14 - Profile any environment with Java Flight Recorder – Johan Janssen
 
JavaCro'14 - Continuous deployment tool – Aleksandar Dostić and Emir Džaferović
JavaCro'14 - Continuous deployment tool – Aleksandar Dostić and Emir DžaferovićJavaCro'14 - Continuous deployment tool – Aleksandar Dostić and Emir Džaferović
JavaCro'14 - Continuous deployment tool – Aleksandar Dostić and Emir Džaferović
 
JavaCro'14 - Can You Tell Me How to Get to Sesame Street I wanna be a Grails ...
JavaCro'14 - Can You Tell Me How to Get to Sesame Street I wanna be a Grails ...JavaCro'14 - Can You Tell Me How to Get to Sesame Street I wanna be a Grails ...
JavaCro'14 - Can You Tell Me How to Get to Sesame Street I wanna be a Grails ...
 
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter PilgrimJavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
 
JavaCro'14 - Java in M2M technologies – Mango M2M software – Ivan Raguž
JavaCro'14 - Java in M2M technologies – Mango M2M software – Ivan RagužJavaCro'14 - Java in M2M technologies – Mango M2M software – Ivan Raguž
JavaCro'14 - Java in M2M technologies – Mango M2M software – Ivan Raguž
 
JavaCro'14 - Amphinicy crown jewels our software development infrastructure –...
JavaCro'14 - Amphinicy crown jewels our software development infrastructure –...JavaCro'14 - Amphinicy crown jewels our software development infrastructure –...
JavaCro'14 - Amphinicy crown jewels our software development infrastructure –...
 
JavaCro'14 - ZeroMQ and Java(Script) – Mladen Čikara
JavaCro'14 - ZeroMQ and Java(Script) – Mladen ČikaraJavaCro'14 - ZeroMQ and Java(Script) – Mladen Čikara
JavaCro'14 - ZeroMQ and Java(Script) – Mladen Čikara
 
JavaCro'14 - Sustainability of business performance and best practices – Zlat...
JavaCro'14 - Sustainability of business performance and best practices – Zlat...JavaCro'14 - Sustainability of business performance and best practices – Zlat...
JavaCro'14 - Sustainability of business performance and best practices – Zlat...
 

Similar to JavaCro'14 - WebSockets and OpenLayers joined with Spring – Bojan Kljajin

Heron MC - JavaScript for sysadmins and lazy developers
Heron MC - JavaScript for sysadmins and lazy developersHeron MC - JavaScript for sysadmins and lazy developers
Heron MC - JavaScript for sysadmins and lazy developersDavor Racić
 
Kako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloudKako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloudDubravko Marak
 
AngularJS - Ivan Vučičević
AngularJS - Ivan Vučičević AngularJS - Ivan Vučičević
AngularJS - Ivan Vučičević Kruno Ris
 
World Wide Web
World Wide WebWorld Wide Web
World Wide Webnposcic
 
Auditing of user activity through NoSQL database
Auditing of user activity through NoSQL databaseAuditing of user activity through NoSQL database
Auditing of user activity through NoSQL databaseKristijan Duvnjak
 
White paper - Migracija IT rješenja u Cloud Hrvatskog Telekoma
White paper - Migracija IT rješenja u Cloud Hrvatskog TelekomaWhite paper - Migracija IT rješenja u Cloud Hrvatskog Telekoma
White paper - Migracija IT rješenja u Cloud Hrvatskog TelekomaHrvatski Telekom
 
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platformaWeb::Strategija
 
Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)IT Showoff
 
Vert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaVert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaFive
 
Vert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacijeVert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacijeMihovil Rister
 
Seminarski diplomskiwimax
Seminarski diplomskiwimaxSeminarski diplomskiwimax
Seminarski diplomskiwimaxmaturski
 
(ATD10) Postar zvoni dvaput - dostava podataka u Azureu
(ATD10) Postar zvoni dvaput - dostava podataka u Azureu(ATD10) Postar zvoni dvaput - dostava podataka u Azureu
(ATD10) Postar zvoni dvaput - dostava podataka u AzureuLuka Lovosevic
 
Mobilne tehnologije za pristup središnjim bazama podataka
Mobilne tehnologije za pristup središnjim bazama podatakaMobilne tehnologije za pristup središnjim bazama podataka
Mobilne tehnologije za pristup središnjim bazama podatakaSlaven Brumec
 

Similar to JavaCro'14 - WebSockets and OpenLayers joined with Spring – Bojan Kljajin (16)

Heron MC - JavaScript for sysadmins and lazy developers
Heron MC - JavaScript for sysadmins and lazy developersHeron MC - JavaScript for sysadmins and lazy developers
Heron MC - JavaScript for sysadmins and lazy developers
 
Principi rada WWW-a
Principi rada WWW-aPrincipi rada WWW-a
Principi rada WWW-a
 
Kako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloudKako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloud
 
AngularJS - Ivan Vučičević
AngularJS - Ivan Vučičević AngularJS - Ivan Vučičević
AngularJS - Ivan Vučičević
 
World Wide Web
World Wide WebWorld Wide Web
World Wide Web
 
Http protokol
Http protokolHttp protokol
Http protokol
 
Uvod u CMIS standard
Uvod u CMIS standardUvod u CMIS standard
Uvod u CMIS standard
 
Auditing of user activity through NoSQL database
Auditing of user activity through NoSQL databaseAuditing of user activity through NoSQL database
Auditing of user activity through NoSQL database
 
White paper - Migracija IT rješenja u Cloud Hrvatskog Telekoma
White paper - Migracija IT rješenja u Cloud Hrvatskog TelekomaWhite paper - Migracija IT rješenja u Cloud Hrvatskog Telekoma
White paper - Migracija IT rješenja u Cloud Hrvatskog Telekoma
 
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma
(WS14) Tomislav Tipuric - Cloud kao aplikacijska platforma
 
Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)
 
Vert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaVert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, Javantura
 
Vert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacijeVert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacije
 
Seminarski diplomskiwimax
Seminarski diplomskiwimaxSeminarski diplomskiwimax
Seminarski diplomskiwimax
 
(ATD10) Postar zvoni dvaput - dostava podataka u Azureu
(ATD10) Postar zvoni dvaput - dostava podataka u Azureu(ATD10) Postar zvoni dvaput - dostava podataka u Azureu
(ATD10) Postar zvoni dvaput - dostava podataka u Azureu
 
Mobilne tehnologije za pristup središnjim bazama podataka
Mobilne tehnologije za pristup središnjim bazama podatakaMobilne tehnologije za pristup središnjim bazama podataka
Mobilne tehnologije za pristup središnjim bazama podataka
 

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association (20)

Java cro'21 the best tools for java developers in 2021 - hujak
Java cro'21   the best tools for java developers in 2021 - hujakJava cro'21   the best tools for java developers in 2021 - hujak
Java cro'21 the best tools for java developers in 2021 - hujak
 
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK KeynoteJavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
 
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan LozićJavantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
 
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
 
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
 
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
 
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander RadovanJavantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
 
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
 
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
 
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
 
Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...
 
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej VidakovićJavantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
 
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
 
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
 
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
 
Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...
 
Javantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela PetracJavantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela Petrac
 
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje RuhekJavantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
 
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
 
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario KusekJavantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
 

JavaCro'14 - WebSockets and OpenLayers joined with Spring – Bojan Kljajin

  • 1. | 1WebSockets i OpenLayers spojeni Spring-om
  • 2. Kapsch – O kompaniji | 2WebSockets i OpenLayers spojeni Spring-om
  • 3. Kapsch CarrierCom WebSocket | |Presentation heading Presentation subheading 330.04.2014
  • 4. Što je to WebSocket Protokol koji pruža full-duplex komunikacijske kanale preko jedne TCP konekcije Dizajniran za implementaciju u web preglednicima i web serverima | 4WebSockets i OpenLayers spojeni Spring-om preglednicima i web serverima 2011 standardiziran od strane IETF kao RFC 6455 API u Web IDL-u standardiziran od strane W3C
  • 5. Zašto je nastao WebSocket Za komunikaciju između servera i klijenta su se koristili različiti „hackovi” na HTTP protokolu WebSocket protokol omogućava bolju interaktivnost | 5WebSockets i OpenLayers spojeni Spring-om interaktivnost Porast web baziranih sadržaja (igre, chat, video…) koji traže bidirekcijsku komunikaciju
  • 6. Kako radi WebSocket protokol 1. Uspostavljanje WebSocket konekcije • Klijent zahtjeva unapređenje protokola na koje server, ukoliko to može, odgovara 2. Razmjena podataka ServerClient HTTP GET Upgrade Request HTTP 101 Switching Protocols Response send(data) 1 | 6WebSockets i OpenLayers spojeni Spring-om 2. Razmjena podataka • Do zatvaranja konekcije asinkrona razmjena podataka 3. Zatvaranje WebSocket konekcije • Klijent inicira zatvaranje konekcije send(data) onmessage(data) Close . . . 3 2 OnMessage(data) Send(data)
  • 7. Što treba imati na umu Proxy, firewall ili neki drugi mrežni element može blokirati WebSocket komunikaciju između servera i klijenta Preglednik na klijentskoj strani ne podržava WebSocket komunikaciju | 7WebSockets i OpenLayers spojeni Spring-om komunikaciju • Internet Explorer & IE Moblie – 10.0 • Firefox – 6.0 • Chrome – 14.0 • Safari & iOS Safari – 6.0 • Android Browser – 4.4
  • 8. Java & WebSockets JSR 356: JavaTM API for WebSocket (finaliziran 22 Svibanj, 2013) | 8WebSockets i OpenLayers spojeni Spring-om Čak i prije JSR 356 većina web servera (Tomcat, Glassfish, Jetty, JBoss,…) imaju implementaciju WebSocket protokola, no nema standarda
  • 9. Aplikacija Klijent u pregledniku vidi stranicu s kartom Na karti se prikazuju lokacije vozila Klijent | 9WebSockets i OpenLayers spojeni Spring-om lokacije vozila Vozila periodički šalju svoju lokaciju na server Server podatke o lokaciji prosljeđuje pregledniku, tj. karti Server Vozila
  • 10. Kapsch CarrierCom Spring, WebSocket, STOMP Serverski dio aplikacije | |Presentation heading Presentation subheading 1030.04.2014
  • 11. Spring – WebSocket Podrška za WebSocket u Spring 4 Spring 4 sadrži novi spring-messaging modul koji preuzima određene apstrakcije iz Spring Integration projekta | 11WebSockets i OpenLayers spojeni Spring-om Integration projekta Podržava STOPM protokol Omogućuje „fallback” u slučaju da WebSocket protokol nije podržan
  • 12. STOMP WebSocket se nalazi malo iznad TCP, te kao takav predstavlja tzv. spojni protokol Za komunikaciju potrebno je implementirati pod protokol, na primjer STOMP | 12WebSockets i OpenLayers spojeni Spring-om protokol, na primjer STOMP Streaming Text Oriented Messaging Protocol Neovisan o jeziku aplikacije (language-agnostic)
  • 13. Poruka o lokaciji Poruka koju izmjenjuju Vozila, Server i Klijent. public class Location { private int vehicleId; | 13WebSockets i OpenLayers spojeni Spring-om private int vehicleId; private float lon; private float lat; }
  • 14. Kontroler Kontroler koji obrađuje poruke poslane iz vozila. @Controller public class LocationController { | 14WebSockets i OpenLayers spojeni Spring-om @MessageMapping("/inlocations") @SendTo("/topic/vlocations") public Location handleInLocation( Location inLocation) throws Exception { return inLocation; } }
  • 15. Konfiguracija WebSocketa Konfiguracija WebSocket-a. @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override | 15WebSockets i OpenLayers spojeni Spring-om public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/inlocations").withSockJS(); } }
  • 16. Kapsch CarrierCom OpenLayers, sockjs.js, stomp.js Klijentski dio aplikacije | |Presentation heading Presentation subheading 1630.04.2014
  • 17. OpenLayers (1) Biblioteka za prikaz karti Otvoreni kod Podržava prikaz karti iz više izvora | 17WebSockets i OpenLayers spojeni Spring-om Podržava prikaz karti iz više izvora OpenStreetMap Google Bing Yahoo
  • 18. OpenLayers (2) Bazni slojevi (base layer) Markeri (markers) Karta | 18WebSockets i OpenLayers spojeni Spring-om Geometrija (geometry)Kontrola (control)
  • 19. OpenLayers (3) OpenStreetMap – OSM Bazni sloj koji se koristi kao karta Web Map Service (WMS) | 19WebSockets i OpenLayers spojeni Spring-om Koristi EPSG:900913 projekciju Projekcije EPSG:4326 (geodetske koordinate, širina i dužina) EPSG:900913 (sferni Mercator, metari)
  • 20. OpenLayers (4) DOM objekt u kojem će se iscrtati karta <div id="map"></div> Inicijalizacija karte, OSM sloja i sloja s markerima var map = new OpenLayers.Map('map'); var layer = new OpenLayers.Layer.OSM('Simple OSM Map'); map.addLayer(layer); | 20WebSockets i OpenLayers spojeni Spring-om map.addLayer(layer); var markers = new OpenLayers.Layer.Markers('Markers'); map.addLayer(markers); Dodavanje markera na kartu var size = new OpenLayers.Size(24,24); var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); var icon = new OpenLayers.Icon('/icons/vehicle1.png',size,offset); var location = new OpenLayers.LonLat(13.595356,45.226899).transform( new OpenLayers.Projection('EPSG:4326'), map.getProjectionObject()); var marker = new OpenLayers.Marker(location,icon); markers.addMarker(marker);
  • 21. sockjs.js & stomp.js (1) Otvaranje konekcije function connect() { var socket = new SockJS('/inlocations'); stompClient = Stomp.over(socket); stompClient.connect({}, function(frame) { setConnected(true); console.log('Connected: ' + frame); | 21WebSockets i OpenLayers spojeni Spring-om console.log('Connected: ' + frame); stompClient.subscribe('/topic/vlocations', function(location){ showLocation(JSON.parse(location.body).content); }); }); } Zatvaranje konekcije function disconnect() { stompClient.disconnect(); setConnected(false); console.log('Disconnected'); }
  • 22. sockjs.js & stomp.js (2) Slanje lokacije function sendLocation(location) { stompClient.send('/app/inlocations', {}, JSON.stringify(location)); } Prikaz lokacije function showLocation(location) { if(!marker) { | 22WebSockets i OpenLayers spojeni Spring-om if(!marker) { addMarker(location); } else { var lPx = map.getPixelFromLonLat( new OpenLayers.LonLat(location.longitude, location.latitude) .transform( new OpenLayers.Projection('EPSG:4326'), map.getProjectionObject() ) ); marker.moveTo(lPx); } }
  • 23. Kapsch CarrierCom Demonstracija | |Presentation heading Presentation subheading 2330.04.2014
  • 24. Zaključak Dobro analizirati zahtjeve aplikacije, možda WebSocket nije najbolje rješenje Dobro analizirati infrastrukturu, možda WebSocket komunikaciju nije moguće ostvariti | 24WebSockets i OpenLayers spojeni Spring-om WebSocket komunikaciju nije moguće ostvariti Dobro analizirati klijente, možda nemaju preglednike (ili infrastrukturu) koji podržavaju WebSocket-e „Hope for the best, prepare for the worst”
  • 25. Reference WebSocket http://www.websocket.org Spring http://spring.io/guides/gs/messaging-stomp-websocket | 25WebSockets i OpenLayers spojeni Spring-om http://spring.io/guides/gs/messaging-stomp-websocket STOMP http://en.wikipedia.org/wiki/Streaming_Text_Oriented_Messaging_Protocol OpenLayers http://openlayers.org OpenStreetMap http://www.openstreetmap.org
  • 26. Hvala! | 26WebSockets i OpenLayers spojeni Spring-om Hvala!