mercredi 19 décembre 2007

Exit Redhat Developer Studio

A peine le temps d'essayer Redhat Developer Studio, de passer de la version bêta à la candidate release 1, le produit s'appelle maintenant JBoss Developer Studio, il est devenu payant (99$).

Cependant, tous les composants restent gratuits, on peut facilement les assembler manuellement, et malgré la baisse du dollar, c'est encore intéressant de gagner 99$ en 15 minutes. De plus, la procédure décrite ci-dessous permet de mettre à jour une installation d'Eclipse déjà existante, et aussi de remplacer la version des JBossTools par un version plus récente, ou de partager une installation des JBossTools par plusieurs installations d'Eclipse.
Téléchargez Eclipse Europa
dézippez cette archive dans un répertoire <eclipse>

Téléchargez JBossTools-2.0.0
dézippez cette archive dans un répertoire <jbosstools>

Téléchargez JBoss 4.2.2
dézippez cette archive dans un répertoire <jbossas>

Installez Eclipse
Eclipse est déjà installé dans le répertoire <eclipse> sans opération supplémentaire.

Installez JBossTools
Dans <jbosstools>\eclipse, créez un fichier nommé .eclipseextension
(sous windows, dans une console msdos, tapez: echo "" > .eclipseextension)
Démarrez Eclipse
menu Help/Software Updates/Manage Configuration/Eclipse Platform/Add/Extension Location
choisissez le répertoire <jbosstools>\eclipse
Relancez Eclipse, les jboss tools sont installées.

Installez JBoss 4.2.2
exemple: si <jbossas> est E:\dev\java\jbossas, le serveur sera ici: E:\dev\java\jbossas\jboss-4.2.2.GA
Déclarez le serveur dans Eclipse:
Window/Preferences/Server/Installed Runtimes/Add/JBoss v4.2
Next/Application Server Directory=<jbossas>\jboss-4.2.2.GA

Afficher la console JBoss:
Window/Show View/Server/JBoss Server View

Sauvegarder cette console
Window/Save Perspective as...

Dans la console, bouton droit/New Server/JBoss AS 4.2
Next/Home Directory/<jbossas>\jboss-4.2.2.GA
Configuration:default
Next/next/Finish
Bouton droit sur le serveur ainsi créé/start
Ouvrez un navigateur à l'adresse http://localhost:8080/ pour constater le bon fonctionnement du serveur.

Créez un projet jsf
File/New/Other/JBoss Tools Web/JSF/JSF project
Project Name:jsftest
JSF Environement: JSF 1.2
Template: JSFKickStartWithoutLibs
Next/Finish

Racine du projet jsftest/clic droit/Run As/Run on server
On doit voir une page Hello Demo Application dans le navigateur.

Attention, lorsqu'on modifie du code java, il faut redéployer l'application. Dans l'onglet JBoss Server View, deuxième volet, modules/[nom du projet], bouton droit sur Full Publish

P-S
Après enquête approfondie, Redhat Developer Studio est encore disponible gratuitement ici.
P-P-S
Pour utiliser VisualEditor (développement swing et swt) pourtant notoirement incompatible avec Europa, installez le plugin modifié ici.

jeudi 29 novembre 2007

Android

Android est une plate-forme de logiciel mobile basée sur Linux, promue par Google et l'Open Handset Alliance, consortium qui rassemble 34 industriels.
L'ensemble du modèle est open-source (licence Apache 2).
Le kit de développement est disponible.
Les applications sont développées en java. En effet, l'api J2ME a été portée sur Android, la machine virtuelle n'est pas une JVM mais une VM spécifique nommée Dalvik, ce qui permet à Google de contourner la licence protégeant J2ME.
Un émulateur Windows/Mac/Linux est disponible.
Sans préjuger des batailles juridiques qui semblent inévitables, Google Android Challenge est un concours qui récompense les meilleures applications sur la plate-forme Android. Une somme de 10 millions de dollars est annoncée par Google.
A vos claviers!


lancement d'un kit pour développeurs
dicodunet
android-after-all
openhandsetalliance.com
googleblog.blogspot.com
Dalvik: how Google routed around Sun's IP-based licensing restrictions on Java ME

jeudi 22 novembre 2007

Java Enterprise Edition

Objectif
Se former sur les technologies web en java
Modalités
Ratio:
30% de théorie - 70% de pratique
Outils utilisés:
Eclipse, Netbeans, Jboss
Durée:
32 heures
Evaluation:
par binôme, dossier de projet et démo lors de la dernière séance.
Cours
Les technologies JEE5
TP

  • Appréhender les outils de développement
  • Appréhender les technologies jsp-servlet-jsf-jpa etc...
  • Rédiger une spécification fonctionnelle simplifiée
  • Concevoir un modèle métier simplifié (6 classes)
    • Banque
    • Client
    • Compte
    • Compte-epargne
    • Compte-courant
    • Ville
  • Implémenter les classes
  • Réaliser des jeux de test unitaire
  • Concevoir l'architecture technique (serveur web)
  • Réaliser le serveur web
  • Concevoir l'interface utilisateur
  • Choisir la technologie de persistance des objets métier
  • Coder les classes d'accès aux données
  • Intégration et tests
Supports de cours
introduction.ppt
jee5-jsp.ppt
jee5-jsf(1).ppt
jee5-jsf(2).ppt
Supports de tp
tp1: jee-servlet
tp2: jee-jsf
tp3: convertisseurs-validateurs-événements
tp3: bis valuechangelistener et cycle de vie
tp4: modèle du domaine avec de simples beans: Application bancaire
tp5: crud: navigation dans le modèle et mise à jour des données
tp6: base de données relationnelle Hypersonic
tp7: a) jdbc, introduction au mapping objet-relationnel
tp7: b) JBoss et sa base de données interne Hsqldb
tp8: mise en oeuvre de JPA (Java Persistence Api)
tp10: modèle du domaine simplifié
tp12: modèle du domaine simplifié (jpa+hibernate+dao+web)
Corrigés de tp
tp2: datatable, formulaire
tp3a: convertisseurs, validateurs
tp3b: listeners, lifecycle
tp3b: v2 listeners, lifecycle
tp4: modèle du domaine avec de simples beans: Application bancaire
tp5: crud
tp8: mise en oeuvre de JPA
tp10: v1 - modèle du domaine simplifié (simples javabeans)
tp10: v2 - modèle du domaine simplifié (jpa+hibernate)
tp11: modèle du domaine simplifié (jpa+hibernate+web)
tp11: modèle du domaine simplifié (jpa+hibernate+web sans libs)
tp12: modèle du domaine simplifié (jpa+hibernate+dao+web)

MyFaces
tp JBoss-MyFaces
tp MyFaces-exemples
Bibliothèques JEE
hibernate
hsqldb

TP: Crud Create-Retrieve-Update-Delete


Architecture
L'application est vue comme un modèle de données du domaine fortement structuré et typé et couplé.

Cette couche métier à caractère statique côtoie une couche d'interface utilisateur (swing, html, jsp, dans notre cas jsf), ainsi qu'une couche applicative constituée par les contrôleurs, à caractère dynamique.

Ce modèle du domaine est bien découplé des deux autres couches, ainsi que des couches techniques (persistance par exemple).

Dans le cas où le modèle est connecté avec un ou plusieurs modèles externes, cette connection s'effectuera au travers d'une API consitutée d'interfaces.

Les classes métier comportent des règles-métier de base (l'âge d'un personne ne peut être négatif....)
Les contrôleurs comportent des règles métier applicatives (on ne peut changer de département pour telle adresse, le solde du compte ne peut être inférieur à une limite autorisée).

Développer une application revient à concevoir et à coder le modèle statique, la mécanique navigationnelle (Crud = create-retrieve-update-delete), les règles de gestion et les exceptions-métier, l'interface utilisateur, après avoir choisi une infrastructure technique (jsf dans notre cas) et une solution de persistance du modèle (jdbc, hibernate, ejb, etc...), conformément aux spécifications fonctionnelles qui auront été rédigées pour satisfaire le besoin.

Organisation du code

La première tâche est de structurer le projet.
Les classes de l'application se situent dans un package bank. Les classes du modèle dans un package bank.model. Les exceptions métier ont également un package réservé, ainsi que les contrôleurs.

L'organisation du code proposée est le fruit d'un parti-pris architectural, et n'est en rien obligatoire. Cependant, cette méthode met en évidence le modèle MVC sous-jacent à JSF, et tend à établir une bonne pratique.

Les contrôleurs sont au nombre d'un par entité, ils ont tous la même structure.
Les composants graphiques sont extraits des contrôleurs et placés dans une classe View (package bank.view).
Les vues sont génériques, il ne doit pas y avoir d'adhérence au modèle, sauf décision de conception différente.

Afin d'éviter l'adhérence au modèle, on utilise éventuellement des classes utilitaires afin de peupler certains composants (voir classe KeyValuePair par exemple).

Les classes du modèle ne doivent comporter aucune adhérence aux contrôleurs ni aux vues. Vérifiez le en examinant la liste des imports.

L'organisation proposée n'est pas totalement aboutie. Il sera nécessaire, par la suite, de déresponsabiliser les contrôleurs des fonctionalités de navigation dans le modèle(crud). Ces fonctionnalités seront, plus tard, confiées à des classes DAO (Data Access Object), les contrôleurs conservant simplement une fonction d'aiguilleur.

Structure du projet


Interface utilisateur





Exemples de code

dans bankControler:

dans ListView


la classe KeyValuePair

dans bankForm.jsp


corrigé ici

mercredi 21 novembre 2007

Frameworks JSF - Ajax

  • Outre les bibiliothèques référencées par jsfmatrix déjà citées, voici deux autres bibliothèques JSF basées sur Ajax
  • Les composants Yahoo: Yui4jsf démo
  • Un framework Sun: jMaki démo

mardi 6 novembre 2007

TP: Application bancaire simplifiée

L'exemple est tiré de Netbeans: UMLBankAppSample

Spécifications:

L'application permet de créer banques, des clients et des comptes bancaires.
Les comptes sont de trois types:

  • Checking: compte courant
  • Saving: compte épargne
  • Platinum: compte de type carte de paiement
Tous les types de comptes ont les attributs suivants:

double balance; // le solde
String accountNumber; Le numéro de compte
double interestRate; //un taux d'intérêt

En outre ils possèdent un historique et ils sont liés à un client:

History history;
Customer customer;
  • Le client possède plusieurs comptes et possède les attributs suivants:
int id;
String name;
String forName;
String address;
String zipCode;
  • Le compte Checking est soumis à une pénalité en cas de découvert:
double overdraftPenalty = 25.00;
  • Le Platinum possède une autorisation maxi et une réserve d'argent qui diminue en cas de retrait si le solde n'est pas suffisant.
static final double overdraftLimit = 2500.00;
double availableFunds;
  • Le compte Saving rapporte des intérêts quand le solde est positif.
  • La classe History possède un seul attribut qui compte les opérations:
int transaction;


Créer un cas de test:



Créer un modèle de classes du domaine à base de simples javabeans (la persistence sera implémentée ultérieurement)

A l'exécution du test , on obtient:

-----Creating customers-----
-----Creating accounts-----
Account created: Checking Account: Number: 1234
Balance: 150.0 history is empty
Account created: Saving Account: Number: 12399
Balance: 100.0
Account created: Checking Account: Number: 9234
Balance: 1501.0 history is empty
Account created: Saving Account: Number: 92399
Balance: 1000.0
-----writings-----
1 Jean Dupont Saving Account: 12399 deposit 700.0
1 Jean Dupont Checking Account: 1234 deposit 360.0
1 Jean Dupont Checking Account: 1234 deposit 10.0
1 Jean Dupont Checking Account: 1234 deposit 20.0
1 Jean Dupont Checking Account: 1234 withdraw 10.0
1 Jean Dupont Checking Account: 1234 withdraw 20.0
1 Jean Dupont Checking Account: 1234 withdraw 60.0
2 Amélie Poulain Checking Account: 9234 deposit 10.0
2 Amélie Poulain Checking Account: 9234 withdraw 10660.0
2 Amélie Poulain Checking Account: 9234 noAvailableFunds
-----Bank Application balances-----
1 Jean Dupont
Checking Account: Number: 1234
Balance: 450.0 Transaction count is 3
Saving Account: Number: 12399
Balance: 800.0
------------
2 Amélie Poulain
Checking Account: Number: 9234
Balance: 1511.0 history is empty
Saving Account: Number: 92399
Balance: 1000.0
------------

Intégrer l'application dans une application web, au moyen d'un backing bean.

Créer les pages permettant de naviguer dans l'application, de créer, de supprimer, modifier des banques, des clients, des comptes, et d'effectuer des opérations.
Vérifier la non régression des règles de gestion.

Pour chaque entité, il faut prévoir une vue en liste basée sur une DataTable, et une vue d'édition basée sur un formulaire, voir tp jee-jsf et guide de référence
le modèle ici.
le corrigé v1 ici.

Myfaces et JBoss 4.2

Pour utiliser l'implémentation Apache MyFaces avec JBoss 4.2 et Redhat Developer Studio, il est nécessaire d'effectuer les opérations suivantes:

  • Créer un nouveau projet jsf

  • choisir MyFaces 1.1.4


Tester: Run as/Run on server ...

On obtient l'erreur suivante car il y a un conflit entre l'implémentation MyFaces déployée avec la webapp et l'implémentation de référence fournie avec JBoss.
10:04:44,796 ERROR [[/myfaces-examples]] Erreur lors de la configuration de la classe d'écoute de l'application (application listener) org.apache.myfaces.webapp.StartupServletContextListener
java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener
Solution: Supprimer l'implémentation JSF-RI de JBoss

  • Stopper le serveur JBoss
  • Supprimer les bibliothèques jsf livrées avec Jboss
ici: [jboss server dir]\server\default\deploy\jboss-web.deployer\jsf-libs

  • Mettre hors service les listeners jsf dans web.xml
ici: [jboss server dir]\server\default\deploy\jboss-web.deployer\conf\web.xml




ainsi que le paramètre suivant:



  • Redémarrer le serveur Jboss, vérifier que le serveur démarre sans exception et qu'il n'y ait pas d'erreur au déploiement de la webapp.