Java EE 6
Transcription
Java EE 6
Java 7, JEE 6 et OSGI © 2012 IBM Corporation Logiciel IBM Ordre du jour La terminologie Java SE 7 Java EE 6 Modularisation de Java avec OSGI 2 © 2012 IBM Corporation Logiciel IBM Java, quelques termes La plateforme Java fait référence à la fois à : – Une machine virtuelle Java pour une plateforme matérielle ou logicielle précise qui exécute les applications technologiques Java – Les interfaces de programmation d’applications (API ) Java qui définissent la version – J2SE, Java Standard Edition – La fonctionnalité de base du langage de programmation Java exprimée dans une API – La plateforme Java SE est formée d’une machine virtuelle, d’outils de développement, de technologies de déploiement et d’autres bibliothèques de classes et boîtes à outils fréquemment utilisés dans Java Java EE, Java Enterprise Edition – La plateforme Java EE est superposée à la plateforme Java SE. La plateforme Java EE fournit un environnement d’API et d’exécution permettant de développer et d’exécuter des applications de réseau à grande échelle, multiniveaux, fiables et sécurisés. http://www.ibm.com/developerworks/java/ 3 © 2012 IBM Corporation 4 Logiciel IBM Qu’est-ce que Java 7? Les thèmes Version principale de la plateforme Java qui touche à tous les aspects du langage et de la machine virtuelle Java (JVM). Dans le brouillon du document JSR document (*), les objectifs sont : – Compatibilité - «Tout programme s’exécutant sur une version précédente de la plateforme doit également s’exécuter telle quelle sur une mise en œuvre de Java SE 7» – Productivité - «...favoriser les pratiques exemplaires en matière de codage et réduire le code réutilisable... courbe d’apprentissage minimale...» – Performance - «...nouvelles API de concurrence... introduction d’API véritablement asynchrones pour les applications à fort pourcentage d’E/S..» – Universalité - «...accélérer la performance des langages dynamiques sur la machine virtuelle Java.» – Intégration - «Java SE 7 comprend un nouveau système de fichier souple faisant partie de JSR 203...» *Disponible auprès de jcp.org 4 © 2012 IBM Corporation 5 Logiciel IBM Nouvelles structures de langage – Projet Coin Une multitude de petits changements. Chaînes dans switch switch(myString) { case “one”: <do something>; break; case “red”: <do something else>; break; default: <do something generic>; } Amélioration de l’inférence des types pour la création des instances génériques (opérateur diamant) Map<String,MyType> foo = new Map<String,MyType>(); Devient : Map<String,MyType> foo = new Map<>(); 5 © 2012 IBM Corporation 6 Logiciel IBM Le projet Coin s’est poursuivi Une proposition omnibus de meilleurs intégraux littéraux – Permet les littéraux binaires (0b10011010) – Permet le soulignement entre les chiffres pour former des blocs visuels (34_409_066) – Littéraux non signés(0xDEu) Appel simplifié de la méthode Varargs – Avertissements dans la déclaration de méthode plutôt que sur chaque utilisateur. Réduit les avertissements inévitables. @SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } 6 © 2012 IBM Corporation 7 Logiciel IBM Coin – Gestion automatique des ressources Il est difficile gérer tous les chemins d’échec possibles Il est difficile de fermer les ressources Idée : Faire appel au compilateur et définir une interface sur les ressources qui savent comment mettre de l’ordre automatiquement. try(InputStream inFile = new FileInputStream(aFileName); OutputStream outFile = new FileOutputStream(aFileName)) { byte[] buf = new byte[BUF_SIZE]; int readBytes; while ((readBytes = inFile.read(buf)) >= 0) inFile.write(buf, readBytes); } 7 © 2012 IBM Corporation 8 Logiciel IBM Projet Coin – Interceptions multiples Les concepteurs veulent souvent intercepter 2 exceptions de la même façon, mais en sont incapables dans Java 6 : try { O } catch(Exception a) { handle(a); } catch(Error b) { handle(b); } Ceci fonctionnement maintenant try { O } catch(Exception|Error a) { handle(a); } 8 © 2012 IBM Corporation 9 Logiciel IBM NIO.2 – Nouvelle API de système de fichiers Résolution des problèmes de longue date en matière de facilité d’utilisation et de code réutilisable – Modélisation de niveau utilisateur d’un plus grand nombre de concepts de systèmes de fichiers comme les liens symboliques – Attributs de fichiers modélisés pour représenter des attributs propres à FS (par ex. : propriétaire, permissions, etc.) – DirectoryStream itère au sein des répertoires • Changement d’échelle en utilisant moins de ressources. • Permet le filtrage glob, regex ou personnalisé. – Marches récursives modélisées sur le visiteur. Modélisation de systèmes de fichiers entièrement artificiels ressemblant beaucoup aux extensions Windows® Explorer Notification de changement de fichier – Améliore la performance des applications qui font actuellement une attente active pour observer les changements. 9 © 2012 IBM Corporation 1 0 Logiciel IBM Visite de répertoire - exemple Files.walkFileTree(myPath, new SimpleFileVisitor<Path>() { public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { try { file.doWhatIWanted(); } catch (IOException exc) { // failed to do op, do error handling here } return FileVisitResult.CONTINUE; } } ); 10 © 2012 IBM Corporation 1 1 Logiciel IBM Mises à jour de java.util.concurrent Les appareils multicœur sont de plus en plus répandus – il est important que les structures de données et les algorithmes en tiennent compte. Nouvelle abstraction importante : Cadre de référence Fork/Join Très bonne méthode «Diviser pour régner» pour résoudre les problèmes – Modèle spécifique pour accélérer le traitement parallèle. Beaucoup plus efficace que les modèles de synchronisation normaux basés sur l’unité d’exécution ou l’exécuteur. – Vol de travail pour la répartition de travail déséquilibré Autres améliorations – TransferQueue – modélisation efficace des files producteur/consommateur – Phaser – barrière de synchronisation très souples 11 © 2012 IBM Corporation 1 2 Logiciel IBM JSR 292 - invokedynamic L’environnement d’exécution JVM géré supporte plus de langages (par ex. : jruby, jython, fan, clojure, etc.) mais est dépourvu de certains éléments fondamentaux qui permettent à ces langages d’être rapides. JSR 292 découple la recherche de méthode et la distribution de méthode – Évitez d’utiliser uniquement Java (le langage). Méthode : Introduire un nouveau code-octet qui exécute directement une méthode donnée et permet de recâbler cette méthode en mode d’exécution. – Inclure un modèle de construction de mutateurs (ajout d’un paramètre, suppression d’un paramètre, etc.) – S’assurer que JIT peut exploiter ces constructions efficacement pour assurer la génération efficace de code. 12 © 2012 IBM Corporation 1 3 Logiciel IBM Éléments secondaires Changements apportés au chargeur de classe – Fonction de chargement de classe parallèle via une nouvelle API «sécuritaire». – URLClassLoader acquiert une méthode close(). I18N - Unicode 6.0, amélioration des paramètres régionaux, des paramètres régionaux d’utilisateur séparés et des paramètres régionaux d’interface utilisateur TLS 1.2 – Mise à niveau de sécurité. JDBC 4.1 – Visibilité ARM. Mises à jour du client (interface utilisateur) – Création de nouvelles API de plateforme pour les fonctions graphiques de 6u10 – Aspect et convivialité de Nimbus pour Swing – Composant JLayer pour Swingcomponent – Prise en charge de XRender Mise à jour de la pile XML 13 © 2012 IBM Corporation Logiciel IBM Ordre du jour La terminologie Java SE 7 Java EE 6 – Servlet 3.0 – JAX-RS 1.1 – CDI 1.0 – EJB 3.0 – Autres Modularisation de Java avec OSGI 14 © 2012 IBM Corporation Logiciel IBM Tout d’abord, un peu d’inspiration.... «Évaluer l’état d’avancement par les lignes de code est l’équivalent d’évaluer le progrès de la construction d’un avion par le poids.» Bill Gates «Codez toujours comme si la personne qui doit assurer la maintenance de votre code est un psychopathe violent qui sait où vous habitez.» Martin Golding «Du code bien écrit constitue la meilleure documentation. Lorsque vous êtes sur le point d’ajouter un commentaire, posez-vous la questions «Comment puis-je améliorer le code pour qu’il puisse se passer de commentaire?» Steve McConnell 15 © 2012 IBM Corporation Logiciel IBM Thèmes d’amélioration de Java EE Avec le lancement de Java EE 5, la productivité, la simplicité et la rationalisation sont devenues des thèmes Java EE5 lançait l’utilisation répandue des annotations – EE6 a continué sur cette voie Les annotations offrent dans plusieurs cas un modèle de programmation POJO plus simple Java EE6 met également l’accent sur la rationalisation en mettant de côté des technologies plus anciennes et peu utilisées – JAX-RPC, EJB entity beans, JAXR L’extensibilité continue d’être un thème important * POJO – bon vieil objet Java 16 © 2012 IBM Corporation Logiciel IBM Annotations Servlet 3.0 Les annotations @WebServlet, @WebFilter, @WebListener peuvent remplacer la configuration de web.xml Favorise la productivité du concepteur Avant Servlet 3.0, les déployeurs devaient joindre un web.xml à l’application : <servlet> <servlet-name>myAnnotatedServlet</servlet-name> </servlet> <servlet-mapping> <servlet-name>myAnnotatedServlet</servlet-name> <url-pattern>/MyAnnotatedServlet</url-pattern> </servlet-mapping> Les concepteurs n’ont maintenant qu’à annoter leur classe de servet : 17 © 2012 IBM Corporation Logiciel IBM Configuration programmatique Les méthodes programmatiques telles que addServlet permettent une configuration dynamique lors de l’initialisation de l’application Web Permet de personnaliser dynamiquement l’application selon la configuration ou d’autres situations observables Exemple : 18 © 2012 IBM Corporation Logiciel IBM Servlets asynchrones Supportent le paradigme suspend/resume qui vous permet de détacher une demande/réponse du cycle de vie normal de l’unité d’exécution Efficace pour les opérations push du serveur Augmente l’évolutivité Utilisations et applications : • Appel de la méthode EJB asynchrone • Accès aux services Web RESTful • Clavardage • Qualité du service 19 © 2012 IBM Corporation Logiciel IBM Exemple de servet asynchrone @WebServlet("/foo" asyncSupported=true) public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) { ... AsyncContext aCtx = request.startAsync(req, res); ScheduledThreadPoolExecutor executor = new ThreadPoolExecutor(10); executor.execute(new AsyncWebService(aCtx)); } } public class AsyncWebService implements Runnable { AsyncContext ctx; public AsyncWebService(AsyncContext ctx) { this.ctx = ctx; } public void run() { // Invoke web service and save result in request attribute // Dispatch the request to render the result to a JSP. ctx.dispatch("/render.jsp"); } } 20 © 2012 IBM Corporation Logiciel IBM Qu’est ce que REST? REST (Representational State Transfer) est un style d’architecture décrit dans la thèse de doctorat de Roy Fielding Manipulation des ressources à travers des représentations (noms) définies aux URI avec des méthodes prédéfinies (verbes) Utilisation optimale d’HTTP Un service Web RESTful est formé comme une phrase – il simplifie l’accès aux services par les concepteurs • Verbe = Action HTTP (GET, POST, PUT, DELETE) • Nom = URI du service (document) • Adjectif = Type MIME du document qui en résulte http://sports.espn.go.com/oly/summer08/swimming/news/story?id=3530615 21 © 2012 IBM Corporation Logiciel IBM Qu’est-ce que JAX-RS? JSR-311, nouveau dans Java EE 6 Utilisation d’annotations pour déclarer les services (ressources) avec des classes d’assistance pour créer les mises en œuvre – Utilise également les annotations pour préciser le «contrat» RESTful La logique de mappage de ressources ne relève plus du concepteur – Les annotations contiennent les métadonnées nécessaires pour mapper les chemins URI aux ressources Offre un système enfichable pour la logique de rendu des ressources 22 © 2012 IBM Corporation Logiciel IBM Exemple de JAX-RS 23 © 2012 IBM Corporation Logiciel IBM Qu‘est-ce que l’injection de contexte et de dépendances (CDI)? Nouvelle spécification (JSR 299) dans EE6 Norme EE qui a été inspirée de SEAM, Google Guice, Spring Utilise les annotations de JSR 330 (injection de dépendances pour Java) Permet le couplage lâche des composants Offre des contextes de cycle de vie extensibles auxquels les composants sont liés Intégration avec le Unified Expression Language 24 © 2012 IBM Corporation Logiciel IBM Définition d’un bean CDI Suivant un ensemble de règles simple, n’importe quel bon vieil objet Java (POJO) peut être traité comme un bean CDI Déployez une classe dans une archive de déploiement bean. EAR/WAR/JAR avec un beans.xml dans le répertoire WEB-INF/ ou META-INF/ Doit disposer d’un constructeur sans argument ou un constructeur annoté avec @Inject Doit être une classe concrète (à l’exception de @Decorator) Ne doit pas être une classe interne non statique 25 © 2012 IBM Corporation Logiciel IBM Injection de dépendances CDI supporte l’injection dans les champs et les méthodes Les points d’injection sont résolus avec une combinaison de type et de qualificateurs public class Order { @Inject @Selected Product product; //field injection private Quantity quantity; @Inject //Initializer method void setQuantity(Quantity q) { this.quantity = q; } … 26 © 2012 IBM Corporation Logiciel IBM Enterprise Java Bean 3.0 EJB étend le modèle MBeans afin de fournir un modèle de programmation de bon vieil objet Java (POJO) annoté complet, y compris : – Beans EJB sans interface – Extensions d’appel de méthode asynchrone pour le travail long – Paquetage dans le fichier WAR – Intégration avec les technologies d’interface utilisateur 27 © 2012 IBM Corporation Logiciel IBM EJB 3.0 : Avant et après Code 2.x public interface ShoppingCart extends EJBObject { Code 3.0 public interface ShoppingCart { public int someShoppingMethod(); } public int someShoppingMethod() throws RemoteException; } public class CartBean implements SessionBean { private float total; private Vector productCodes; @Stateful public class CartBean implements ShoppingCart { private float total; private Vector productCodes; public int someShoppingMethod() { ... } public int someShoppingMethod() { O } } public void ejbActivate() { } public void ejbPassivate() { } } 28 © 2012 IBM Corporation Logiciel IBM Beans de session Singleton Nouveau type de bean de session dans lequel une seule instance est créée dans la JVM Tout particulièrement utile pour mettre en cache les données souvent utilisées avec l’application Prend en charge l’initialisation pressée au démarrage de l’application – Assure la disponibilité des données une fois que l’application commence à répondre aux demandes Permet la gestion de la concurrence par les annotations – – – @ConcurrencyManagement(BEAN) e.g. public synchronized setProductInfoO. @ConcurrencyManagement(CONTAINER) •@Lock(LockType.READ) •@Lock(LockType.WRITE) 29 © 2012 IBM Corporation Logiciel IBM Appels de beans de session asynchrone Permettent aux méthodes EJB de s’exécuter en mode asynchrone Améliorent la performance et augmente l’évolutivité Deux modes : • Tire et oublie • Tire et retourne les résultats 30 © 2012 IBM Corporation Logiciel IBM Contenant EJP incorporable Par le passé, pour tester le logiciel commercial EJB, il fallait accéder à un environnement de serveurs d’application Java EE configuré Cela nuit à la productivité du concepteur en augmentant le temps de cycle entre le développement et les tests unitaires simples Un contenant EJB incorporable était une exigence de EJB 3.0 Le contenant incorporable a uniquement besoin que Java SE s’exécute, et ainsi, fournit un environnement facile à obtenir pour plusieurs scénarios de tests unitaires EJB Le contenant incorporable prend en charge EJB lite 31 © 2012 IBM Corporation Logiciel IBM Contenant EJP incorporable 32 © 2012 IBM Corporation Logiciel IBM Paquetage des EJB dans les fichiers WAR Les EJB peuvent maintenant être paquetés directement dans un module WAR Les EJB peuvent être définis par des annotations ou un descripteur de déploiement standard Le module EJB peut également exister dans la bibliothèque lib de WAR Option de paquetage pratique lorsqu’on exploite les nouvelles capacités CDI du langage UEL Sauf pour les beans d’identité, le contenu EJB 2.x et 1.x est supporté dans un module WAR. 33 © 2012 IBM Corporation Logiciel IBM Faits saillants de JPA 2.0 Mappages améliorés pour permettre des scénarios additionnels – Collections intégrées – Intégration multiniveau – Listes ordonnées Indicateurs de requête standardisés Comportement de verrouillage en mode pessimiste standardisé Plugiciel de cache de niveau 2 et configuration standardisés API de requête fondée sur les critères – Requêtes dynamiques «à la volée» – Indépendant du langage de requête (voir Hibernation et JDO) Intégration avec Java EE Bean Validation 34 © 2012 IBM Corporation Logiciel IBM Java EE Bean Validation Modèle de métadonnées permettant de déclarer les contraintes de validation d’un type JavaBean Interface de programmation d’application (API) qui permet de déterminer si une instance JavaBean enfreint les contraintes de validation déclarées pour le type JavaBean Les exigences en matière de validation de beans sont précisées dans JSR 303 public class Stuart implements SmalleyBean { @Resource ValidatorFactory validatorFactory; @Resource Validator validator; @NotNull public String state = “acceptance”; public Boolean validateMe(Stuart me) { Set<ConstraintViolation<Stuart>> cvSet = null; try { cvSet = validator.validate(me); } catch (Throwable t) { t.printStackTrace(); // The validator failed unexpectedly! } return cvSet != null && cvSet.size() == 0; } . . . 35 © 2012 IBM Corporation Logiciel IBM Simplification des services Web avec JAX-WS @WebService public class MyService { @Resource private WebServiceContext ctx; @Resource private SampleService svc; @WebServiceRef private SamplePort port; public String echo (String input) { … } } 36 © 2012 IBM Corporation Logiciel IBM Mises à jour de JAX-WS 2.2 Prise en charge de la méthode d’usine de services client pour les fonctions de service Web pour MTOM, Respect Binding et l’adressage. Ne retourne pas de réponse au demandeur lorsqu’une mise en œuvre WebServiceProvider sans WSDL retourne un résultat nul. Permet à un service d’être paqueté sans les classes bean d’encapsuleur JAX-B. Expose uniquement les méthodes publiques, non statiques et non finales dans les services avec un SEI implicite fondé sur les annotations WebMethod et/ou WebService. Supporte les annotations de fonction de service Web pour MTOM, la fonction RespectBinding et l’adressage de références de port WebServiceRef injectés. Configuration de l’adressage de service Web via l’assertion de politique de service Web dans WSDL. 37 © 2012 IBM Corporation Logiciel IBM Ordre du jour La terminologie Java SE 7 Java EE 6 Modularisation de Java avec OSGI 38 © 2012 IBM Corporation Logiciel IBM Qu’est-ce que OSGi? «Le système de modules dynamiques pour Java» – Technologie parvenue à maturité – lancée y a 10 ans – Régi par l’alliance OSGi : http://www.osgi.org – Utilisé à l’intérieur de la quasi totalité des intergiciels Java • IBM WebSphere, Oracle WebLogic, Red Hat JBoss, Sun GlassFish, Paremus Service Fabric, Eclipse Platform, Apache Geronimo (liste non exhaustive) • http://www.osgi.org/wiki/uploads/News/2008_09_16_worldwide_market.pdf JAR Paquetage JAR Exportations explicites Class Class Classe Class Class Classe Paquetage Class Class Classe 39 Paquetage Paquetage Dépendances explicites Class Class Classe © 2012 IBM Corporation Logiciel IBM Quel est l’apport d’OSGi? Raffermit l’architecture et simplifie la maintenance Permet un déploiement modulaire Permet la coexistence de plusieurs versions de bibliothèques – Simplifie l’évolution indépendante des applications – Meilleure séparation des préoccupations entre l’application et l’intergiciel Mise à jour véritablement dynamique des modules des applications Bundle Paquetage Bundle Exportations explicites Class Class Classe Class Class Classe Paquetage Class Class Classe 40 Paquetage Paquetage Dépendances explicites Class Class Classe © 2012 IBM Corporation Logiciel IBM Bundles OSGi et chargement des classes Bundle OSGi – Un fichier d’archive contenant : – Les classes et le ressources. – Le manifeste de bundle. Composition d’un manifeste : – Bundle-Version : Il peut y avoir plusieurs versions de bundle simultanées. – Import-Package : De quels paquetages d’autres bundles ce bundle dépend-il? – Export_Package : Quels paquetages de ce bundle sont visibles et réutilisables hors du bundle? Manifest-Version: 1.0 Chargement des classes – Chaque bundle dispose de son propre chargeur. – Pas de chemin de classe plat ou monolithique. – Le partage de classes et la visibilité sont déterminés par des dépendances déclaratives, non pas par les hiérarchies de chargeur de classes. Bundle-ManifestVersion: 2 Bundle-Name: MyService bundle Bundle-SymbolicName: com.sample.myservice Bundle-Version: 1.0.0 Bundle-Activator: com.sample.myservice.Activator Import-Package: com.something.i.need;version=1.1.2 Export-Package: com.myservice.api;version=1.0.0 41 © 2012 IBM Corporation Logiciel IBM Services déclaratifs OSGi utilisant Blueprint Injection de dépendances Service publié Assemblage et configuration statiques de composants (POJO) Consommation du service OSGI-INF/blueprint/ blueprint.xml Bundle Blueprint La définition XML Blueprint décrit la configuration des composants et leur champs d’application – Publication et consommation facultatives vers/de le registre de services OSGi. – Standardisation des conventions Spring établies Simplifie les tests unitaires à l’extérieur de Java EE ou OSGi r/t. 42 © 2012 IBM Corporation Logiciel IBM Blueprint simplifie le dynamisme des services <blueprint> <bean id=”shop” class=”org.example.ecomm.ShopImpl”> <property name=”billingService” ref=”billingService” /> </bean> <reference id=”billingService” interface=”org.example.bill.BillingService” /> </blueprint> <blueprint> <service ref=”service” interface = ”org.example.bill.BillingService” /> <bean id=”biller” scope=”prototype” class=”org.example.bill.impl.BillingServiceImpl” /> </blueprint> Commerce électronique Facturation Le cycle de vie de service dynamique est géré par le contenant Blueprint La référence du service est injectée par le contenant – Le service peut changer au fil du temps – Il est être temporairement absent sans que le bundle n’y porte attention 43 © 2012 IBM Corporation Logiciel IBM Comment les applications d’entreprise utilisent-elles OSGi? Enterprise OSGi met l’accent sur les préoccupations liées à l’application, y compris les technologies Web, l’assemblage fin des composants et l’accès aux référentiels de persistance – Par l’exploitation des technologies Java EE – D’une façon qui convient à un environnement OSGi dynamique – À l’aide de normes définies par JCP et l’alliance OSGi – Utilise une archive d’application à plusieurs bundles Permet aux conteneurs d’application d’entreprise et aux systèmes de déploiement de mieux prendre en charge : – Le partage de modules entre les applications – Plusieurs versions concurrentes des modules – La mise à jour dynamique et les extensions d’applications 44 <web.xml /> Composant Web <blueprint.xml/> Blueprint <persistence.xml/> Entités Application © 2012 IBM Corporation Logiciel IBM ITALIAN TRADITIONAL CHINESE HINDI SPANISH JAPANESE FRENCH RUSSIAN TAMIL BRAZILIAN PORTUGUESE THAI GERMAN SIMPLIFIED CHINESE ARABIC Nous apprécions vos commentaires. Veuillez remplir le formulaire de sondage afin que nous puissions améliorer cette session de formation. 45 © 2012 IBM Corporation Logiciel IBM WebSphere est totalement certifié pour Java SE et Java EE http://www.oracle.com/technetwork/java/javaee/overview/compatibility-jsp-136984.html 46 © 2012 IBM Corporation Versions de WebSphere et normes Java WebSpher e V4.0 V5.x V6.0 V6.1 Normes J2EE 1.2 J2SE 1.3 IDE WebSphere Studio 5.0 V7.0 V8.0 V8.5 J2EE 1.3 J2SE 1.3 (V5.0) J2SE 1.4 (V5.1) J2EE 1.4 J2SE 1.4 J2EE 1.4 J2SE 5 JEE 5 JSE 6 JEE 6 JSE 6 JEE 6 JSE 6/7 WebSphere Studio 5.1 RAD V6.0 RAD V7.0 RAD V7.5 RAD V8.0 RAD V8.5 • IDE, Integrated Development Environment • J2EE, Java 2 Platform, Enterprise Edition • J2SE, Java 2 Platform, Standard Edition • JEE, Java Enterprise Edition • JSE, Java Standard Edition • RAD, Rational Application Developer 47 © 2012 IBM Corporation