Oracle CodeOne 2019

I mitten på september anordnades Oracle Code One i San Fransisco. Konferensen riktar sig till utvecklare med fokus på Java, Modern Web, DevOps, Cloud Native, AI och Machine Learning.

Under veckan hölls närmare 600 föredrag inom Java, Jakarta EE och Eclipse Microprofile, databaser, utvecklarverktyg,
artificiell intelligens och machine learning.

Precis som molnet för några år sedan fick mycket uppmärksamhet var det AI och machine learning som det var mest buzz och "sälj" runt. Detta märktes speciellt på alla företag som var på plats och gjorde reklam för sina produkter.

AI och machine learning beskrivs som en game changer och nästa steg i den industriella relvolutionen.
Det känns troligt att tekniken kommer slå på bred front i alla typer av brancher och skapa förutsättningar för nya aktörer.

Bevakning

Några av de områden som bevakades lite extra under konferensen var utvecklingen av Java, hur landskapet för microtjänster ser ut samt vad AI innebär för Java utvecklare. I det fullspäckade schemat av alla föredrag kändes följande områden mest aktuella.

  • AI och Machine Learning
  • Java 13
  • Jakarta EE
  • Eclipse Microprofile
  • Quarkus
  • Kubernetes

AI och Machine Learning

Det är mycket fokus på AI och Machine Learning men vad innebär det för en utvecklare?

Till att börja med är det ett komplext och stort ämne och kräver bra kunskaper inom machine och deep learning. Det mest vanliga är troligtvis att utvecklare kommer tillhandahålla data som appliceras på modeller eller algoritmer som
köpts in eller utvecklats av någon annan.

AI kommer skapa en marknad likt App Store för mobiltelefoner där man istället för spel och applikationer kan köpa AI. Ta Amazon som ett exempel där det redan idag finns tjänster för text, bild och video analys och man som kund tillhandahåller data som appliceras på leverantörens modeller och algoritmer.

AI för utvecklare

Som utvecklare är det fortfarande programmeringsspråk som R och Python som är mest populära, men för Java utvecklare finns TensorFlow och Deep Learning 4J.

Machine Learning vs Deep Learning

AI kan kännas svårt att få ett helhetsgrepp runt, men några skillnader
mellan machine learning och deep learning.

Machine learning

  • Algoritmer baserade på strukturerat data
  • Algoritmerna tränas med data. Mer data ger bättre algoritmer
  • Kräver att man extraherar ut viktiga delar av datat med hjälp av en utvecklare

Deep learning

  • Mer avancerade algoritmer
  • Algoritmerna är mer dynamiska och kan lära sig av datat utan en utvecklare
  • Datat behöver inte vara strukturerat
  • Artificial Neural Networks

Att jobba med AI kommer troligen innebära nära samarbete mellan datavetare, affärsutvecklare, applikationsutvecklare och IT administratörer där den viktigaste framgångsfaktorn är bra kvalité på data.

Java 13

Under konferensveckan presenterades Java 13 och beskrevs som en underhålls-release med få nya funktioner. Fokus i Java 13 har varit att underhålla det befintliga för att möjliggöra nya features i kommande releaser.

Bland optimeringarna kan nämnas effektivare garbage collection och nya implementationer av gamla API'er. T.ex. är implementationen av det gamla socket API'et helt nytt. Ur ett utvecklingsperspektiv finns det från och med Java 13 stöd för mer avancerade switch satser samt möjlighet att deklarera strängar som text block.

Textblock i Java 13

För att skriva t.ex. html strängar i Java kan man nu använda text block för enklare formattering utan att behöva använda specialtecken.

String html = """
<html>
  <body>
    <h1>Hello Java13</h1>
  </body>
</html>""";

Framtiden för Java

På den första keynoten nämndes att man vill att Java ska vara det bästa och mest populära programeringsspråket för Cloud, Big Data och AI. Det läggs mycket resurser på att utveckla Java.

Jakarta EE

Efter Java EE officiellt gått i graven bedrivs mycket jobb runt Jakarta EE. Projektet har migrerats från Oracle till Eclipse Foundation och bytt namn till Jakarta EE. Den första releasen av Jakarta EE 8 annonserades i september. Att migrera från Java EE till Jakarta EE ska vara förhållandevis enkelt då många applikationsservrar nu stödjer Jakarta EE.

Utvecklingen runt Jakarta EE känns spännande då många stora företag och ett starkt community är med och bidrar till utveklingen.

Applikationsservrar

Följande applikationsservrar har nu stöd för Jakarta EE 8.

Eclipse Microprofile

Eclipse Microprofile är ett initiativ som siktar på att optimera utvecklingen för Enterprise Java applikationer. Målet är att definera en api standard som är portabel mellan många olika plattformar. Projektet har funnits sedan 2016 och är ett bra alternativ till SpringBoot.

Microprofile komponenter

  • Config (flexibel konfigurering)
  • Fault Tolerance (felhantering och återhämtning)
  • Health
  • JWT Authentication
  • Metrics (monitorering)
  • Open Tracing (orkestrering)
  • Open API (dokumentation)
  • Rest Client
  • CDI, JAX-RS, JSON-B, JSON-P

Microprofile vs SpringBoot

Det är oundvikligt att inte börja jämföra Microprofile med SpringBoot så vad är skillnaden?

Den största skillnaden mellan Microprofile och SpringBoot förutom olika API'er är själva konceptet. I Spring paketeras allt till en enda stor exekverbar jar fil och ofta för det med sig ett väldigt stort beroende träd till olika lib beroende på vilken typ av applikation det handlar om.

Till skillnad från SpringBoot kan man med Microprofile använda en befintlig plattform i runtime där små microtjänster har förutsättningar att bygga och deployas snabbt. Byggda artifakter kan oftast mätas i kilobytes (thin war) istället för megabytes (fat jar) som oftast är fallet när man pakterar ihop allt till en enda stor jar fil.

Quarkus

Quarkus är ytterligare ett ramverk designat för att enklare kunna bygga containers anpassade för Java applikationer i molnet. RedHat står bakom projektet och har verkligen lyckats göra Java konkurrenskraftigt för molnet.

Nyckelfunktioner i Quarkus

  • Minimal footprint för Java applikationer ger snabb startup och turnaroundtid från utveckling till deployment.
  • Lätt att automatisera för continuous deployment.
  • Portabilitet mellan miljöer samt uppskalning utan påverkar på verktyg, arkitektur eller utveckling.
  • Programeringsmodell som stödjer både imperativ och reaktiv utvecklingsparadigm.
  • Baserat på standarder och ramverk som JAX-RS, Hibernate, JPA, CDI, Eclipse Vert.x, Eclipse MicroProfile
  • Fokus på att utvecklaren ska få en så bra upplevelse som möjligt.

Det är även möjligt att integrera tredjeparts produkter via Quarkus extension framework för att enklare anpassa efter egna behov.

Test med Quarkus

Det finns bra möjligheter att skriva tester med Quarkus. Enhetstester, integrationstester och systemtester kan lätt integreras.

Genom att använda Quarkus test runner kan man starta sin applikation innan testerna exekveras.

@QuarkusTest
public class StocksTest {
  @Test
  public void testStock() {
    given()
     .pathParam("id", "ORCL")
     .when()
       .get("/stock/{id}")
     .then()
       .statusCode(200)
       .body(is("Oracle"));
    }
}

Kubernetes

Extremt populärt. I alla föredrag som handlade om molnet nämdes Docker och Kubernetes. Alla stora molnleverantörer som AWS, Google Cloud, Azure och OpenShift stödjer tekniken.

Summering

En mycket bra och välorganiserad konferens i en häftig stad. Verktygslådan för utveckling med Java har blivit större. Med Jakarta EE, Eclipse Microprofile, Spring och Quarkus finns det nu större möjligheter att välja teknik efter behov. Utvecklingen kring AI känns spännande och blir intressant att följa den närmaste tiden.