Thijs Volders, ICEFaces

ICeFaces is beschikbaar gekomen in het GlassFish v2 update center. IceFaces is de nieuwe Woodstock JSF libary welke gebruik maakt van AJAX Push mogelijkheden.

Het GlassFish update center is op te starten m.b.v :

./updatecenter/bin/updatetool

vanuit de GlassFish installatie directory.

Kijk op de volgende websites voor meer informatie:

ICEsoft picks up Project Woodstock

Ted Goddard on Ajax development with ICEfaces


Thijs Volders, jBoss

Veelal wordt een HTTPS verbinding in webapplicatie gebruikt om bepaalde content af te schermen voor onbedoelde lezers.
In de webserver configuratie kan worden afgedwongen dat deze ‘paginas’ middels HTTPS moeten worden benaderd en eventueel wordt hiervoor automatisch een redirect van HTTP naar de HTTPS variant geregeld.

Een ontwikkelaar heeft vaak geen webserver op zijn ontwikkelmachine beschikbaar, danwel is het inregelen van de configuratie teveel werk voor wat het oplevert.
De meeste applicatieservers hebben de mogelijkheid om zelf als (al dan niet beperkte) webserver te fungeren.

In bijvoorbeeld JBoss is het mogelijk om de webserver configuratie aan te passen zodat deze ook met HTTPS verkeer kan omgaan. Hieronder staat beschreven hoe:

* Voer het volgende commando uit: keytool -genkey -alias jboss -keyalg RSA -keystore ./jBossKeystore
Er zal gevraagd worden om een keystore password. Onthoud dit wachtwoord,het wordt later gebruikt.
Vul de opvolgende vragen in en houdt het key wachtwoord hetzelfde als de keystore.

* Het resultaat van de keytool is een bestand met de naam jBossKeystore. Kopieer dit naar de conf directory van de jboss instantie waar HTTPS beschikbaar gemaakt moet worden, bijvoorbeeld [jBoss server locatie]/conf

* De volgende stap is het wijzigen van de server.xml, deze staat waarschijnlijk in [jBoss server locatie]/deploy/jboss-web.deployer
Zoek in het server.xml bestand naar de Connector definitie waar port 8443 gedefinieerd is.
Haal de commentaarmarkering voor deze Connector weg en voeg de volgende attributen toe:

keystoreFile=”${jboss.server.home.dir}/conf/jBossKeystore”
keystorePass= Vul hier het wachtwoord van de keystore in zoals die is gebruikt in de keytool!

Sla de wijzigingen in de server.xml op en herstart de jBoss instantie.

* Open een browser en ga naar een applicatie binnen de jBoss instantie gebruikt makende van HTTPS.
De browser zal een melding geven van een onvertrouwd certificaat. Accepteer het certificaat om dit stappenplan te voltooien.

Let op:
Om bandbreedte te besparen en om performance redenen kan ervoor gekozen zijn om op de productieomgeving het verkeer tussen de webserver en de applicatieserver niet over HTTPS te laten plaatsvinden. Dit heeft als consequentie dat de HttpServletRequest.isSecure() methode niet het verwachte resultaat zal opleveren.

Gelukkig heeft Apache hiervoor een oplossing in de vorm van het toevoegen van HTTPHeader informatie richting de applicatieserver. Bijvoorbeeld een X-Forwarded-Port kan worden gebruikt om aan te geven over welk portnummer de gebruiker de applicatie heeft benaderd. Indien de gebruiker met HTTP de applicatie benaderd dan zal dit portnummer 80 zijn, indien de gebruiker over HTTPS de applicatie benaderd dan zal dit 443 zijn.

Vraag bij de administrator van dewebserver en/of de applicatieserver na hoe deze communicatie geregeld is!


Thijs Volders, J2EE Open Source

Hibernate biedt de mogelijkheid om een type-conversie te doen tussen database kolom-typen en de persistent object veld-typen m.b.v. UserTypes.

In JPA werkt de typeconversie anders.
JPA biedt twee annotaties die hierbij kunnen helpen, te weten @PrePersist en @PostLoad.

Deze annotaties worden respectievelijk voor het persisteren en na het ophalen van de entiteit uitgevoerd. Door deze annotaties te gebruiken wordt het mogelijk om bijvoorbeeld een database veld met type Integer naar de buitenwereld als String beschikbaar te stellen.

Een voorbeeld:

@Entity
@Table()
public class Voorbeeld {
@Id
private int id;

@Column
private Integer Bsn_internal;

private String Bsn;

public String getId() { return id; }
public String getBsn() { return Bsn; }
public void setBsn(final String argBsn) { this.Bsn = argBsn; }

@PrePersist
private void prepersist() {
this.Bsn_internal = Integer.parseInt(this.Bsn);
}

@PostLoad
private void postLoad() {
this.Bsn = this.Bsn_internal.toString();
}
}

In bovenstaand voorbeeld is te zien dat er een interne vorm van de kolominhoud wordt vastgehouden (Bsn_internal). Deze waarde wordt nooit aan de buitenwereld gegeven.
De interface om het Bsn te bewerken en opvragen is via de getter/setter van Bsn.

De prepersist method zorgt ervoor dat de aangepaste Bsn waarde wordt overgezet naar Bsn_internal voordat de entiteit ge-persist wordt. De postload zorgt ervoor dat bij een update van de entiteit automagisch de Bsn wordt bijgewerkt.

Dit voorbeeld houdt geen rekening met mogelijke problemen bij het parsen van de Integer. De ontwikkelaar dient ervoor te zorgen dat foutafhandeling wordt verzorgt.