Links

  • 1. Sogeti
  • 2. JBoss
  • 3. IBM
  • 4. Oracle
  • 5. SpringSource
  • 6. NL-JUG
  • 7. Java

Archives

Syndication  RSS 2.0

RSS 1.0
RSS 2.0

Bookmark this site

Add 'JCN Blog' site to delicious  Add 'JCN Blog' site to technorati  Add 'JCN Blog' site to digg  Add 'JCN Blog' site to dzone

Posted by Jaap Coomans at 12:51 on Saturday 14 June    Add 'Spring 2.5 on the way to 3.0' site to delicious  Add 'Spring 2.5 on the way to 3.0' site to technorati  Add 'Spring 2.5 on the way to 3.0' site to digg  Add 'Spring 2.5 on the way to 3.0' site to dzone

Deze sessie door Jürgen Höller gecombineerd met de keynote van Rod Johnson bood een mooi beeld van de kracht van Spring 2.5. Höller begint over wat algemene zaken zoals het feit dat dit de eerste versie van Spring is die volledig in Java 6 ontwikkeld is en dat het ook de eerste versie is met volledige support voor Java EE 5. Die laatste opmerking lijkt wat vreemd vanuit het oogpunt van Spring, maar het blijkt met name te gaan om het ondersteunen van API’s en de support voor de JSR-250: Common annotations. Read the rest of this entry »

Posted by Jaap Coomans at 11:36 on Saturday 14 June    Add 'SpringOne 2008: Startup' site to delicious  Add 'SpringOne 2008: Startup' site to technorati  Add 'SpringOne 2008: Startup' site to digg  Add 'SpringOne 2008: Startup' site to dzone

Het is iets voor achten in de ochtend en de ruis van het laatste Nederlandse radiostation heeft inmiddels plaatsgemaakt voor een Vlaamse zender. Om in ieder geval niet te laat te zijn voor de inschrijving en nog tijd te hebben om Jan-Hendrik te zoeken in de verwachtte mensenmassa ben ik maar extra vroeg afgerezen. Tot mijn grote verbazing rijd ik echter ruim anderhalf uur te vroeg diezelfde Jan-Hendrik bijna van zijn sokken op het parkeerterrein van Metropolis. Als een van de eersten staan we bij de receptie om te registreren. Read the rest of this entry »

Posted by Jan-Hendrik Kuperus at 14:25 on Monday 9 June    Add 'SpringOne 2008' site to delicious  Add 'SpringOne 2008' site to technorati  Add 'SpringOne 2008' site to digg  Add 'SpringOne 2008' site to dzone

Namens het JCN zullen Jaap Coomans en ik deze week op bezoek gaan bij de mensen van Spring. Woensdag 11 en donderdag 12 juni wordt namelijk de SpringOne conferentie gehouden in Antwerpen. We gaan daar met name onze oren en ogen openhouden voor alles dat te maken heeft met het nieuwe SpringSource Application Framework.

SpringOne 2008

–JH

Posted by Sander van Der Waal at 21:17 on Sunday 24 June    Add 'Spring & OSGi – walk the walk' site to delicious  Add 'Spring & OSGi – walk the walk' site to technorati  Add 'Spring & OSGi – walk the walk' site to digg  Add 'Spring & OSGi – walk the walk' site to dzone

De laatste OSGi-sessie van de dag was getiteld Hands-On Spring-OSGi
en werd door Martin Lippert gegeven. Het ‘hands-on’ moet erg letterlijk worden genomen: Martin had een stapel cd’s klaarliggen met software en iedereen kon op z’n laptop meetikken met zijn demo. Dat bleek een erg interessante en leerzame manier om zo’n sessie mee te maken. 

Op de cd had Martin Eclipse 3.3RC4 klaarstaan en een voorbewerkte workspace met een aantal standaard OSGi bundels om een Equinox OSGi framework te kunnen draaien met extra utilities. Verder had hij de laatste milestone van Spring-OSGi erin en wat extra classes die hij zelf van tevoren had gemaakt. Omdat ik zelf nog geen Eclipse 3.3 had geïnstalleerd moest ik ook met zijn zip werken en het nadeel was dat daar geen Spring IDE of zelfs maar een XML editor bijzat. Daardoor moest ik wat meer zelf doen, maar uiteindelijk kwam ik redelijk mee.

Het idee was om een nieuwe OSGi-bundel maken in de vorm van een Plugin-project. Eclipse biedt standaard vrij uitgebreide ondersteuning voor de ontwikkeling van nieuwe plugins en omdat een plugin feitelijk een OSGi-bundel is, kun je de wizards van het pluginproject ook daarvoor gebruiken. In Eclipse 3.3 zijn de tools voor plugin-projecten en het draaien van een OSGi-framework algemener gemaakt, zodat ook andere OSGi-frameworks kunnen worden gebruikt. Maar wij gingen een simpele mailservice ontwikkelen voor Equinox met een interface en implementatieclass. Daarna bouwden we een ApplicationContext.xml op die de server als OSGi service beschikbaar maakte in het framework. Deze regels zijn daarvoor voldoende:

<bean id="mymailservice" class="org.example.mailserver.internal.MailService" init-method="start" destroy-method="stop" />

<osgi:service ref="mymailservice" interface="org.example.mailserver.IMailService" />

Je definieert een instantie van de mailservice als bean met initalisatiemethoden. Vervolgens specificeer je een OSGi-service op basis van de interface die de bundel publiceert. Alleen de interface is buiten de bundel bekend en de implementatie kan niet van buiten benaderd worden.
We kregen deze implementatie goed werkend door gebruik te maken van de faciliteiten van Eclipse om een ‘OSGi framework’ run configuratie te definiëren. Toen dat werkte maakte we een mailservice user die van de mailserver-OSGi-service gebruik maakte. Ook dit alles is declaratief: je maakt een bean property op je mailserviceuser class en laat Spring de waarde injecteren. Zo ziet dat eruit in de ApplicationContext.xml:

<bean id="mymailuser" class="org.example.mailserviceuser.MailServiceUser" init-method="start" destroy-method="stop">
  <property name="myserver" ref="osgiMailServer" />
</bean>

<osgi:reference id="osgiMailServer" interface="org.example.mailserver.IMailService" />

Omdat je de interface van de mailserver gebruikt in je mail service user heb je twee mogelijkheden: je dupliceert de mailserver interface en stopt deze ook in de bundel van de mailservice user. Dan houd je in de user-bundel alle classes die je daar nodig hebt. Een andere optie is om een package-dependency te definiëren. Je geeft dan in je manifest-file aan dat je de package org.example.mailserver wilt importeren. Runtime gaat OSGi dan op zoek naar een bundel die deze exporteert. Ook dat specificeer je expliciet in je manifest-file.

Ook dit werkte probleemloos en daarna volgde nog een kleine demo over het toevoegen van een HttpService in OSGi. Er zijn meerdere implementaties van verschillende protocollen beschikbaar voor OSGi. Zo is de HTTP-server Jetty beschikbaar voor OSGi en deze wordt ook door Equinox gebruikt. Een beetje omgekeerde wereld: in plaats van de applicatie in een webcontainer te draaien draai je de httpserver binnen de applicatie. De demo van Martin liet zien dat het prima gaat.

Al met al was dit een erg interessante sessie om wat ervaring op te doen met de combinatie van Spring en OSGi in de praktijk. Op de Technische Meeting over SpringOne die volgt zal ik hier ook absoluut meer van laten zien!

Posted by Sander van Der Waal at 20:59 on Sunday 24 June    Add 'Spring & OSGi – talk the talk' site to delicious  Add 'Spring & OSGi – talk the talk' site to technorati  Add 'Spring & OSGi – talk the talk' site to digg  Add 'Spring & OSGi – talk the talk' site to dzone

De derde dag van SpringOne was voor mij een OSGi-dag. OSGi was de aanleiding voor mij om de SpringOne te willen bezoeken ik verwachtte hier dan ook veel van. De sessies over OSGi waren ook erg interessant en het Spring-OSGi project ziet er veelbelovend uit. De eerste hands-on ervaring liet zien hoe transparant je met Spring-OSGi een OSGi-applicatie kunt ontwikkelen.

Allereerst was er de sessie OSGi, a New Foundation for Enterprise Apps
gepresenteerd door Adrian Colyer en Costin Leau. In een volgepakte bioscoopzaal begon Adrian met een introductie van wat OSGi nu eigenlijk inhoudt. In de laastste JCN-nieuwsbrief heb ik daar ook al een beeld van proberen te schetsen. Kort gezegd is het een ‘Dynamic Module System’. Een Module System, omdat de applicaties die in een OSGi-framework draaien zijn opgebouwd uit componenten. Dynamisch, omdat componenten runtime kunnen verschijnen en verdwijnen terwijl de applicatie blijft draaien. De afhankelijkheden tussen de componenten op package-niveau wordt expliciet gemodelleerd in de manifest-file van de jar-file. Een component, bundel in OSGi-termen, is feitelijk een ‘plain old’ jar file met wat extra informatie in de manifest-file. Daarnaast kunnen bundels van elkaars services gebruik maken via de OSGi service registry. Een service in OSGi-termen kan een gewone interface zijn, die door een andere bundel wordt aangeboden.

Na de uitleg van Adrian ging Costin Leau dieper in op het Spring-OSGi project. Het doel van dit project is om het makkelijker te maken om applicaties te bouwen en te kunnen deployen op een OSGi platform. Het mooie van het Spring-OSGi project is dat je in de code niet expliciet rekening hoeft te houden met het feit dat de applicatie op OSGi gaat draaien. Normaal gesproken moet je bij OSGi via de Java-code je services registreren in de service registry en ook via deze registry vraag je services op die je wilt gebruiken in je bundel. Spring-OSGi maakt het mogelijk om al deze administratieve handelingen via de gebruikelijke Spring-methode van Dependency Injection te specificeren. Wat je wel in je applicatie nog moet doen, is bepalen in welke componenten je je applicatie onderverdeelt en hoe deze samenhangen. Maar dat is feitelijk onderdeel van een goed modulair design, en je beperkt daarmee je applicatie niet tot het OSGi-platform. Je kunt namelijk met een andere Spring-specificatie (ApplicationContext.xml) dezelfde componten deployen op een Java EE-omgeving.

De volgende sessie die ik volgde ging over Spring and Eclipse RCP, gegeven door  Martin Lippert. Het Eclipse Rich Client Platform is een gestripte versie van Eclipse (of eigenlijk andersom) en kan gebruikt worden voor de ontwikkeling van client-applicaties. Omdat het Eclipse RCP draait op een implementatie van OSGi, Equinox genaamd, draait daarmee elke Eclipse RCP applicatie op OSGi. Een van de meest aansprekende voorbeelden van gebruk van het Rich Client Platform was het platform dat NASA heeft gebaseerd op Eclipse RCP. Binnen NASA worden nu veel nieuw te ontwikkelen applicaties hierop gebouwd.

De kern van Martins presentatie bestond uit het demonstreren van wat je met Spring kon doen in combinatie met Eclipse RCP. Hij liet daartoe een demo zien van een Eclipse RCP applicatie die gebruik maakte van Spring-OSGi. Vervolgens maakte hij een corresponderende serverapplicatie, die via Spring-remoting kon worden aangeroepen.
Op deze server maakte hij ook gebruik van Spring-OSGi. Uit deze sessie bleek de combinatie van Spring-OSGi op het Eclipse RCP erg goed te werken. Omdat het Eclipse RCP gebaseerd is op OSGi sluit het naadloos aan. Daarnaast viel het me op dat je bij Eclipse RCP al erg veel cadeau krijgt op het gebied van inrichting van de GUI en een behoorlijk uitgewerkt en toch clean framework. Zeker leuk om nog eens naar te kijken!

Posted by Sander van Der Waal at 11:09 on Friday 22 June    Add 'Nieuw in Spring 2.1' site to delicious  Add 'Nieuw in Spring 2.1' site to technorati  Add 'Nieuw in Spring 2.1' site to digg  Add 'Nieuw in Spring 2.1' site to dzone

Met enige vertraging (de sessie was eigenlijk voor de eerste dag gepland) liet Jürgen Hüller op dag 2 zien wat er allemaal voor Spring 2.1 op de rol staat. In het kort vooral heel veel ondersteuning voor nieuwe(re) specificaties.

Wat deployment betreft is er in Spring 2.1 ondersteuning voor Java EE 5, JDK 1.6, IBM gecertificeerde ondersteuning voor WebSphere 6.0.x en 6.1.x en support voor het gebruik van Spring op een OSGi-omgeving. Deze versie zal geen ondersteuning meer bieden voor J2EE 1.3, maar J2EE 1.4 wordt nog wel volledig ondersteund.
De nieuwe API’s die hiermee ondersteund worden zijn onder meer JDBC 4.0, JMX MXBeans, de JDK ServiceLoader API, Servlet 2.5, JSP 2.1, JSF 1.2, JTA 1.1 en JavaMail 1.4. Support voor JPA is uitgebreid zodat nu de EntityManagerFactory via JNDI kan worden betrokken van de Java EE 5 server.
Daarnaast is het met Spring 2.1 mogelijk om je datasources met ra.xml die verwijst naar je ApplicationContext te deployen als aparte RAR file (vanaf J2EE 1.4). Ondersteuning voor het draaien onder OSGi moet zo worden dat je niet expliciet tegen OSGi aan hoeft te programmeren maar dat build-time de afhankelijkheid van het deployment platform wordt geïntegreerd. Daar hoop ik vandaag meer over te weten te komen.

Verder wordt er weer erg veel gedaan op het gebied van annotations. Zo is er ingebakken ondersteuning voor JSR-250 – Common Annotations. Hierin worden onder andere annotations gedefinieerd zoals @PostConstruct en @PreDestroy. Die doen feitelijk wat de naam zegt: wanneer je deze toevoegt aan een methode wordt deze aangeroepen op het juiste moment. @Resource met eventueel een naam gespecificeerd kun je gebruiken om datasources te koppelen.

Tenslotte zal Spring 2.1 verbeterde ondersteuning bieden voor XML namespaces. Deze in Spring 2.0 geïntroduceerde namespaces zorgen ervoor dat je XML er een stuk cleaner uitziet: je hebt geen <bean>-tags all over the place om te configureren wat er allemaal moet gebeuren, maar bijv. voor een annotatiegedreven transactie kun je simpelweg <tx:annotation-driven /> gebruiken. Uiteraard kun je de dan gebruikte defaults overschrijven met extra attributen. Voor Spring 2.1 komen er nieuwe namespaces voor o.a. context configuratie en jms-messaging.
Een allerlaatste nieuwe feature is verdergaande integratie met AspectJ waarbij je automatisch wel of niet je beans kan laten scannen op AspectJ pointcuts.
Als je hier meer over wilt weten biedt de Spring website uitkomst.

Posted by Sander van Der Waal at 16:40 on Thursday 21 June    Add 'Spring in complexe applicaties en omgevingen' site to delicious  Add 'Spring in complexe applicaties en omgevingen' site to technorati  Add 'Spring in complexe applicaties en omgevingen' site to digg  Add 'Spring in complexe applicaties en omgevingen' site to dzone

Vanmorgen hebben we een sessie bezocht over het gebruik van Spring in complexe omgevingen, getiteld Spring Beyond the Obvious – using Spring in complex enterprise projects. Het was een interessante presentatie die was ingedeeld in twee stukken. Allereerst werd besproken op welke manieren je de (Spring)configuratie kunt regelen bij het deployen van een applicatie (ear) bestaande uit meerdere war-files en meerdere jar-files die al dan niet gedeeld moeten worden door de webapplicaties.

Om het mogelijk te maken om objecten te delen uit een jar-file tussen verschillende webapplicaties kun je in de Springconfiguratie gebruik maken van de hiërarchie van ApplicationContexts. Als je niets expliciet configureert dan laden beide webapplicaties namelijk de classes in hun eigen classloader en creëeren ze hun eigen instanties. (Hierbij dient aangetekend te worden dat dit afhankelijk is van de strategie van de container en vaak kun je dit ook via settings beïnvloeden, maar daar ging deze sessie niet over.) Spring Context hierarchyOm te zorgen dat beide ApplicationContexts van de war’s dezelfde instantie van de class gebruiken (= zelfde Spring-bean) kun je echter de te delen instantie definiëren in de RootApplicationContext (zie plaatje). Vervolgens kun je vanuit de beide web.xml’s refereren naar deze bean en daarmee hebben beide applicaties een referentie naar hetzelfde object.

Vervolgens werd ingegaan op de uitdaging van portabiliteit: hoe zorg je ervoor dat je applicatie zonder wijzigingen in de build door de OTAP-straat komt? In de verschillende omgevingen heb je vaak referenties naar andere DataSources, LDAP en JNDI die wel of niet beschikbaar is, enzovoort. Een van de mogelijke oplossingen hiervoor ligt in manier waarop de Spring configuratie is opgebouwd. Hierbij is er een basis configuratie die voor elke omgeving hetzelfde is. Daarnaast wordt er voor elke omgeving een aparte resourcefolder gemaakt met omgevings-specifieke Spring configuratie xml’s. Wanneer deze op het classpath ná de algemene configuratie locatie wordt geladen, overschrijft deze de eerdere configuratie. Vervolgens wordt de ContextLoader overschreven, waarbij via een system-property wordt uitgevraagd in welke omgeving de applicatie wordt gestart (aldus gespecificeerd bij startup). Daarna worden de xml-files uit de corresponderende map toegevoegd aan het eind van de classpath om op die manier te zorgen dat de configuratie van de specifieke omgeving wordt geladen.

Al met al was dit een van de sessies waarbij we meer concrete handvatten aangereikt kregen voor het oplossen van herkenbare problemen.

Posted by Sander van Der Waal at 21:51 on Wednesday 20 June    Add 'SOA met inhoud' site to delicious  Add 'SOA met inhoud' site to technorati  Add 'SOA met inhoud' site to digg  Add 'SOA met inhoud' site to dzone

Als afsluiter van de eerste dag gingen we naar een sessie van Arjen Poutsma, getiteld Pragmatic SOA – Substance, not hype. Hij gaf een benadering van wat het ‘meest gehate buzzword van 2006′ nu eigenlijk inhoudt. En dit was een verhelderende kijk wat mij betreft. Vanuit een blik op de geschiedenis, waar men in de jaren 50 al bezig was met hergebruik van software, werkte hij toe naar een definitie van SOA waarbij de belangrijkste eigenschappen werden opgesomd:

  • Reuse
  • Granularity
  • Composibility

Als praktijkvoorbeeld gebruikte hij een aanvraagformulier voor vakantieverlof, wat je op papier invult, laat tekenen en vervolgens bij de HR-afdeling afgeeft. Dat is waar wat Arjen betreft de aspecten van een SOA terugkomen: de HR-afdeling representeert de service en de medewerkers die verlof aanvragen zijn de componenten die van de service gebruik maken.

Vervolgens gaf Arjen een overzicht van de manier om SOA in te zetten. De webservices van WS-* werden genoemd, waarbij de plaat getoond werd met het hele scala aan beschikbare services (onlangs ook op de JCN Linkblog voorbijgekomen). Hij was niet enthousiast over SOAP over HTTP, omdat wat hem betreft HTTP niet geschikt is voor SOA-achtige services. Hij vindt dat services binnen SOA vooral asynchroon dienen te zijn, waar HTTP uiteraard niet op is ingesteld. De organisaties die met de specificatie van SOAP bezig zijn werken er ook naartoe om HTTP meer generiek aan een mogelijk transportmiddel te zien.
Vervolgens kwam REST aanbod, een methode waar ik zelf weinig van wist maar waar Arjen erg enthousiast over was. Hij gaf een voorbeeld van REST waarbij de methodes PUT, POST, GET en DELETE werden gedefinieerd om remote op resources bewerkingen uit te voeren. Het leek me een vrij beperkte methodes om services te definiëren. Ten slotte werden ESB’s en tooling kort en globaal besproken.

Aan het einde van de sessie kwam wat mij betreft de grootste waarheid. Volgens Arjen bestaat de grootste uitdaging van het inzetten van SOA in de menselijke, of in ieder geval niet-technische, kant. Technisch kunnen we het allemaal best voor elkaar krijgen. Er is echter een belangrijke rol voor de architect weggelegd. Die moet het overzicht bewaren en zorgen dat er binnen de organisatie goede business services worden gedefinieerd die breed inzetbaar zijn. Developers zullen meer en meer werken aan een gedeelte van applicaties en in mindere mate het grote plaatje kunnen blijven zien.

Posted by Sander van Der Waal at 13:49 on Wednesday 20 June    Add 'Keynote Rod Johnson : .NET, I21-ontwikkelingen en toekomst voor Spring' site to delicious  Add 'Keynote Rod Johnson : .NET, I21-ontwikkelingen en toekomst voor Spring' site to technorati  Add 'Keynote Rod Johnson : .NET, I21-ontwikkelingen en toekomst voor Spring' site to digg  Add 'Keynote Rod Johnson : .NET, I21-ontwikkelingen en toekomst voor Spring' site to dzone

Rod Johson, CEO van Interface21, begon zijn keynote opvallend door voor een zaal met Javanen een demo te laten zien van Spring .NET. Hierin werd gedemonstreerd dat met een ApplicationContext.xml die vrij identiek is aan die voor Java (replace bean: object & class:type) ook een .NET applicatie kunt configureren. Ook een variant op AOP wordt momenteel ontwikkeld voor .NET. Wellicht dat deze ontwikkeling nog gunstig kan bijdragen aan een betere integratie tussen .NET en Java applicaties.

Verder ging Rod in op het toenemende gebruik van Spring als alternatief of in combinatie met een J2EE server. Zo zitten ze inmiddels in de afrondende fase van certificering van Spring onder WebSphere en wordt Spring o.a. gebruik in de nieuwste versie van BEA WebLogic. Rod liet nog iets zien van de nieuwe BEA Event Server die momenteel wordt ontwikkeld om verdergaande integratie van Java applicaties mogelijk te maken. Hierbij zal de focus liggen op applicaties die een hoge transactiesnelheid en -volume vereisen.

Het was wel grappig om te zien dat Rod enerzijds vertelde over hoe steeds meer Fortune500 bedrijven Spring gebruiken, terwijl hij ook al het nieuwe (niet-technische) personeel dat dat jaar was aangenomen bij Interface21 één voor één ging voorstellen. Hij legde er de nadruk op dat ze nu de markt op een meer traditionele manier gingen benaderen om verdere groei mogelijk te maken. Dit in tegenstelling tot de technology-push waarmee ze tot nu toe groot geworden zijn.

Daarna bezochten Peter en ik de sessie over Improving application design with a rich domain model, waarover later meer.

Vanmiddag bezoeken we onder meer nog sessies over Service Component Architectures and Spring, en Pragmatic SOA – Substance, not hype.

Posted by jcn at 8:48 on Tuesday 12 June    Add 'SpringOne 2007' site to delicious  Add 'SpringOne 2007' site to technorati  Add 'SpringOne 2007' site to digg  Add 'SpringOne 2007' site to dzone

Van 20 t/m 22 juni wordt voor de 2e keer de SpringOne conferentie georganiseerd. Namens het JCN gaan Peter van de Berkmortel en Sander van der Waal SpringOne 2007 bezoeken. Hun verslag zal op deze blog te lezen zijn.

Een aantal van de sessies:

Meer sessies zijn te vinden op de conferentie pagina.


© 2018 Java Competence Network. All Rights Reserved.