Voor de één is Java een taal waarvan je ooit is eens de basis hebt geleerd tijdens college. Voor de ander is Java veel meer de ‘lingua franca’ van de meeste bedrijven binnen de ict-sector. Maar welke rol vervult Java in de toekomst?
Naar mijn mening is Java de perfecte taal voor embedded computing en de ondersteuning van realtime applicaties. Met andere woorden: Java is de taal voor het internet of things (IoT). Ik geef hier drie redenen waarom Java dat in mijn ogen is.
Java is het beste in staat om de groei van het IoT op te vangen.
Om te kunnen begrijpen waarom Java de ideale taal is voor het IoT, moeten we eerst begrijpen wat het IoT is. Andrew C. Oliver, voormalig bestuurder van het Open Source Initiative en oprichter van het Apache POI-project, zegt het treffend: IoT gaat om teamwork. Daar heeft hij gelijk in. Het gaat om teamwork tussen mens en machine. Maar het gaat vooral om teamwork tussen machines onderling. Dit is het idee van pervasive computing. Het idee dat elk denkbaar apparaat embedded is met chips. En op die manier verbonden is met een oneindig netwerk van andere apparaten.
Dat we daadwerkelijk naar een situatie gaan waarin IoT niet meer weg te denken is uit ons leven, kunnen we zien aan het online komen van technologieën die IoT ondersteunen. Zo is http/2 een cruciaal netwerkprotocol dat voor een deel is geüpdatet om machine-tot-machine-communicatie (m2m) te accommoderen. En zo is Thingsee een developerkit die je in staat stelt om je ‘eigen’ IoT te ontwikkelen.
Deze m2m-communicatie zal ons een heleboel beslissingen uit handen gaan nemen. Nu zien we dat terug in ontwikkelingen die wat verder van ons bed staan. Denk aan technologie die het gebruik van pesticides in de landbouw reguleert. Of aan technologie die het vaststellen van medische diagnoses voor een groot deel uit handen van dokters kan nemen. In de nabije toekomst zullen deze ontwikkelingen veel dichter bij ons bed komen te staan.
Neem bijvoorbeeld een snoepautomaat die goed onderhouden is en uitgerust is met voldoende voorraad. Geef je de automaat een bevel, dan interacteren er een aantal mechanismen met elkaar, met als uiteindelijk gevolg dat jouw honger gestild wordt. Voor dat proces hoef je de details van implementatie niet te begrijpen. Je maag is tevreden met het resultaat. Nu zijn er snoepautomaten die verbonden zijn met het IoT. Geef je een IoT-snoepautomaat een bevel, dan interacteren er op globaal niveau allerlei mechanismen met elkaar. Waardoor mechanismen niet alleen zorgen dat jouw honger wordt gestild, maar ook zorgen dat het apparaat goed onderhouden blijft en de voorraad tijdig wordt aangevuld. Al die processen worden geregeld door het IoT.
Verwacht wordt dat we van twee miljard apparaten die verbonden zijn met het internet, naar een wereld gaan waarin zich tien miljard embedded processoren bevinden. Dit toenemend belang van embedded computing zal worden opgevangen door Java.
Waarom? Omdat Java wereldwijd diepgeworteld en geïmplementeerd is. IoT zal zijn invloed hebben op gebieden waar Java al de ‘common language’ is. Dit blijkt mede uit allerlei instanties die heel veel middelen beschikbaar stellen om Java door te geven aan een nieuwe generatie programmeurs. Op die manier worden allerlei processen (denk aan productieprocessen die volledig afhankelijk zijn van Java) gewaarborgd.
2. Java is ooit ontworpen voor embedded computing.
Wat veel mensen vergeten, is dat Java ooit bedoeld is voor embedded computing. De eerste versies van Java waren geschreven voor huishoudelijke apparaten. Denk aan set-top interfaces van televisies. James Gosling zag Java als taal voor de communicatie tussen apparaat en gebruiker, maar ook voor de communicatie tussen apparaten. Deze originele designeigenschappen zijn twintig jaar later klaar om het IoT te ondersteunen.
Dit verklaart waarom een Java programmeur zich alleen bewust hoeft te zijn van de verschillende onderdelen van het Java platform, wil hij Java embedded gaan programmeren. De manier van programmeren of het lezen van programma’s verandert voor een Java programmeur niet. Java programmeurs zijn in staat om embedded broncode net zo gemakkelijk te lezen als de broncode behorend bij typische desktop enterprise applicaties. Het verschil met embedded programmeren? De bibliotheken, met name de development- en testingomgevingen, zijn gespecificeerd. Het belangrijkste is dat een Java-programmeur de juiste toolchain heeft, behorend bij de embedded omgeving waarin hij wil werken.
Door alle Java standards en tools kan Java meer en meer worden aangewend voor de originele bedoeling: embedded computing. Had je het tussen 2000 en 2010 over embedded computing, dan dacht je aan J2ME. Nu is Java ME de standaardomgeving voor embedded applicaties. Hoewel Java ME (met name de profiles en configurations) cruciaal blijft, leggen mobile Java developers meer de nadruk op Android en html5 voor user interfaces. Profiles en configurations zijn cruciale concepten bij embedded programmeren. Een embedded profile, zoals MIDP, is een collectie van api’s. Een configuration is een frameworkspecificatie. Hoewel het niet helemaal waar is, kun je profiles zien als onderdelen behorend bij configurations. Inclusief het meest opvallende CLDC. In aanvulling op de profiles en configurations van Java ME hebben een aantal enterprise Java technologieën potentie voor embedded development. Denk bijvoorbeeld aan de Java Management Extensions (JMX). Daarnaast neemt Real-time Java een belangrijke plaats in bij het embedded programmeren van het IoT.
3. Java voldoet nu wel aan real-time eisen van embedded applicaties
IoT betekent dus een toename van embedded applicaties. Veel embedded applicaties die verbonden zijn met sensoren (in bijvoorbeeld de medische of agrarische sector), stellen realtime eisen. Hoewel het zeker James Gosling zijn bedoeling was om Java aan de meeste realtime eisen te laten voldoen, waren de realtime computations van Java in eerste instantie zeker niet het sterkste punt. Zo waren Java runtimes onbetrouwbaar. Vooral bij garbage collection lag de zwakte. Als antwoord daarop kwamen RTSJ (de real-time spec van Java) en andere standards. Zij zorgden ervoor dat er een aantal taken werd ondersteund, zodat vertragingen bij garbage collection werden voorkomen.
RTSJ werd in 2002 geïmplementeerd in een aantal Java vm’s. Maar sindsdien lag RTSJ stilletjes op de plank. Tot februari 2015. RTSJ is inmiddels meerdere malen geüpdatet. Zie bijvoorbeeld Jamaica VM.
Oracle draagt bijvoorbeeld Java SE aan voor real-time systemen. Volgens Oracle heeft Java SE zich zodanig ontwikkeld dat het in ieder geval aan de meeste soft realtime eisen voldoet. Soft real-time eisen zien toe op ‘gebruikelijk’ gedrag. Denk aan een banktransactie, waarbij het gebruikelijk is dat hij binnen driehonderd milliseconden als opdracht wordt verwerkt. Een harde realtime eis ziet toe op het voorspelbaar zijn van het ‘slechtste’ scenario. Daarbij gaat het erom dat in het slechtste scenario een applicatie binnen een bepaalde tijd een opdracht moet kunnen verwerken. Denk aan de solenoid van een locomotief. Die moet in het slechtste geval binnen 1,15 seconde na een afgegeven alarm kunnen sluiten.
Het kunnen voldoen aan soft realtime eisen is goed genoeg voor de meeste embedded applicaties. Voor applicaties die harde realtime eisen stellen, richten Java developers zich met name tot JSR-302: Safety Critical Java Technology.
Dus ook de realtime eisen die veel IoT-applicaties stellen, lijken voor Java geen probleem meer te zijn. Kortom: Java lijkt in 2015 voldoende uitgerust om de taal te worden van het IoT.
Thomas Brons, content manager bij Bonque
Krijg nou niet bepaald het idee dat de schrijver zelf enige relevante ervaring met Java heeft want ik mis de ‘passie’ en lees meer een oppervlakkige opsomming.
Jammer
Java is een mooie taal. Niet perfect maar goed genoeg. Als .Net niet zo primair Microsoft feestje zou zijn, lijkt het mij veel geschikter omdat als het moet je ook assembly blokken kan gebruiken.
Johan de meningen kunnen zo uiteenlopen….
Ik vind Java echt vreselijk… de taal is syntactisch niet echt een uitdaging maar al die ellende die je tegenkomt om iets werkend te krijgen, meldingen waar je weinig mee kan (toegegeven in de meeste gevallen veroorzaakt door slechte coding maar dat is ook iets dat kenlijk bij java hoort)
Om nog maar te zwijgen over allerlij frameworks waardoor je al helemaal geen idee meer hebt wat er gebeurd. al eens ooit iets geprobeerd met TomCat ? i rest my case.
Ik zeg het niet graag maar ik denk dat MicroSoft met C# werkelijk heel wat beters in de markt heeft gezet, welhaast de zelfde syntax maar je krijgt dingen in een vrij rap tempo werkend, al brengt .net natuurlijk weer dezelfde framework bagger die Java ook teistert.
(Voor alle duidelijkheid, het is prima om van dergelijke technieken gebruik te maken, maar snap dan alsjeblieft wel wat het doet, en zorg dat je zonder die spullen ook nog iets voor elkaar krijgt)
Als ik even naar het artikel kijk vallen mij twee dingen op:
1)Embedded toepassingen: Ja dank je de koekoek, Java is een resource vreter van de bovenste plank, bij embedded systemen zijn de resources als regel vrij beperkt… niet echt een goede combinatie lijkt me
2)Realtime eisen, tja wellicht dat de definitie van realtime toepassingen van Thomas Brons wat afwijken van de mijne, daar ik het dan eigenlijk heb over digital signal processing, wat toch echt heel andere eisen stelt dan een update in een database zo snel mogelijk op je schermje te laten zien.
Voor dsp is java wegens de onder 1 genoemde reden ook al niet mijn keuze.
Daar staat tegenover dat java natuurlijk rijkelijk is voorzien van functionaliteit voor communicatie over het internet. typisch iets dat handig is voor IoT.
Maar nee… ik ben geen java fan.. maar dat zei ik geloof ik al he ?