Follow Us on Twitter

J-Spring 2009

April 2009 - Op 15 april heb ik deelgenomen aan de jaarlijkse Nederlandse Java User Groep conferentie: de J-Spring. Dit jaar wederom in 't Spant in Bussum. Voorzien van een stralend zonnetje zat de sfeer er aan het begin van de dag al goed in en zo te zien waren het maximale aantal bezoekers, 1000, bijna allemaal aanwezig.

Na een gezellig praatje met wat collega's en ex-collega's ben ik even langs gegaan bij de Whitehorses stand.

Onze stand dit jaar werd druk bezocht om de Whitebook 2008 op te halen, in te schrijven op de maandelijkse Whitebooks mailing en een kansje te maken bij de verloting van een op afstand bestuurbare Dalek, een van de aartsvijanden van de Time Lord/ Doctor uit de Doctor Who serie!


Onze stand inclusief de gevreesde Dalek.

Na het bezoekje was het de hoogste tijd om te beginnen aan het programma van de dag:

DCI, een nieuw programmeerparadigma gebaseerd op rollen - Serge Beaumont

DCI staat voor Data Context Interaction en laat zich vertalen naar een programmeerparadigma gebaseerd op rollen. Serge Beaumont gaf een interessante presentatie over dit nieuwe programmeerparadigma. Het klassiek programmeermodel werkt vaak vanuit een sterk abstract objectmodel en smeert alle gewenste functionaliteiten (use case, enz.) uit over de diverse objecten. DCI draait dit om, door te gaan werken op basis van actoren en de rollen die ze vervullen. De rollen worden dan composities van functionaliteit die vervuld kunnen worden door een actor. Feitelijk komt het neer op het inverteren van je interfaces. Naar binnen in plaats van naar buiten. Om terug te grijpen naar de term DCI, de context van data bepaald de interactie.

Dit concept is behoorlijk nieuw en tamelijk haaks op huidige modellen. Het heeft wel veel potentieel, omdat de geschreven software veel dichter op het conceptuele model aansluit als dat een abstract model dat vaak doet. Code wordt gegroepeerd op basis van rollen en actoren. Dit kan zorgen voor beter leesbare code, betere onderhoudbaarheid en een beter vermogen om in te springen op veranderende klantwensen.

Er zijn helaas nog wel een aantal tamelijk grote problemen, zoals bijvoorbeeld het bewaren van state, persistentie en het beheren van contexten. Deze concepten zijn ruimschoots uitgedacht en uitgewerkt voor huidige Java software, maar zijn in hun huidige vorm niet geschikt voor een toepassing op DCI.

Aan het einde van de presentatie werd er geopperd dat dit model wel eens de opvolger zou kunnen zijn het huidge OOP model. Hoe dan ook, het is een bijzonder interessant concept.

JSR-299, Java Contexts and Dependency Injection aka Webbeans - Siarhei Dudzin

De volgende sessie werd gehouden door Siarhei Dudzin en betrof de JSR-299, Contexts and Dependency Injection for Java, voorheen bekend als Webbeans. Het doel van de JSR-299 is het 'gat' lijmen tussen de zogenaamde 'transaction tier' (EJB 3, JPA, JTA en JCA) en de 'web tier' (Servlets, JSP en JSF). De JSR-299 is afkomstig van Gavin King en leunt zwaar op concepten uit Google Guice en JBoss Seam. De focus ligt niet op het introduceren van een nieuw componenten model, maar op het uitbreiden van de huidige modellen. De volgende eigenschappen worden beschreven in deze JSR:

  • Krachtige lifecycle management voor stateful componenten, gebonden aan goed beschreven contexten.
  • Een typesafe aanpak voor Dependency Injection
  • Een event notification systeem voor interactie.
  • Een betere aanpak voor het toevoegen van interceptors aan componenten.
  • Een nieuw type interceptor: Decorator

Dit praatje was echt kurkdroog, maar desalniettemin erg interessant voor bijvoorbeeld complexe JSF projecten, waar doorgaans al snel een dikke brij spaghetti ontstaat door allerlei dependency problemen.

Na deze sessie was het tijd voor de lunch. 3 broodjes, een beker melk en snack verder was het tijd voor mijn eerste keynote van de dag: Mod4j

Mod4J - Jos Warmer

Jos Warmer presenteerde een interessant verhaal over Mod4j. Mod4j is een open source (open development) modelleer framework (Model Driven Framework). Mod4j maakt gebruik van diverse DSLs (Domain Specific Languages) om verschillende onderdelen van een software architectuur te modelleren en te genereren. Mod4j laat zich makkelijk uitbreiden met handgeschreven code. Mod4j is geïntegreerd in Eclipse en ondersteund Maven.

Momenteel zijn er een viertal DSLs te onderscheiden: Business Domain DSL, Service DSL, Data Contract DSL en Presentation DSL. Elke DSL is toegespitst op een specifiek architectureel probleem en is eenvoudig en eenduidig in het gebruik. De onderlinge DSLs hebben geen mooie grafische diagrammen, maar wel een zeer goed leesbare syntax.

De DSLs kunnen onafhankelijk of gemengd gebruikt worden, waarbij volledige validatie mogelijk is op basis van een inter-DSL techniek genaamd CrossX.

Het grotere idee achter Mod4j is dat er een breed scala aan DSLs komen die naadloos samenwerken op basis van CrossX om zo maximaal inzetbaar te zijn.

De presentatie was overtuigend, maar helaas was er geen live demo. Dat had toch wel het toefje slagroom geweest.

Multi agent ontwikkeling in Java: A best practice case: Transportplanning - Arthur Oink

Na de interessante sessie over Mod4j ben ik gaan zitten bij de sessie Multi agent ontwikkeling in Java: A best practice case: Transportplanning. In deze sessie demonstreerde Arthur Oink een multi-agent implementatie in Java op basis van Jade.

In deze implementatie werd een logistiek transport opgelost op basis van agents. In zijn systeem ligt de focus met name op communicatie en niet zo zeer op optimalisatie. Door elke truck en order als agent te modelleren komen deze agents samen op basis van diverse criteria uit op een zo effectief mogelijke oplossing. Om het proces te visualiseren was er een GWT applicatie omheen gebouwd.

Een dergelijk probleem oplossen met agent technologie is erg krachtig en toepasbaar op diverse logistieke problemen en waarschijnlijk ook geschikt om nog veel andere soorten problemen op te lossen.

REST, het web als database? - Andrej Koelewijn, Ron van Weverwijk

Deze sessie ging over REST als architectuur en niet zozeer over hoe REST te implementeren. REST wordt door velen gezien als een broertje van SOAP. Deze sessie bracht duidelijk naar voren dat REST een architectuur op zich is en net als message-queuing en RPC/SOAP een belangrijk middel bij integratie-vraagstukken. Een van de belangrijkste kenmerken van REST is het beschouwen van diverse data-formaten als resources en ze via een uniforme manier benaderen.

De basis van een goede REST implementatie werd als volgt beschreven:

  1. Geef alle objecten een ID. Gebruik deze in een eenduidige URI.
  2. Benader afhankelijkheden via een (REST) URI, sla ze dus niet zelf op.
  3. Gebruik standaard http methods GET, POST, PUT en DELETE als de interface van objecten.
  4. Stel je data in verschillende formaten beschikbaar. (b.v.: JSON, XML of HTML)
  5. Communiceer stateless.

Na een aantal praktische voorbeelden werd aandacht geschonken aan de mogelijkheden die REST in de toekomst zou kunnen bieden. Als mensen al hun interessante informatie aan zouden bieden op het internet in XML formaat (of een ander praktisch formaat) zou in combinatie met geschikte query-talen, zoals bijvoorbeeld XQuery of Yahoo Query Language het gehele web als database uitgelezen kunnen worden. Combineer dit met bijvoorbeeld RDF om de data van semantiek te voorzien en dit zou wel eens het web naar het volgende niveau kunnen tillen.

Tijd voor mijn laatste presentatie van de dag:

De toekomst van Java 7 - Stephan Oudmaijer, Roy van Rijn

Java 7 stond voor deze presentatie op het menu. Stephan Oudmaijer en Roy van Rijn gaven het publiek tekst en uitleg over interessante nieuwe features van Java 7. Opvallend aan het verhaal was dat Java 7 geen spec heeft en het derhalve nog niet vast staat wat er zoal toegevoegd gaat worden. De volgende verandering aan de taal zelf zijn bijzonder waarschijnlijk:

Safe/ Final rethrow

Momenteel is het niet mogelijk om een throwable op te gooien zonder te speciferen dat de betreffende methode een Throwable op gooit:

Om dit wel mogelijk te maken wordt er gedacht aan het toevoegen van een final key

	try { 
		doable.doIt();  // Gespecificeerd om diverse Exceptions op te gooien 
	} catch (Throwable ex) { 
    		logger.log(ex); 
    		throw ex;  	// Zal niet compileren tenzij methode ook een Throwable  
				// op gooit. 
	} 

word om ervoor te zorgen dat alleen checked exceptions uit het try block hoeven worden te gedefinieerd:

	try { 
	    	doable.doIt(); 
	} catch (final Throwable ex) { 
    		logger.log(ex); 
    		throw ex; 
	} 

Multi-Catch

Om de mogelijk te bieden om meerdere exceptions in 1 catch blok af te vangen

	try{ ... } 
	catch(X1, X2 e){ foo(); } 
	catch(X3     e){ bar(); } 

Nullsafe

Het toevoegen van een operator '?' om de null check te ondervangen.:

	public String getPostcode(Person person) { 
		return person?.getAddress()?.getPostcode();   
	} 
	return null; 

Elvis operator

Een verkorte notatie voor de ternaire operatie door null-checks te vereenvoudigen met behulp van een nieuwe operator '?:'

	String displayName = (user.getName() != null) ? user.getName() :
"Anonymous";

wordt:

	String displayName = user.getName() ?: "Anonymous"; 

Type inference

Betere type inference om zo de code weer een beetje schoner te krijgen

	Map<String, List<String>> anagrams = new HashMap<String, List<String>>(); 

wordt:

	Map<String, List<String>> anagrams = new HashMap<>();    

Strings in switch statements

Het toelaten van een string in als case in een switch statement

Collection[], [] voor elke collectie

Elke collectie kunnen benaderen via de [] notatie

Verder werd er nog ingegaan op een aantal belangrijke API updates, waaronder:

  • NIO2, nieuwe praktische filesystem API
  • De huidige filesystem API's in Java blinken uit in inconsistentie, de nieuwe NIO2 API moet dit allemaal gelijk trekken.

JSR-308, Type annotations

Een verrijking op het Annotatie systeem, zodat het mogelijk is annotaties op types te definiëren, bijvoorbeeld: List<@NonNull Object>

JSR-310, een nieuwe date en time API gebaseerd op JodaTime

Wie ooit eens datum/tijd operaties in Java heeft uitgevoerd, weet wat een drama dit is. JodaTime is hier een uitstekend alternatief voor en binnen afzienbare tijd dus ook beschikbaar in Java

JSR-294 aka Superpackages

Deze JSR heeft een sterke relatie met JSR-277, waarbij JSR-277 zich richt op deployment en packaging en JSR-294 zich met name richt op de API modulariteit tijdens ontwikkelen.

Een van de voornaamste vragen bij JSR-294 was waarom het wiel opnieuw uitvinden als OSGi reeds een zeer krachtige oplossing biedt.

Samengevat een leuke sessie om een beeld van de vernieuwingen en verbeteringen in Java 7 te vormen.

Conclusie

De J-Spring 2009 was in mijn opzicht een geslaagde dag met uitstekende sessies op niveau. De sessie over DCI heb ik persoonlijk als meest vernieuwend en informatief ervaren. Dit onderwerp was zoals Serge Beaumont al aangaf 'Way out there', maar biedt wel enorm veel perspectieven met betrekking tot software ontwikkeling in de toekomst. De presentatie over Mod4j was bijzonder informatief en het open sourcen zou wel eens kunnen leiden tot een opleving van Model Driven Design.

Aan het einde van de werd de Dalek verloot en Wouter Flikweert was de gelukkige winnaar.


Wouter Flikweert samen met de Dalek

Afsluitend werd ik vriendelijk verzocht te assisteren bij de afbouw van de stand. Na wat goed teamwork ging ik in het heerlijk zonnetje weer op weg naar huis.

Referenties

Over de auteur
Barry van de Graaf is Java Consultant bij Whitehorses en heeft ruim 5 jaar ervaring in de IT. Zijn focus ligt op het gebied van webapplicaties in diverse Java frameworks, Ruby en Ruby on Rails applicaties. Tevens houdt hij zich druk bezig met het in praktijk brengen van Agile, Lean & Scrum.

Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.