JavaOne 2007 – Een terugblik

14 May 2007 13:34 Rudie Ekkelenkamp Java

Na 4 dagen JavaOne is het tijd voor een terugblik. Het was in ieder geval weer een leerzame conferentie waar ik weer veel nieuwe ideeën heb opgedaan. Met hoogtepunten zoals de aankondiging van Java FX en het open sourcen van java. In willekeurige volgorde zijn hier de hoogtepunten:

Spring 2.1

De Spring 2.1 preview release is beschikbaar en de final release wordt eind juni/begin juli verwacht. Het zijn met name uitbreidingen op het gebied van Java 6 en de ver doorgevoerde annotatie support die nu is ingebouwd. Voorheen werden alle beans in de applicationContext.xml gespecificeerd. Nu is dit ook mogelijk met een Java configuratie class.
Deze functionaliteit was al een tijdje als download beschikbaar en ik heb dit ook al eens gebruikt. Grootste voordeel is toch wel dat je compile time checking hebt op je configuratie. Een voorbeeld van een applicationContext.xml waarin een Java configuratie is te vinden volgt hierna:

<bean class="org.example.application.SimpleConfiguration"/>
<bean class="org.springframework.beans.factory.java.ConfigurationPostProcessor"/>

In de applicationContext wordt verwezen naar de SimpleConfiguration java class. In deze class wordt op basis van methods een bean naam gemapped op een bean. In onderstaande configuratie wordt er dus een bean gedefinieerd met de naam SimpleService die de ISimpleService interface implementeert. Het is zo vrij eenvoudig om meerdere configuratie classes te specificeren door te subclassen.

@Configuration
public class SimpleConfiguration {
   @Bean
   public org.example.service.ISimpleService SimpleService() {
      return new SimpleService();
   }
}

Het is nu ook mogelijk om de XML configuratie en Java configuratie te vermengen. In de ApplicationContext kunnen nog steeds ook de XML variant van de beans worden getoond.

Deze release van Spring zal ook het gebruik van JPA vereenvoudigen, voegt support toe voor JavaScript met de Rhino implementatie en er is veel aandacht besteed aan de integratie met JSF.

Naast deze uitbreidingen op Spring is Google ook in de DI markt gesprongen: Guice. Zie deze introductie: Guice

De Google way is om helemaal geen XML meer te gebruiken. Helemaal overtuigd ben ik nog niet. Guice dwingt je min of meer om ook zelf annotaties te gaan schrijven. Aardig is wel dat Guice naast Seam ook een van de inspirators is voor de Web Bean JSR waarover hierna meer.

Web Beans/Seam

Web Beans
Met Web Beans wordt er gepoogd een Component Architectuur te standaardiseren die geen afhankelijkheden heeft met bijvoorbeeld EJB 3 of JSF maar wel door beide kan worden gebruikt. Seam is een van de inspiraties voor de “Web Beans� JSR standaard. Verder zijn Guice (Google’s DI framework) en Shale inspiratoren voor deze standaard.
Web Beans probeert scoping van beans op te lossen. Er kunnen ook meerdere beans met dezelde naam worden gebruikt maar er wordt dan onderscheid gemaakt in prioriteit. In een testomgeving is er bijvoorbeeld een mock implementatie beschikbaar van een bean en zijn echte implementatie. Door de test implementatie de scope “mock� te geven (de hoogste prioriteit), zal deze worden gebruikt.
Bij het packaging naar een productieomgeving is deze bean niet beschikbaar en zal de echte implementatie worden gebruikt.

Seam
Met Seam lijkt JBoss eindelijk JSF implementaties eenvoudig te hebben gemaakt. Gavin King gaf een zeer overtuigende introductie over Seam. Zeker als JSF een requirement is voor de view lijkt Seam een mooie oplossing.
Seam komt met een codegenerator: seam-gen en is geintegreerd in de Redhat Developer Studio. Met seam-gen wordt het volgende gegenereerd:

  • A basic project skeleton
  • Ant script
  • Support voor JPA
  • Basic login/logout
  • Validation framework. Custom Annotaties mogelijk voor validaties.

De losse componenten kunnen met Eclipse update worden gedownload.
Met name het ontbreken van een backing bean, de krachtige validatie support op basis van je domein objecten en de support voor conversational sessions maakt Seam een krachtig framework.
Met Seam zijn ook de beruchte “Lazy Initialization exceptions� opgelost die in de meeste Hibernate applicaties wel een keer de kop op steekt.
Lees bijvoorbeeld ook eens dit Seam artikel.

Hibernate Search
Hibernate Search maakt het mogelijk om full text te zoeken op basis van Lucene door gebruik te maken van je domein model.
Hibernate Search kan worden gebruikt door Annotaties toe te voegen aan je domein model.
Je kunt @Field(index = Index.TOKENIZED) toevoegen aan de te indexeren velden. Dit geval zorgt er voor dat Lucene het veld tokenized (to lower case, stemming etc). In sommige gevallen wil je dit niet en geef je dit aan met Index.UNTOKENIZED.
@IndexedEmbedded zorgt er voor dat je kunt zoeken op basis van master detail velden.
Zoeken is erg mooi geïntegreerd met de Hibernate Search.
@FieldBridge om een object te kunnen mappen op een indexeerbaar tekstveld.
Update, Persist en Delete op je domein model worden automatisch gesynchroniseerd met de Lucene Indexen. Dit kan direct nadat een transactie wordt gecommit.
Het is ook mogelijk om dit met bijvoorbeeld JMS zodat het asynchroon kan worden afgehandeld.

GlassFish

GlassFish v1 was de JEE 5 reference implementatie van Sun en is al weer een tijdje beschikbaar (open source).
GlassFish v2b2 is nu uit en richt zich op een aantal verbeteringen, met name op het gebied van een productierijpe applicatieserver: verbeterde performance, load balancing, clustering en failover is toegevoegd. Naast een HADB (High Availability Database) is er nu ook Memory Replication support. Deze heeft als grote voordeel dat er nauwelijks configuratie aan te pas komt (grote nadeel van HADB) en beter peformt dan HADB. Voor replicatie wordt gebruik gemaakt van P2P technologie (JXTA).
Verder is er support voor WSIT (WebService Interoperatibiliy) waarmee een goede uitwisseling met MS .Net 3.0 wordt gegarandeerd.
En er is een JBI container op basis van OpenESB.
Ook is er standaard support voor het AJP protocol dat gebruikt wordt met de Apache Webserver.
Voor V3 wordt er een 100KB kernel ontwikkeld voor Mobile Phones. Verder wordt de applicatieserver verder modulair opgezet. De applicatieserver start pas modules op als het runtime nodig is.
Alles bij elkaar denk ik dat er nu 2 erg krachtige open source applicatieservers zijn: Jboss en GlassFish.

RESTful Web Services

Er is een JSR in voorbereiding (JSR 311) die een standaard Java API voor RESTful Web Services vastlegt.
Het is nog een draft specificatie, maar het lijkt erg richting POJO gebaseerde annotaties te gaan. Deze API voorkomt een heleboel code die je steeds weer schrijft voor het uitlezen van request parameters, servlet paden etc..
Bijvoorbeeld in een POJO definieer je op class niveau: @ProduceMime(“application/xml�)
Per method kun je filteren op specifice URI paden: @UriTemplate(‘artists/{id}’)
en kun je vastleggen op welke http actie (GET, POST, PUT, DELETE) een methode reageert: @HttpMethod(“GET�)

In Netbeans is er uiteraard al support voor deze JSR zodat op EJB3 Entities eenvoudg POJO’s kunnen worden gegenereerd die JSR 311 ondersteunen. Daarbij wordt ook direct een Test client gegenereerd.

Java SE 7

Development voor JSE 7 is al weer in volle gang en wordt verwacht eind 2009. Op dit moment worden de volgende features verwacht:

  • Nieuw bytecode formaat om support voor scripting te verbeteren. Verwachte scripting support is: beanshell, jruby, jpython, groovy en JavaFX.
  • Modules en Superpackages: encapsuleer package en maak een gedeelte toegankelijk door export van de packages.
  • Annotatie extenties
  • Closures (a la blocks in Ruby)
  • Operator overloading
  • String in switch statements
  • JAM (Java Application Modules) met waarschijnlijk OSGI compliance
  • Vereenvoudigde Swing Development (met Bean Binding, Bean Validation en het Swing Application Framework)
  • Verbeterde Desktop Deployment. De JRE zal modulair worden opgezet zodat alleen de noodzakelijke modules worden geladen. Daarmee zal een veel betere startup worden verkregen van een JRE applcatie.
  • JavaDoc wordt onder handen genomen zodat het verouderde navigatieformaat wordt verbeterd.

Jruby

Charles Nutter was alom aanwezig om Jruby te demonstreren. Hij heeft laten zien dat het nu mogelijk is om een Rails Applicatie in Jruby uit te voeren. Ook liet hij zien dat je een RoR applicatie als een War file kunt deployen op de JEE applicatieserver. Met “rake war install� werd live de deployment uitgevoerd. Vanuit de Rails applicatie werd weer java code aangeroepen om een text to speech te doen. Integratie is dus aan alle kanten geïmplementeerd.

Overige sessies

Java Puzzler en Effective Java
Erg grappig en leerzaam was de Java Puzzler Sessie. Alleen de sessie titel zegt al genoeg:
Javaâ„¢ Puzzlers, Episode VI: The Phantom-Reference Menace/Attack of the Clone/Revenge of the Shift.
Gepresenteerd door o.a. J. Bloch van Google werden wat rariteiten in Java blootgelegd. Wist je bijvoorbeeld dat in InputStream.skip(1024) het niet gegarandeerd is dat er daadwerkelijk 1024 bytes worden geskipped. Je moet dit controleren aan de hand van de return waarde. In de JDK implementatie gebeurt dit op zeer veel plaatsen ook niet!
En wist je dat de equals methode van URL checkt op het IP nummer! Dus virtual hosts worden als equal gezien. En als je geen netwerk verbinding hebt, werkt equals dus niet zoals verwacht. Gebruik daarom ook bij voorkeur URI!
En deze API’s worden niet gefixed vanwege backwards compatiblity. Zoals Bloch zegt: “API’s, like diamonds, are forever!�
Aanvullend was de “Effective Java Reloaded� sessie (van het boek) door Bloch. Daarin werd vooral ingegaan op het gebruik van het builder pattern (in plaats van je constructor uit te breiden meet steeds meer parameters) en de mogelijkheden die Generics nu bieden.

NASA WorldWind
NASA heeft het WorldWind component beschikbaar gemaakt zodat Java gebaseerde Google Earth applicaties kunnen worden gebouwd. Er werd een demo met Netbeans 6.0 gegeven waarin in 10 minuten een basis Google Earth werd gebouwd. Zeker een component om te bekijken!

TroubleShooting en Diagnostische tools in JDK 5 en 6.
Er zijn een aantal tools die erg handig zijn bij het analyseren van bijvoorbeeld heapdumps of om heapdumps live te genereren.
Met jhat kunnen hprof bestanden worden geanalyseerd (jdk 6 tool, maar kan wel dumps van JDK 5 analyseren).
Om een live dump te maken, kan jmap worden gebruikt: jmap –dump:file=t.bin pid
Om het pid te achterhalen, kan jps worden gebruikt.
Jhat t.bin analyseert nu de heapdump en start een http server waarmee de objecten kunnen worden bekeken. Er is ook ondersteuning voor OQL, een query taal om heap objecten te raadplegen.
In java 6 is het nu ook mogelijk om in het geval er een fatal error optreedt, een systeem afhankelijk proces uit te voeren om bijvoorbeeld systeem informatie vast te leggen.
Verder werd Jconsole nog gedemonstreerd (JMX client) die uitgebreid is met deadlock detectie en er is een plugin om TOP informatie te tonen.
Er is ook een aardige tool te vinden op java.net: Fiddle. Dit is een servlet die je met je applicatie kunt deployen en je toestaat om willekeurige scripts uit te voeren in javascript, groovy of jruby. Kan heel handig zijn om runtime informatie te verkrijgen. Het is uiteraard wel een grote security hole, dus moet goed afgeschermd worden.
Ook wordt Selenium (ThoughtWorks) aangeraden als tool om je te helpen debuggen. Zeker nu er een IDE beschikbaar is waarmee je heel eenvoudig pages flows kunt recorden. Als voorbeeld werd geven het typische bugfix traject waarbij je na deployment altijd eerst door een aantal schermen moet klikken voordat je kunt testen of jouw bug is opgelost. Gebruik Selenium om deze schermen te doorlopen zodat je je kunt concentreren op het echte werk.
Selenium maakt het overigens mogelijk om de opgenomen pageflow om te zetten naar Junit testcases zodat je het als integratietest zou kunnen gebruiken.

Oracle
Aangezien Oracle Platinum partner is, mochten ze ook een keynote geven. Ze kondigden aan dat ze nu ook een JEE5 gecertificeerde applicatieserver hebben. Verder worden er weer wat ADF JSF componenten gedoneerd aan Apache.
Ook lanceert Oracle een Spring toolkit om lightweight applicaties te kunnen bouwen. Daarmee parteneren ze met Interface21.

—————————————————————————————
Meer weten over Java-specialist Finalist IT Group?

Reageer

RSS feed for comments on this post · TrackBack URI