1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
21 22 23 24 25 26 27 28 29 30 31 32 33 

EJB 2 - Les Entreprise Java Bean (JavaBeans)

5.4.Clause WHERE

Vous allez pouvoir utiliser des valeurs littérales pour limiter le nombre d’éléments sélectionnés. Cela s’accomplit via la clause « WHERE » comme vous pouvez la connaître en SQL.
Vous pouvez également utiliser des paramètres en entrée et les utiliser pour effectuer des comparaisons d’objets …

5.4.1.Opérandes littérales

Les opérandes littérales correspondent à des valeurs « en dures ». De ce fait, vous ne pouvez comparer que les champs persistants.
Vous pouvez comparer des chaines de caractères (String), des valeurs numériques (long, double, float …) ainsi que les valeurs booléennes.

SELECT OBJECT( c )
FROM Client c
WHERE c.carteCredit.organisation = ‘American Express’

SELECT OBJECT( v )
FROM Vol v
WHERE v.poidsMax = 100000.00

SELECT OBJECT( c )
FROM Client c
WHERE c.aToutPaye = TRUE

5.4.2.Paramètres d’entrée

Les méthodes dites « à requête » (Query Methods) qui utilisent l’EJB-QL peuvent spécifier des arguments. Ces valeurs d’entrées peuvent alors être mappées à l’EJB-QL et donc limiter le nombre de réponses. Par exemple, imaginons une requête permettant de récupérer l’ensemble des clients résidant dans une ville précise :

// Méthodes dans la home interface
public Collection findParVille(String ville, String pays) throws FinderException;

// EJB-QL
SELECT OBJECT( c )
FROM Client c
WHERE c.adresse.ville = ?1
AND c.adresse.pays = ?2

La liaison entre les paramètres de la méthode et ceux de la requête se fait via le préfixe ‘ ?’ suivit de la position de l’argument de la méthode.
De plus, ces paramètres ne sont pas limités qu’aux champs persistants, ils peuvent également être des références à d’autres EJB. Voici un exemple qui recherche les croisières à partir d’un vol :

// Méthodes dans la home interface
public Collection findParVol( VolLocal vol ) throws FinderException;

// EJB-QL
SELECT OBJECT( c )
FROM Croisiere c
WHERE c.vol = ?1

Quand vous utilisez un objet EJB en tant que paramètre d’entrées, le conteneur effectue la comparaison en se basant sur la clé primaire de cet EJB.
Dans notre exemple, il cherche parmi l’ensemble des EJB Croisiere, une référence à l’EJB Vol ayant la même clé que l’EJB Vol passé en paramètre.

5.4.3.Opérateurs

Vous pouvez retrouver l’ensemble des opérateurs SQL de base en EJB-QL.
Voici l’ordre d’évaluation de ces opérateurs :
  1. Navigation (.)
  2. Arithmétique
    1. +,- (unaire)
    2. *,/ (multiplication, division)
    3. +,- (addition, soustraction)
  3. Comparaison
    1. =,>,>=,<,<=,<> (différent)
    2. LIKE, BETWEEN, IN, IS NULL, IS EMPTY, MEMBER OF
  4. Logique
    1. NOT, AND, OR

Remarque : les opérateurs de comparaison contenant les caractères : ‘<’, ‘>’ peuvent poser des problèmes dans le descripteur de déploiement. En effet, ces caractères correspondent à l’ouverture / fermeture de balises. Il faut donc déclarer les requête EJB-QL dans des sections CDATA.

<![CDATA[SELECT OBJECT( r ) FROM Reservation r
WHERE r.totalPaye > 300.00]]>
        1. Logiques

Les opérateurs logiques tels que AND, OR et NOT correspondent exactement à ceux du SQL. Ces opérateurs évaluent seulement des expressions booléennes.
De ce fait, ces opérateurs ont la plus basse priorité car ils évaluent des ensembles pouvant servir à représenter une valeur logique.
        1. Comparaisons

L’ensemble des opérateurs de comparaison sont familiers. Que ce soit le <, > ou le <=, >=, <>. Vous utilisez les mêmes opérateurs en SQL.
Cependant, seuls les opérateurs <> (différent) et = (égal) peuvent être utilisés avec des références à des objets EJB.
Les opérateurs : >, >=, <, <= peuvent uniquement être utilisés avec des valeurs numériques.

5.4.4.Égalités

Il est égal de comparer une valeur numérique de type short, int ou long à une valeur numérique approximative de type double ou float. En opposition, les autres types (String …) doivent être exactement égales. Vous ne pouvez pas comparer une string « 123 » et la valeur numérique 123.

Les objets EJB peuvent être comparés avec l’égalité, mais ils doivent avoir exactement le même type. Ils doivent donc être inclus dans le même déploiement.
La comparaison se fait alors sur la clé primaire. Si les deux objets comparés ont la même clés, alors ils sont égaux.

Remarque : les objets de type java.util.Date ne peuvent être comparés. Si vous souhaitez comparer une date, vous devrez utiliser un champ persistant de type long et vérifier l’égalité avec la date via une valeur numérique (de type long).

5.4.5.Utilisation de « BETWEEN »

La clause BETWEEN permet de spécifier un interval de valeur pour la comparaison. Vous pouvez par exemple, récupérer l’ensemble des vols dont le poids maximal est entre 8000 et 10000 tonnes.

SELECT OBJECT( v )
FROM Vol v
WHERE v.poidsMax BETWEEN 8000.00 AND 10000.OO

Vous ne pouvez utiliser cette clause ni avec des références d’objets EJB, ni String, ni boolean.

5.4.6.Utilisation de « IN »

L’opétareur conditionnel IN n’est pas le même dans la clause WHERE que dans la clause FROM.
Dans la clause WHERE, IN teste si une valeur appartient à un ensemble de valeurs. Vous utiliserez cet opérateur qu’avec des valeurs de type String.

SELECT OBJECT( c )
FROM Client c
WHERE c.adresse.pays IN (‘FR’, ‘ALL’, ‘ES’)

5.4.7.Utilisation de « IS NULL »

Cet opérateur vous permet de vérifier si une valeur est null. Vous pouvez donc vérifier qu’une valeur d’une entité n’est pas spécifiée :
SELECT OBJECT( c )
FROM Customer c
WHERE c.adresse IS NULL

Cette requête retourne l’ensemble des clients n’ayant pas d’adresse.

Remarque : des problèmes peuvent survenir lorsque vous utilisez la clause BETWEEN ou IN avec des champs ayant des contenus « null ». En effet, le résultat d’un test sur un champ null (par BETWEEN ou IN) entraine un « UNKNOWN » résultat. Pour résoudre ce problème il faut absolument qu’aucun champ soit null. Vous pouvez vous assurer de cela en initialisant l’ensemble des valeurs (dont le type n’est pas primitif) en leur affectant une valeur par défaut dans les méthodes ejbCreate() et ejbPostCreate().

5.4.8.Utilisation de « IS EMPTY »

L’opérateur IS EMPTY permet de tester si une collection basée sur une relation est vide. Rappelons qu’une collection basée sur une relation n’est jamais null, cependant si cette collection retourne aucun objet, alors vous aurez une collection vide (empty).

SELECT OBJECT( croisiere )
FROM Croisiere croisiere
WHERE croisiere.reservations IS EMPTY
Ici, nous récupérons l’ensemble des croisieres n’ayant pas de réservations.

5.4.9.Utilisation de « MEMBER OF »

L’opérateur MEMBER OF est un outil très puissant vous permettant de tester si un objet est un membre d’une collection specifique.

SELECT OBJECT( croisiere )
FROM Croisiere croisiere, Client client
WHERE c = ?1
AND c MEMBER OF croisiere.reservations
Cette requête permet de déterminer si un client particulier (spécifié en argument d’entrée de la méthode) est un membre de n’importe quelle relation : Reservation – Client.

5.4.10.Utilisation de « LIKE »

Vous retrouvez également l’opérateur LIKE en EJB-QL. Cet opérateur vous permet de vérifier qu’une String correspond à un modèle défini.

SELECT OBJECT( c )
FROM Client c
WHERE c.nom LIKE ‘Jean%’
La requête retourne l’ensemble des clients dont leur nom commence par : « Jean » .

Vous pouvez utiliser le caractère ‘%’ pour indiquer une séquence de plusieurs caractères et ‘_’ pour indiquer un unique caractère.

5.4.11.Fonctions sur les expressions

L’EJB-QL possède 4 fonctions de traitement des String et 2 pour les opérations basic sur les nombres.
        1. String

Voici une description de l’ensemble des 6 fonctions liées au String :
  1. CONCAT( String1, String2) : concatenne deux string ensemble.
  2. SUBSTRING(String1, start, length) : retourne la séquence de string1 commençant à la position start et de longueur length.
  3. LOCATE(String1, String2 [, start]) : retourne un entier indiquant la position de String1 dans String2. Si start est présent, cet argument indique la position diu début de la recherche.
  4. LENGTH(String) : retourne la longueur de la chaine (entier).
        1. Numérique

  1. ABS(number) : retourne la valeur absolue d’un nombre (int, float, double)
  2. SQRT(double) : retourne la racine carrée d’un nombre (double).


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
21 22 23 24 25 26 27 28 29 30 31 32 33 

Retrouvez ci-dessous les autres sections du Laboratoire Sun
Exemples de code
JavaManipuler les looks and feel (lister et affecter)10/15/07
JavaFaire sa propre injection de dépendance avec les annotations5/9/06
JavaSplash screen avec progress Bar5/5/06
JavaFaire un splash screen en swing5/5/06

Essentiels de cours Java
JavaEJB 3 - Les Entreprise Java Bean version 3 (JavaBeans)
Cet essentiel est la suite de « Entreprise JavaBean 2.1 ». Cependant, nous allons étudier les nouvelles spécifications 3.0 qui simplifient énormément le développement par rapport aux EJB 2.6/20/06
JavaSWT - Créer des interfaces graphiques performantes
SWT (Standard Widget Toolkit) est une librairie graphique qui vous permet de réaliser des applications graphiques Java beaucoup plus avancées et surtout plus rapide à l’exécution.1/29/06
JavaStruts - Un framework MVC pour vos applications J2EE
Struts est un framework open-source qui vous permet de gagner du temps, mais qui permet aussi de voir des applications complexes comme une suite de composants de base : Vues, Actions, Modèles. Vous gagnez ainsi en évolutivité et en lisibilité du code.1/13/06
JavaHibernate - Persistance objet - relationnel
Cet essentiel explique comment utiliser Hibernate afin de gérer la persistance objet relationnel au sein de vos applications Java.12/14/05
JavaIntroduction J2EE - Applications d'entreprise
Cours d'introduction aux diverses technologies et outils que l'on peut rencontrer dans le monde du Java orienté entreprise J2EE12/14/05
JavaEJB 2 - Les Entreprise Java Bean (JavaBeans)
L'objectif avec EJB2 (Entreprise JavaBeans) est d'introduire les concepts de l’Ingénierie Logicielle Basée sur les Composants.12/14/05
JavaDesign Pattern - Améliorez l'architecture de vos programmes
Afin de répondre a des situation récurrentes en programmation, les "design pattern" apportent une solution type à beaucoup de contraintes liées à la programmation objet.12/14/05
JavaArchitecture J2EE - Comment organiser son application J2EE
Ce cours explique comment créer un code modulable, lisible et évolutif afin d'assurer la pérénité de son application.12/14/05
JavaLes web-services - Publication de services
Le développement tend vers les technologies du Web. Il est difficile de faire la distinction entre les différents logiciels qui sont de plus en plus intégrés au Web. Les Web Services rentrent dans l’optique de différencier bien précisément les couches.12/14/05
JavaAnt - L'automatisation des tâches du programmeur
Ecrire des scripts afin d'exécuter les tâches récurrentes10/31/05
JavaIntroduction au langage Java - Présentation & historique
Présentation des origines du langage, ainsi que se buts premiers8/11/05
JavaLa Syntaxe Java - Bases & nomenclatures
Bases de la syntaxe du langage Java8/11/05
JavaLes Classes - Concepts & héritage
Base du développement objet en Java grâce aux classes8/11/05
JavaLes Exceptions - Gestion d'erreurs
Gérer les erreurs liés à la programmation8/11/05

Articles
Eclipse Europa : le successeur de Callisto
Après Eclipse Callisto (Eclipse 3.2), la fondation Eclipse sort la nouvelle mouture d'Eclipse appelée Europa (Eclipse 3.3) faisant ainsi passer le nombre de projets embarqués de 10 à 21. Que ceux qui sont réticents aux « distributions » d'Eclipse se rassu12/21/07
JavaCruiseControl : l’outil d’intégration continue à avoir dans sa boite à outils
CruiseControl est un projet open-source offrant de multiples fonctionnalités pour l’intégration, que ce soit pour des développements Java ou .Net. Il est courant sur un projet d’être plusieurs développeurs avec des tâches de développement réparties. Dans7/2/07
JavaEJB3 - Des concepts à l'écriture du code - Editions DUNOD
Consulter le résumé du premier ouvrage du laboratoire Sun de SUPINFO : EJB3 - Des concepts à l'écriture du code. Guide du développeur, éditions DUNOD.5/27/07
JavaPassage de certification Java Web (SCWCD)
Passer une certification est toujours un moment important car cela permet de mieux faire reconnaître ses compétences face à un recruteur ou un employeur.5/12/07
JavaGoogle Web Toolkit
Google Web Toolkit est un framework java pour générer du javascript et des requêtes Ajax à partir d’un code java. Voilà comment il fonctionne.5/10/07
JavaJ2ME Vs SDE
Demain, les terminaux « légers » seront plus nombreux que les ordinateurs personnels, ce qui entraîne une bataille sur le choix d’une plateforme identique à tous ces terminaux… Aujourd’hui nous retrouvons le J2ME ainsi que le SDE qui s’offrent une rude b4/22/07

Tips du laboratoire
EclipseVisual Editor avec Eclipse Europa, c'est possible3/28/08
EclipseGérer les projets dans un workspace.10/16/07
JavaManager votre server d'application avec Eclipse4/21/07
JavaVue des sub-packages avec Eclipse4/21/07
JavaGlisser-déposer avec Eclipse4/21/07

Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright SUPINFO International University
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée