lördag 10 maj 2008

JavaOne 2008, dag 4, 9:e maj 2008

Sista konferensdagen inleddes med det allmänna passet ”Extreme Innovation”, där James Gosling presenterade ett tiotal häftiga projekt som alla har det gemensamt att de använder Java. Projekten sträckte sig mellan de konkreta och direkt användbara som VisualVM (se tisdagens blogg) och JavaScript-stödet i nya NetBeans, till de lite mer esoteriska som den automatiska bilen Tommy Junior eller projektet för att visualisera data från Cern.

JavaScript-stödet i NetBeans består av en bra editor med kodningshjälp i, samt möjligheten att debugga JavaScript-kod inifrån Firefox. Det såg mycket lovande ut och det känns som att det är dags att ge NetBeans en chans igen.

En annan spaning så här sista dagen är att varje gång som vi ser Sun på scenen när de ska presentera vad de håller på med så plockar de fram någon form av mobil applikation. Så även på det här passet. Här visade de vad de kunde göra med nVidias APX 2500-plattform tillsammans med OpenGL och 3D-ljud i en mobiltelefon. Snyggt att se hur mjukt de kunde animera ett landskap.

Dagens andra pass hette ”More Effective Java” och hölls av Joshua Bloch, författare till boken Effective Java som precis kommit i en andra utgåva. Den som inte har läst den boken än, rekommenderas att göra det å det snaraste.

Även om Joshua Bloch är en mycket entusiastisk föreläsare, så kände vi att innehållet i passet kanske egentligen bäst lämpar sig i bokform. På en föreläsning är det svårt att visa några relevanta kodexempel som deltagarna kan filosofera över i lugn och ro, till exempel.

Joshua lanserade akronymen ”PECS”, åtföljd av bilden på en välpumpad Arnold, för hur man ska tänka kring wildcards i metoddeklarationer. PECS står för Producer Extends, Consumer Super. Det betyder att om du skickar in ett objekt som producerar data i en metod, så bör det objektet deklareras ”? extends X” i metoddeklarationen, medan om du skickar in ett objekt som tar emot data i en metod, så bör det deklareras ”? super X”.

Nästa pass hette ”Everything Java Technology... but Better and Faster: The Evolution of JPC” och hölls av ett par fysiker från Oxford University. De har byggt en x86-emulator i ren Java. De visade hur de kunde boota DOS i en applet och spela Super Mario eller Doom i den. De gör många tricks bakom kulisserna för att få acceptabel prestanda. Nu låg de någonstans kring 10% av full prestanda (kod som körs direkt på datorn, utan emulering) för kod som körs flera gånger, men målet ligger på 50%.

Varför i hela friden gör de då detta? Det finns ju redan flera färdiga x86-emulatorer eller virtualiserare, varav många är gratis att använda. Deras mål är att kombinera JPC med Nereus som är en produkt för att sprida och fjärrstyra mjukvara för att kunna distribuera helt skräddarsydda miljöer till många datorer. Till exempel så skulle en forskargrupp kunna köra sprida ut och köra någon mystisk fortranapplikation som kräver en viss Linux och en viss uppsättning kodbibliotek till ett stort antal datorer utan att de behöver konfigureras alls, annat än att de måste köra en Nereus-klient. Genom att köra programmen i en applet så får de en stark säkerhetsmodell på köpet, och kan inte ställa till med något på klientdatorerna. SETI @Home-släng er i väggen!

Efter en mycket kort lunch gick vi till passet ”Advanced Java NIO Technology-Based Applications Using the Grizzly Framework”. Grizzly är ett NIO-ramverk för att bygga nätverksservrar och används av flera stora projekt, däribland (förstås) Glassfish. Om det var lunchens eller föreläsarnas fel ska vi låta vara osagt, men det var iallafall stundtals mycket svårt att hålla ögonen öppna.

Nästa pass kom som en, vid det här laget, välbehövlig vitamininjektion. Det hölls av Cameron Purdy som grundade Tangosol och nu är ett relativt högt höns på Oracle efter deras uppköp. Passets titel var ”Top 10 Patterns for Scaling Out Java Technology-Based Applications” och det var en genomgång, på hög nivå, av alla de problem som måste tacklas för den som vill skala ut ett system, alltså sprida det över flera servrar.

Dagens sista pass var också det mest konkreta. Det hette ”Improving Application Performance with Monitoring and Profiling Tools” och handlade om vilka verktyg som finns för att undersöka en javaapplikation i drift. Det handlade dels om de verktyg som följer med i Java, såsom jstack, jconsole och jhat, samt dels om andra verktyg som finns tillgängliga på annat sätt, såsom VisualVM eller DTrace.

Fredrik sammanfattade passet bra genom frågan ”Varför lär de inte ut det här i en javagrundkurs?”. Vi tror att alla javautvecklare skulle må bra av att lära sig mer om de här verktygen. Vi får se till att vi kör ett pass kring dem under någon kompetensdag framöver.

Så slutade en lång och mycket givande konferens. Vi längtar redan till nästa år!

/Fredrik Stålnacke och Kalle Gustafsson, Omegapoint

fredag 9 maj 2008

JavaOne 2008, dag 3, 8:e maj 2008

Om vi lyckades dåligt med att boka bra pass på onsdagen så lyckades vi desto bättre på torsdagen. Dagens första pass var Intels allmänna pass ”Innovations Through Software”. Innehållet i det var i princip detsamma som i AMD:s allmänna pass dagen innan, men här presenterat på ett mycket bättre och snyggare sätt. Teman var övergången till flerkärneprocessorer, hur Intel har processorer för alla slags enheter; från Atom till Itanium samt hur Intel samarbetar med Sun om att göra JVM:en snabbare. Vid förra årets allmänna pass satte de upp målet att JVM:en idag skulle vara 60% snabbare än vad första 6.0-JVM:en var i SPECjbb2005-testet. På scenen gjorde de en demo som visade en cirka 70-procentig prestandaförbättring mellan JDK 6u5p och JDK 6 FCS på samma hårdvara. Imponerande och ett bra bevis för att det inte bara är säkerhetsuppdateringar som inkluderas i varje uppdatering av JVM:en.

Intel pratade också om sin nya linuxbaserade plattform för mobila enheter, Moblin. Den är tänkt att användas för enheter som till exempel små surfplattor eller GPS-mottagare och speciellt i samband med deras nya processor för mobila enheter, Atom.

Nästa pass handlade om vad som kommer i NIO 2 (JSR 203) i Java 7. Den stora nyheten där är ett helt nytt filsystems-API som är tänkt att ersätta användandet av dagens java.io.File (som förstås kommer att finnas kvar i Java även framgent). I övrigt handlar JSR 203 om tillägg till befintliga NIO-funktioner. Till exempel uppdateras I/O-stödet i Java nu till att stödja de senaste multicastprotokollen samt till att stödja Infiniband-nätverk.

Sammanfattningsvis kan vi säga att de ser ut att lyckas mycket bra med det nya filsystems-API:et. Det innehåller en klass för att representera sökvägar, Path, och en klass för att representera en filreferens, FileRef. API:et öppnar för att olika filsystemsimplementationer, till exempel minnesfilsystem, kan implementeras av filsystems-providers. Det innehåller också nya metoder för att kopiera och flytta filer samt för att skapa filer och sätta attribut i atomiska operationer. Alla metoder i API:et kastar IOExceptions istället för att bara returnera true eller false. Det har support för hårda och symboliska länkar, stöd för filattribut såsom Posix-attribut eller DOS-attribut, stöd för notifieringar när filer eller kataloger ändras, med mera, med mera. Många av förbättringarna jämfört med java.io.File är lågt hängande frukter, så visst är det märkligt att det har tagit tretton år för dem att hitta in i Java.

En intressant aspekt av filattributen är att de inte är plattformsoberoende. Många Java-API:er ger en funktionalitet som är snittet mellan funktionaliteten som finns på varje plattform som stöds, men i filsystemsfallet så är inte det snittet stort nog för att vara tillräckligt användbart för många. Större företag med stora resurser har då varit tvungna att sätta utvecklare på att skriva native-kod för den funktionalitet som saknas. I och med de nya filsystems-API:et så går Java några steg mot det läger som bebos av, till exempel, Python; språk som implementerar plattformsspecifika stöd för de filsystemsfunktioner som finns på varje stödd plattform.

Kalle kan konstatera att i och med NIO 2 förlorar ett viktigt argument för att använda EntityFS i styrka; det att EntityFS har metoder för att kopiera och flytta filer som klienten annars skulle behöva implementera själv. Det finns fortfarande kvar en stor skillnad mellan EntityFS och NIO 2, dock, och det är att filer och kataloger i EntityFS representeras av entitetsobjekt, medan de filobjekt som finns i NIO 2 bara refererar platsen filen ligger på. På EntityFS-hemsidan finns det en liten utredning om vad det medför för fördelar för den som är nyfiken. NIO 2 kommer att bli en utmärkt filsystemsprovider för EntityFS, dock.

Nästa pass hette ”Advanced Web Application Security” och hölls av Joe Walker, känd från Jfokus. Han gick igenom säkerhetshoten Cross-Site Request Forgery (CSRF), JavaScript-kapning samt Cross-Site Scripting (XSS) och visade med en demosajt http://blabberone.sitepen.com hur lätt det var att vara sårbar för dem. En bra, nyttig och, framförallt, rolig föreläsning. För den som vill ha hjälp med att skydda sig, så har OWASP en del användbar information och kod. Se http://www.owasp.org/

Efter lunch fortsatte vi med passet ”Programming with Functional Objects in Scala”. Det gick mest ut på att beskriva likheter och skillnader mellan Scala och Java. Kortfattat så är Scala ett programmeringsspråk som gifter samman objektorientering och funktionell programmering på ett mycket tilltalande sätt. Scala-kod kompileras till bytekod och körs på JVM:en. Vi rekommenderar alla som inte har kikat närmare på Scala att göra det – det kommer iallafall vi själva att göra. Vår profetia är att vi alla om tio år kommer köra Scala i våra flygande bilar.

Om dagen hittills varit helt lysande så kändes det som att vi nu passerat höjdpunkten. Passet vi gick på hade den enormt långa titeln ”Next-Generation Java Platform, Micro Edition (Java ME Platform) CDC/MIDP/OSGi Stack for Mobile Devices”. Här presenterade mobiloperatören Sprint sin nya javatjänsteplattform. De rabblade JSR:er som de stödjer och försökte mer göra reklam än att faktiskt presentera vad de gjort. Ointressant! Efter passet pratade vi med några svenskar som gått på fler J2ME-pass än vi, och det låter som om de har hållit betydligt lägre standard än passen i övrigt.

Dagens sista pass var ett riktigt kalkonpass. Det hette ”Designing Graphical Model-Driven Applications: Lego Mindstorm”. Vi får erkänna att när vi bokade det tittade vi mest på ”Lego Mindstorm”-biten och läste inte så noga vad som stod framför. Stort misstag! 58 minuter av passet gick åt att dribbla kod mellan två Mac-datorer och sedan felsöka den på klassiskt Albert och Herbert-manér och under de sista två minuterna kunde vi se en robot gå fram och tillbaka en liten bit och sedan trilla. Vi hoppas att de båda föreläsarna har jobb där de inte kan göra så mycket skada.

/Fredrik Stålnacke och Kalle Gustafsson, Omegapoint

torsdag 8 maj 2008

JavaOne 2008, dag 2, 7:e maj 2008

Vi startar dagen med att konstatera att jetlagen slagit till med full kraft under natten och att vi båda vaknat rätt många timmar innan klockan ringde. Tyvärr kunde vi också konstatera vartefter dagen gick att vi inte lyckats så bra med att välja bra pass att gå på. De flesta vi var på under dagen befann sig någonstans på skalan mellan ”dåligt” och ”irrelevant”, men det fanns ett par guldkorn som tur var.

Lite av den sömnskuld vi byggt upp tjänade vi kanske in på det första allmänna passet där Oracle presenterade ett antal produkter de fått med i köpet av BEA. Inga visioner, inga drömmar. Gäsp.

Det andra passet hölls gemensamt av Ericsson och Sun. De presenterade projektet Sailfin som är en SIP-server som tillägg till applikationsservern Glassfish. Vi var något besvikna på föreläsningen eftersom den mest handlade om hur de byggt servern internt, och vi hade snarare väntat oss mer om användningsscenarier eller kanske jämförelser mellan Sailfin och andra SIP-servrar på marknaden. Det är inte omöjligt att det kommer labbas lite med Sailfin efter att det att vi har kommit hem, men innan dess är det för tidigt att uttala sig om produkten.

Det sista passet innan lunch var mycket välbesökt. Det hölls av Gavin King och handlade om Webbeans. Han utlovade guld och gröna skogar i form av många arkitekturella och designmässiga trevliga egenskaper för den applikation som använde Webbeans. Tyvärr kände vi att föreläsningen inte riktigt förmedlade exakt hur de bra egenskaperna skulle uppnås. Eftersom ingen av oss har använt Webbeans tidigare så är det svårt att göra något klokt uttalande om produkten. Det ser ut att ligga några i sig vettiga tankar bakom ramverket, men vi vill nog se hur det fungerar i praktiken innan vi säger flipp eller flopp.

Efter lunch (som i år faktiskt är hyfsat bra) gick vi på föredraget Mapping Mars av tre killar som jobbade på Arizona State Universitys avdelning för rymdutforskning. De har byggt en applikation, JMars, som de använder för att visa kartdata för Mars. Den finansieras av Nasa och är tänkt att användas för att göra vetenskaplig data från deras olika marsprojekt mer tillgängliga för allmänheten. Vi fick oss många snygga bilder från Mars till livs, men vi kanske inte lärde oss så mycket mer om Java.

Nästa pass var dagens riktiga höjdpunkt. Det hölls av två killar från Intel och hette ”Transactional Memory in Java Technology-Based Systems”. Transaktionsbaserat minne, i deras tappning, betyder att man kan få transaktionslika egenskaper för skrivning och läsning av vanliga variabler.

De beskrev två olika typer av minnestransaktionstekniker som med fördel kan kombineras; mjukvarubaserade transaktioner (STM) samt hårdvarubaserade transaktioner (HTM). För STM utökar de språket Java med ett antal nya nyckelord där det viktigaste heter ”atomic”. Genom att markera block av kod som ”atomic”, så kan man få det som sker inom blocket när det exekveras av en tråd att förefalla atomiskt för alla andra trådar i applikationen. Om atomic-blocket innebär skrivning eller läsning av flera variabler så behöver man inte bry sig om att synkronisera dem med risk för deadlocks som följd, utan Java ser till att de ingående variablerna skyddas på ett bra sätt bakom kulisserna. I det scenariot kan alltså ”atomic” vara ett betydligt bättre verktyg än ”synchronized”.

Hårdvarubaserade transaktioner kräver, förstås, hårdvarustöd och kan användas för att implementera STM på ett effektivt sätt genom att utnyttja funktioner hos processorn. Det kan också användas för att snabba upp den synkronisering som görs i befintliga applikationer genom att HTM-stödet ser till att trådar bara blockeras vid synkroniserade block om de faktiskt gör saker som påverkar andra trådar inne i samma block.

Eftersom STM-stödet kräver ändringar i språket Java så får vi nog lugna oss åtminstone fyra, fem år innan vi kan använda det. Innan dess kanske det hinner dyka upp processorer med HTM-stöd som snabbar upp våra flertrådade applikationer något.

Sist på dagen höll AMD ett allmänt pass som hette ”The Role of the Microprocessor in the Evolution of Java Technology”. Liksom Intel så understryker AMD hur stor skillnad multicore-revolutionen gör för oss som programmerare.

De allmänna passen kan vara värda att besöka för att kunna snappa upp intressanta tillkännagivanden, men tyvärr så levererade AMD inte riktigt på den punkten. Det mest intressanta vi kunde utläsa var att också de också håller på att arbeta med stöd för hårdvarubaserade minnestransaktioner. Det gör att det känns än mer troligt att det är någonting som faktiskt kommer dyka upp i processorerna och i Java i framtiden.

/Fredrik Stålnacke och Kalle Gustafsson, Omegapoint

onsdag 7 maj 2008

JavaOne 2008, dag 1, 6:e maj 2008

Första JavaOne-dagen startade som sig bör med ett stort allmänt pass, en ”general session”, där Suns ledning presenterade var de anser att Java är idag samt vilka idéer de har för hur Java ska utvecklas i framtiden. Det uttalade målet är att Java ska nå alla enheter, devices, såsom till exempel mobiltelefoner och BluRay-spelare, samt att Java ska nå alla utvecklare och konsumenter. Utvecklarna nås genom att tillhandahålla en tilltalande plattform för utveckling och konsumenterna nås genom att göra det enkelt för dem att använda Java. Som en milstolpe på väg mot det senare målet presenterades det att senaste Ubuntu, 8.04, innehåller en OpenJDK i grundinstallationen. (Nåja, om jag kör /usr/bin/java -version på min Ubuntu 8.04 så får jag fortfarande en GNU libgcj version 1.5.) Att Java kan paketeras tillsammans med en linuxdistribution möjliggörs av att hela OpenJDK-Java nu omfattas av GPLv2-licensen.

Man kan också använda general session-passet för att bilda sig en uppfattning om vad årets konferens har för tema. Det uttalade temat i år är det lagom flummiga Java + YYousom kan tolkas som att den handlar om hur Java påverkar ditt liv i vardagen. De gav många exempel och några demonstrationer på var Java används där man kanske inte väntar sig det, som till exempel i åkkort för kollektivtrafiken eller för styrning och övervakning av industriella processer.

JavaFX presenterades första gången för en större publik under förra JavaOne. Då var det fortfarande till stor del en pappersprodukt, men i år finns JavaFX i en långt framskriden beta, så nu gick att visa betydligt mer av substans. En demo visade en applet som använde JavaFX för att aggregera data från Facebook, Flickr med flera sajter på ett snyggt sätt, där ”snyggt” innebär tungt brukande av olika 3D-effekter. Ett sus gick genom publiken när presentatören drog appleten från webbläsaren och släppte den på desktopen och på så sätt gjorde den till en desktopapplikation som kunde köras även efter att webbläsaren stängts ned. Dra-släppandet möjliggörs av att applet-insticksmodulen i webbläsare från och med Consumer-JRE:n (Java 6.1, förlåt, 6u10) är omdesignad och nu kör appleten i en separat JVM-process istället för, som förut, i webbläsarens process. Omdesignen innebär också att man nu kan köra applets med olika, till och med motstridiga, krav på javaversioner i samma webbläsare. I och med omdesignen och lanseringen av JavaFX menar man att ”Applets are back”. Som sig bör så fungerade inte demon helt smärtfritt utan appleten krashade minst två gånger under den nästan fem minuter långa demon.

En annan viktig JavaFX-relaterad nyhet är att Sun presenterade ett samarbete med företaget On2 som innebär att deras video-codecs kommer paketeras tillsammans med JavaFX, något som länge saknats i javavärlden.

På det hela taget ser det ut som att Sun positionerat JavaFX väl för att bli en Flash-/Air-/Silverlight-dödare. Det återstår bara att se hur verkligheten kommer utveckla sig...

Mot slutet av general session så dök Neil Young upp på scenen och gav Suns ledargarnityr lite rockstjärne-cred. Han berättade om hur hans ambitiösa arkivprojekt gjorts möjligt genom de Java-funktioner som finns i BluRay och visade en lång (och bra) demo över hur han kunde navigera genom den första av fem arkiv-BluRay:er samt hur han kunde komplettera innehållet på skivan med innehåll från nätet om han skulle hitta fler gamla, obskyra inspelningar i framtiden.

Efter det allmänna passet vadade vi genom folkmassan till ett pass med titeln ”Java SE: A youthful maturity”. Där visade Suns Danny Coward vad som hänt i de senare uppdateringarna av Java 6 samt vad som var planerat till Java 7. Tyvärr var han obeskrivligt trist som föreläsare, och passet räddades bara av det mycket intressanta innehållet.

Java 6-uppdateringarna består dels av Consumer-JRE:n, Java 6u10, och dels av stora prestandaförbättringar i JVM:en (mer om dem nedan). Consumer-JRE:n är en nedbantad version av JRE:n som själv kan ladda ned kompletteringar till sig själv om den kör program som behöver API:er som inte följer med i den första, bantade, nedladdningen. Förutom nedladdningsstorleken så har Sun-ingenjörerna arbetat med att få ned JVM:ens kallstartstid, alltså den tid det tar för att starta ett javaprogram i en ny JVM-process. Genom att förladda JVM-data i hårddiskarnas cache så menar man på att man sänkt uppstartstiden till en acceptabel nivå. Det återstår att se hur det hela fungerar i verkligheten när JVM-förladdningen trängs med femton andra XP-taskbar-processer som gör samma sak för Adobe Reader, RealPlayer, etcetera. Rent allmänt tycker vi att en del optimeringsstrategier som de använt framstår som rätt tveksamma och frågan är om inte nackdelarna i form av större komplexitet och högre minnesanvändning överväger fördelarna i form av någon sekunds snabbare uppstartstid här eller någon millisekunds snabbare exekvering där. Ett färskt exempel på där den motsatta strategin; att minska komplexiteten och minnesanvändningen, faktiskt också gett bättre prestanda är Firefox 3. Ett annat exempel är Apple som har upptäckt att de får bäst prestanda i OS X då de ställer in kompileringen för att optimera för låg minnesanvändning. Som en bonus får de också ett operativsystem som inte kräver två gigabyte internminne för att användas.

Den kanske viktigaste nyheten i Java 7, som planeras vara klar sommaren 2009, handlar om modularitet. Moduler föreslås bli en större enhet för att gruppera kod i än de paket som finns idag (och kommer att leva kvar). I och modulernas ankomst introduceras nyckelordet ”module” som kan användas för att göra klasser, interface, metoder eller variabler endast synliga inom sin egen modul, alltså en något mindre publik ”public”. Moduler paketeras sedan i JAM-filer som innehåller information om modulens version samt dess beroenden till andra moduler. Det går kanske att ana några OSGi-influenser här, och det kommer också att återkomma i hur Sun, liksom de flesta andra applikationsservertillverkare, håller på med att göra sina applikationsservrar till OSGi-moduler.

På passet demonstrerades också (gratis-)produkten VisualVM som kan användas för att instrumentera en JVM då den körs och då gör det möjligt att bland annat analysera och felsöka minnesläckor eller titta på vad olika trådar gör. Den verkar vara väl värd att kika närmare på.

Nästa pass vi gick på hette ”Maximizing Enterprise Java Performance on Multi-core Platforms” och hölls gemensamt av Intel och Sun. De har samarbetat aktivt i drygt ett år om att förbättra JVM:ens prestanda på Xeon- och Itanium-processorer. Antagligen kommer prestandaförbättringarna också oss till gagn som kör vanliga Core2-processorer med, men de pratade bara om Xeon, gissningsvis för att hindra oss från att springa iväg och köpa för billiga servrar.

Den statistik över prestandaförbättringar de kunde visa upp var imponerande. Det såg ut som att det fanns stora prestandavinster att göra då de anpassade JVM:en till hur en dator med Intelprocessor och -chipset faktiskt fungerar. (Motsvarande anpassningar har antagligen också gjorts till AMD-chip, vi får säkert anledning att återkomma till det.) Mycket av det de gjort finns med i senare uppdateringar av Java 6, men mycket har också släpps i en speciell prestanda-version av JVM:en, Java 6u5p, som finns att ladda ner från Sun. Tanken är att arbetet som gjorts där ska hitta in i vanliga Java 6.

Så länge man som programmerare följer vanliga best practices, såsom att allokera variabler i så litet scope som möjligt (hellre lokala variabler i en metod än instansvariabler, till exempel) samt att minimera mängden data som delas mellan flera trådar, eller snarare, som kan skrivas till av flera trådar, så får vi prestandaförbättringarna gratis. För den som vill krama ur ytterligare prestanda ur en applikation så finns det många JVM-flaggor att leka med.

Nästa pass var ytterligare ett allmänt pass, denna gång med titeln ”Java-centricity: Leveraging Java technology at the hub of your digital life”. Där presenterades kommande nyheter i Java EE, Java SE och Java ME.

Den stora Java EE-nyheten handlade om hur man försöker dela upp Java EE i profiler, alltså i olika varianter som möter olika behov, till exempel webbapplikationer eller, kanske i framtiden, telekomapplikationer. Det såg dock ut att bli en lång och krokig väg fram till det att man kunde komma överens om exakt vilka API:er som skulle ingå i vilka profiler, så det återstår att se om vi får några profiler redan i Java EE 6.

Bland Java EE-nyheterna presenterades också det nya JAX-RS, alltså en motsvarighet till JAX-WS för att bygga REST:iga webbtjänster. Tanken är liknande den hos JAX-WS, att man annoterar sina klasser med publiceringsinformation, och sedan tar applikationsservern hand om att göra en, i det här fallet, REST-webbtjänst av den. Precis som i JAX-WS så sopas dock de XML-dokument som skickas under mattan till förmån för automatiska serialiserare, så vår prognos är att JAX-RS kommer att bli lika kass som JAX-WS. Tyvärr.

Ett tema för Java EE-utvecklingen är fortfarande att det ska bli enklare att Java EE-utveckla. I praktiken betyder det att mycket av det som finns i, till exempel, web.xml kan ersättas med annotations, helt i konflikt med principen om ”separation of concerns”, eller om man vänder på det, helt enligt ”kiss i sängen”-metoden (varmt och skönt först, kallt och jobbigt sen). Sun pratade om att klasser själva kan registrera sig som servlets med context-lyssnare. Något som vi tycker låter jättefarligt inte minst ur ett säkerhetsperspektiv. Det borde öppna för ett helt nytt sätt att kunna skriva elak kod på.

Med andra ord så förutspår vi att det inte kommer hända så mycket av värde i Java EE 6. Vi skulle förstås själva bli glada om vi fick fel, men utsikterna ser bleka ut. Desto mer intressant är den OSGi-ifiering som nu sker av många av de större applikationsservrarna. Den innebär att det kommer bli lättare att skräddarsy en applikationsserver, till exempel Glassfish, för de faktiska behov som föreligger och på så sätt kapa uppstartstider och minnesanvändning.

Till vår stora fasa klev sedan Danny Coward från vårt andra pass upp på scenen för att den här gången ge en halvtimmesversion av samma föreläsning. Intressant? Iallafall mycket, mycket sövande.

Slutet av passet ägnades åt JavaFX. De visade en intressant live-demo där en art director designade ett användargränssnitt i Photoshop och Illustrator och exporterade det som JavaFX-filer. Sedan tog en utvecklare vid och gjorde ett fungerande användargränssnitt av det. Riktigt snyggt, troligen den bästa demon under hela dagen!

Nästa pass var ”Upcoming Java Programming-language Changes” och handlade om framtida ändringar i själva språket Java. Som sagt planeras ett nytt keyword, ”module”, till Java 7. Vis av lärdomarna från ”assertion” och ”enum” så lovade man nu att lägga till det på ett sätt som inte gör att variabler som heter ”module” ger kompileringsfel.

En annan, mycket intressant, nyhet är JSR 308 som handlar om annotations som ger ytterligare information om koden utöver vad nyckelorden gör. Den definierar bland annat assertions såsom @NotNull, @ReadOnly, @NotEmpty och @Immutable. Med hjälp av dem kan man göra Java ännu mer statiskt typat (för den som vill det) och låta kompilatorn hitta ännu fler möjliga fel redan vid kompileringen. De visade siffror på hur många fel de hittat genom att annotera en kodmassa och jämföra antalet hittade fel med hur många fel som FindBugs, PMD och Jlint hittade. Resultatet av deras demo var inte oväntat att annoteringarna sopade mattan med de andra.

Efter ett pass på vi lyssnade på hur virtuella maskiner fungerar och vilka problem som kan finnas med virtuella miljöer bytte vi spår helt och tog oss till ett pass med den långa titeln ”Lightweight UI Toolkit for the Java ME Platform Making Compelling Java ME UI:s Easy”. Den verktygslåda som de presenterade, LUWIT, är designad för att fungera ungefär som Swing, fast istället skapa användargränssnitt för mobiltelefoner. En demo visade hur de kunde skriva ett UI som de sedan visade på ett antal olika telefonmodeller. Generellt såg det snyggt ut, speciellt ett tilläggsprogram för att bygga teman. De har även lagt in stöd för att få till vissa 3D-effekter även på telefonmodeller som inte stödjer 3D i grunden.

Vi avslutade, rejält trötta, en lång dag med att gå på ett Birds-of-a-feather-pass (en BOF) av och med Greg Wilkins, mannen bakom webbservern Jetty. Han hade också ett par kollegor med sig på scenen, men de fick knappt en syl i vädret. Han berättade om vad de gjort i Jetty 6.1 samt om vad de planerar att göra till Jetty 7.

Jetty 7 kommer implementera Servlet API:t, version 3 så fort som det blir färdigt. I det ingår suspend och resume för att parkera och återuppta servletanrop under tiden som servletapplikationen självt väntar på data, kanske under ett asynkront anrop till en extern resurs. På så sätt kan man hantera många, samtidiga anrop utan att låsa upp ett lika stort antal trådar. Helt plötsligt blir det möjligt att till exempel implementera en effektiv HTTP-proxy i Java.

/Fredrik Stålnacke och Kalle Gustafsson, Omegapoint