COM / .net
Transcription
COM / .net
Nicolas Pastorelly [email protected] Objectif du cours u u u u Applications N-tiers Reconnaître les différents types d’architectures Connaître les critères de choix lors de la création d’une application Comparaison : • Visions : Sun ONE & .NET • Comparaison couche à couche des infrastructures Les différentes architectures u Les types d‘architectures dépendent du type et du nombres de serveurs impliqués u Les diverts types d’architectures ont différents avantages et désavantages u Généralement sont distinguées les architectures • 2-tiers • 3-tiers • n-tiers u Ce qui compte (/ aux objectifs) • La rapidité • Facilité de mise en place / administration Les architectures 2 tiers u u u u Type le plus ancien d’applications réseau avec la plus part du temps : • Un serveur • De multiples clients Les fonctionnalités sous souvent hébergées par le serveur Le client est un client léger Relation maître - esclave Traitements 1 Données 2 Les architectures 2 tiers & clients lourds u u Le prix de la ressource informatique diminuant, le client put assumer un partie du traitement g client lourd PB : installation & maintenance du client Traitements 1 Données 2 Traitements Evolution des architectures u u Les ordinateurs se répondant dans les bureaux, les demandes d’applications augmentèrent rapidement Æ Besoin de nombreux serveurs & sources de données Les « applications d’entreprise » virent le jour Æ Résultat : de nombreux domaines adressés & une complexité croissante qui rendirent nécessaire la division des applications en couches ou tiers … Legacy App •Centralized • Mainframe/Mini • SNA • Channel Attach • Terminals Pas de Client/serveur monolithique • Distributed • PC • LAN/WAN • TCP/IP, Ethernet • GUIs Client Lourd/serveur - Client Léger/serveur Architecture 2 tiers & WEB u u Avec l’arrivée d’Internet le modèle client/serveur prit son envol • Client lourd = mail, newsgroups, P2P … • Client léger = client browsers 1ère génération d’architecture Serveur Web Simple Affichage HTML (Browser Web) HTTP Serveur Web 2 1 Problèmes & limitations : • Bon pour du simple affichage • Données non dynamiques Pages HTML Les architectures 3 tiers classiques u u Un serveur d’application est entre le client & la source de donnée 3 processus exécutés sur des plateformes différentes Tiers Client Tiers du milieu 1 2 Tiers de données 3 Protocole propriétaire ou standard • Interface client • (Traitements) ? • héberge les processus de traitement fonctionnels • (Génère des données d’affichage) ? • Appelé application serveur • RDBMS ou autres Les architectures WEB 3 tiers classiques Affichage HTML (Browser Web) 1 Problèmes & limitations : • CGI scaling • Gestion de différents types de clients • Gestion de la cession HTTP • Sécurité Applet, ActiveX Clients lourds Applet, ActiveX Serveur Web 2 Module Pages HTML CGI, Pages serveur Tiers de données Corba/RMI, COM • • • • RDBMS Directory, mail serveur, SMTP Applications d’entreprises Autres 3 Rappel : Common Gateway Interface (CGI) Certains fichiers sont interpré tés comme programmes en fonction de leur extensions ou emplacement u Les programmes invoqués gé nèrent en entête MIME est du contenu HTML sur stdout u 2 Web-Server 1 File-System HTTP-Request Load File HTML HTML-File Output HTML? File Program? Executer le Programme Tiers de données I/O, Network, DB 3 Les architectures 3 tiers u Avantages • • • Facile rapide à mettre en place Facile à administrer Utile pour des applications simples u Désavantages • • • • Tolérance à la faute (un seul point critique) Montée en charge difficile Pb de maintenance / évolution Pas réellement flexible (logiques de présentation et de connexion mélangées) Les architectures N tiers u u u u u N tiers = Un nombre de tiers supérieur à 3 … N tiers =Utiliser une combinaison de serveurs & couches logicielles pour créer un collection modulaire de services informationnels Concevoir l’application en utilisant autant de «tiers» que nécessaire Compatible avec les techniques de conception OO Pouvoir mettre les composants créés dans les serveurs choisis Les architectures N tiers u u u Avantages • Application plus puissantes • De nombreux services pour de nombreux clients • Gestion de la sécurité, disponibilité, évolution (scalability) Désavantages • Plus compliqué à concevoir • Risques de performances • Robustesse difficile à garantir Les Attributs de qualité : • Robustesse : difficile avec une application + complexe • Sécurité : les tiers sont autant de barrières • Disponibilité : découpage en tiers permets la redondances • Evolution : couche = facile d’ajouter de nouveaux services • Maintenance : difficile avec une application + complexe Les architectures N tiers Une architecture N tiers peut être évaluée suivant l’axe u Logique • Couches, composants métiers créés u Physique • Installation sur différents serveurs des différentes couches logiques u Architecture classique : 4 tiers Tiers de données Tiers Client 1 Serveurs de présentation 2 BD Application serveurs 3 4 réplication Serveur mail De la modularité des architectures N tiers 1 Tiers de données (Intranet) Tiers Client BD 2 Tiers de Équivalent 3 tiers 4 réplication présentation (Web serveurs) Navigateur Fct Du client 3 Application serveurs Serveur mail Web service proxy Client Lourd Services WEB externes Autres couches logiques et physiques Tiers Client u u u u Application avec laquelle l’utilisateur interagit Contient les mécanismes de présentation • Code responsable d’afficher les données • Code responsable de la communication avec les serveurs Un client léger ne contient pas de logique applicative • Navigateur WEB : HTTP ou HTTPS + DHTLM, HTML, XML, WML, any- ML Un client lourd contient du code applicatif • Application, Applet, ActiveX - IIOP / RMI, CORBA, Com etc. • Application + WS - HTTP ou HTTPS + SOAP, XML, ebXML Tiers Client Navigateur Web service proxy Client Lourd Tiers de présentation u u Permet la présentation des informations • Dynamiques (après avoir contacté les autres tiers applicatifs) • en fonction du type de client émettant une requête HTTP Dans le cas des clients de type navigateur WEB, les technologies utilisées sont par exemple : • CGI (Programme exécutables en Perl, C, C++ etc.) ( • Pages interprétées - ASP (Active Server Pages) Ò MSFT IIS - Java Servlets, JSP (Java Server Pages) Ò serveur WEB + Java container • Autres (PHP etc.) Serveur Web Requête HTTP Contenu WEB container Documents statiques Modules d’extension Scriptes CGI Autres tiers Le tiers de Workflow u u Le tiers de workflow est une couche logique qui décrit que faire avec les données/informations fournies par l’utilisateur La couche de workflow définit les règles qui régissent la saisie & d’autres processus client Le tiers métier u u Cette couche contient les processus métiers (business logic) Les règles métier doivent maintenir l’intégrité des données Le tiers de données u Contient les données nécessaires à l’application fournies par des systèmes d’information d’entreprises qui peuvent être : • Des bases de données - SQL2,SQL3 - Conception et administration = important ! • Des ERPs (entreprise ressource planing) • Des legacy applications (système anciens sous IBM AS400 etc.) Le tiers d’accès aux données u Contient la logique et les mécanismes d’accès aux données • Ajouter, détruire, recherche, mettre à jour une donnée • JDO, SQL/J, JDBC, ADO.NET, Connecteur & protocoles propriétaires Quelles sont les autres couches u Il peut il y avoir autant de couches logiques que désiré en fonction des besoins • Implantation physique ? • Performances ? u Importance grandissante de la phase d’analyse et conception en fonction des besoins de l’application u Pourquoi créer des couches ? • Favoriser la réutilisation • Gérer finement la sécurité • Plus de tolérance aux fautes (+ load balancing) • Applications + scalables Pour et contre des architectures en couches Architectures Pour Simple u Hautes performances u Tout en 1 u 1 tiers Conception claire & modulaire u - de trafic réseau uSéparation UI – Business Logic u 2 tiers Séparation UI – Business Logic – Stockage u Stockage sûr & réplicable u Accès conçurent aux données possible (transactions) u Accès performant aux données u Répartition de charges contre u u u u Pas d’accès distant Code spaghetti Données et logique mélangées gestion du stockage u 3 tiers supporter différentes interfaces applications est + simple u Réutilisation des composents : utiliser des protocoles/API communs u Répartition de charges u Mécanismes de réplications u Sécurité u rendre possible l’achat de composent u N tiers u u Besoin d’un RDBMS • DBA • Apprendre SQL Correspondance objet difficile Coût u - performant ? u Apprendre/choisir des API (Corba Corba,, COM etc.) u Produits chers u + complexe, + de fautes ? u Mise en place difficile u Besoin de compétences techniques u Complexe à gérer u Les architecture n tiers : couches logiques & couches physiques Logique de présentation Logique métier (règles métiers) Logique de connexion aux sources de données (accès aux données) Sources de données (Fichiers, BD, etc.) Les architecture n tiers : couches logiques & couches physiques Serveur Client léger Portabilité, Maintenance, intégration d’une nouvelle application (procédures stockées) ? 1000 utilisateurs Client lourd Serveur • • • • 1000 connexions 1000 processus 500 MB de RAM 10000 fichiers ouverts Serveur L’OS est mort ! Les architecture n tiers : couches logiques & couches physiques 1000 utilisateurs Tiers Client Tiers du milieu Tiers du milieu • • • • 50 connexions partagées 50 processus 25 MB de RAM 500 fichiers ouverts Cool ! Tiers de données • RDBMS ou autres Pb : • différentes logiques dans un même code • non séparation de la logique métier • pb de maintenance • Stopper le serveur pour • Ajouter un nouveau type de client • Ajouter une nouvelle source de donnée • Tier du milieu = serveur WEB Les architecture n tiers : couches logiques & couches physiques Zone démilitarisée (DMZ) HTTP port fixe HTTP port 80 Tiers Client Zone de confiance (trusted zone) Tiers du milieu Tiers de données Protocole propriétaire La logique métier est exposée ! • RDBMS ou autres Les architecture n tiers : couches logiques & couches physiques Zone de confiance (trusted zone) Zone démilitarisée (DMZ) HTTP port 80 Tiers Client pres SRV HTTP port aléatoire App SRV Tiers de données Protocole propriétaire • RDBMS ou autres couches logiques HomePage.aspx Presentation Layer Customer GetCustomerInfos Customer Business Logic Layer DACustomer Nom, prénom DACustomer Connexion SQL Address Book Contacts Data Layer couches logiques : ex dans le projet finance Data Samic Business Logic ADO .Net Web Services Integration Server COM Interop Market Watch Server .Net Framework Presentation SOAP Internet Windows CE application (eVB eVB)) couches logiques : ex dans le projet finance SQL Server 2000 Samic DB Data BAMI Profile DB Misys Back Office Market Watch Server C# Components Samic Adapter Bami Profile Adapter .Net FrameworkData Access Samic Component Bami Profile Business Logic WebBankWS Services eMbedded Visual Basic W3F2 Embedded Application Client Application FIST activeX Market Watch couches logiques Internet Clients Systèmes externes Web Servers Presentation Mobile Devices HTTP SOAP Presentation Logic Application Servers Web Services Servers RMI/IIOP .NET/COM+ Remoting Interface Logic Ressources Routing Logic Business Logic Data Access Logic Database ADO.NET OLEDB JDBC MQ Directory N tiers = architecture distribuée u Répartir la logique sur plusieurs programmes, processus ou processeurs. u Pourquoi la programmation distribuée ? • Utilisation de composants • Parallélisme • Ressource Loan Account Services du tiers du milieu = composants Ledger Manager Officer architecture distribuées : historique u u u u u u u Sockets X/Open Transport Interface RPC - Remote Procedure Calls DCE - Distributed Computing Environment COM/DCOM CORBA - Common Object Request Broker Architecture EJB – Enterprise Java Beans ; .net remoting Evolution des architectures N-tiers Coût de développement & de maintenance Architecture 2-Tier Architecture N-Tier Complexité de l’application & durée de vie Evolution des architectures N-tiers u Besoin d’un serveur applicatif = serveur WEB • • • Supporter différentes BDs Supporter d’anciennes application (legacy apps) Code réutilisable = composants Management Sécurit curité é Gestion des Transactions Connectivit é aux Connectivité Sources de donné donn ées Connectivité Connectivit é Client Tiers Client Gestion de composants métiers Serveur d’application Composants Tiers de données Le tiers du milieu : rôle u u u u Gestion de composants • fourni tous les services et outils pour gérer les composants du système et l’implémentation de la «business logic» comme - management de session - synchrone et asynchrone notification Tolérance de fautes, haute disponibilité • Capacité de l’application de résister à une possible panne sans point unique de panne. Définie les polices de récupération. • 24-7 Passage à l'échelle • Capacité pour le système d'accroître ses ressources matérielles pour supporter un nombre accru d’utilisateur avec un temps de réponse constant Balance de charge • Capacité d ’envoyer une requête a différents serveurs en fonction de la disponibilité des serveurs Le tiers du milieu : rôle u u u u Ressources pooling • Protège le tiers ressource en utilisant des groupes de connections partagées entre tous les clients Transaction Management • Une transaction est une unité indivisible de travail comprenant plusieurs opérations, dont toutes ou aucune doivent être effectuées pour protéger l’intégrité des données • Assure les propriétés ACID des transactions (atomicité, consistance, isolation & durabilité) Console de management • Unique point de management permettant de contrôle l’ensemble du système incluant tous les serveurs Sécurité • Authentification • Autorisation Type de serveurs : Serveurs d’applications u Serveur d’applications - Environnement complet de développement coté serveur - Comprends toujours un serveur de composants - Serveurs avec états - Supporte «business logic» décrite à l ’aide d ’objets, de règles et de composants - Exemples > Microsoft .net Enterprise Servers > J2EE Serveurs : IBM WebSphere, BEA WebLogic, JBoss > ORB Corba Servers : Borland VisiBroker, IONA ORBacus > Notez que les serveurs d’applications Corba complet intègrent J2EE. Architectures N-tiers Système du client (HTML, formulaire Windows) sur la machine cliente Tiers de Présentation GUI WEB Logique serveur HTTP Ex : Tiers de Présentation logique (WebForms+C # ou VB) Logique distribuée Connexion au serveur pour échange d’information té ô C ent i Cl ou (Servlets, JSPs : Java) pour produire : XML,HTML,WML … Tiers proxy é t Cô eur( soap, CORBA, RMI, COM+) rv se Interface cliente Application cliente développée Tiers métier (business tier) Règles & objets métier Manipulation des données pour les transformer en information (+ maintenance de l’état) Tiers d’accès aux données Interface avec les unités de stockage Interface BDs, Fichiers qui gère les I/O (généralement sans état maintenu) Tiers de données Stockage Langage interrogation, optimisation,WS … Architectures N-tiers HTML, WML, XML, Soap JDBC, SQL/J … Vs ADO.Net, ADO,ODBC … Autres Couches logiques Presentation tier MiddleWare services Business logic tier Data Access tier Déployé sur 1 ou N serveurs • « Component » approach (tight coupling) (CORBA,RMI …) vs (COM,DCOM…) • « WebServices » approach (loose copling) SOAP/UDDI/WSDL SOAP, UDDI, WSDL … D Ac ata ces s SQL2/ SQL3 Or ODMG Data source Les serveurs d ’application (vue logique) Eléments d‘un serveur d’application WEB Web Service User/Provider Mainframe Backend Server Legacy Micro/Macro Services Integration Layer Virtual Machine Frontend Layer (Web Server) Workflow Engine Core Services (Calendar, Preferences, Transactions, ...) Service Context (Who, Where, When, Why, ....) Service Description (WSDL) Service Description, Discovery, Integration (UDDI) Web-based & -related Protocols (HTTP, SMTP, ...) Clients J2EE & .net : un niveau différent u J2EE : un standard • J2EE est une spécification avec de multipes implémentations • J2EE = Ensemble de spécifications • différents éditeurs logiciels, développeurs et vendeurs hardware (JCP - www.jcp.org) (Java Community Process) • Basé sur le language Java - JRE interprète du bytecode • Compatibility Test Suite, Blueprints Design Guidelines etc. u .NET est un mélange de produits et de spécifications • architecture de développement • langage(s)/Runtime .NET .NET Foundation Services (Hailstorm) Passport, Calendar, Directory & Search, Notification & Messaging, Personalization, Web-Store/XML, Dynamic Delivery of Software & Services .NET Framework & Tools ASP.NET Windows Forms (Web Services, Web Forms, ASP.NET Application Services) (Controls, Drawing, Windows Application Services) Base Classes (ADO.NET, XML, Threading, IO, ....) Common Language Runtime (Memory Management, Common Type System, Lifecycle Monitor) .NET Servers SQL Server, Biztalk, Commerce, Exchange, Mobile Information, Host Integration, Application Center .NET Devices TabletPC, PocketPC, .... J2EE J2EE = “SQL” pour Infrastructure applicative u Distributed components & Web services Ø Ø Ø Ø Ø Ø • u Web, HTML, and XML Ø Ø u Enterprise JavaBeans™ 2.0 & 1.1 (EJB) Java Messaging Service 1.0.1 (JMS) Transparent Web service bindings to EJB and JMS Remote Method Invocation (RMI/IIOP (RMI/IIOP)) Java Transaction API (JTA) Java Naming & Directory Inter. 1.2 (JNDI) Java Interface Definition Language (Java IDL) Servlets 2.2 & 2.3 Java Server Pages (JSP) 1.1 & 1.2 Database/legacy access Ø Ø Ø Java Database Connection 2.0 (JDBC) Connector Architecture (J2EE CA) EJB Entity Beans J2EE Conteneur web Conteneur EJB Servlet Java EJB Page JSP Les API : JDBC, JAVA MAIL, RMI etc.. Les API: JDBC, JAVA MAIL, RMI etc.. Serveur d ’applications J2EE Clients applicatifs DB .NET Runtime u u u Common Language Runtime (CLR) Tout langage compilé en MSIL +ieurs langages supportés Support de langages non OO C# VB.NET C++ Perl Compiler u MSIL + Metadata Garbage Collection, Security, Multithreading, ... Loader/ Verifier Execution JIT Managed Code .NET Framework Code Source (C#, C++, VB.NET, J++, Cobol, Smalltalk, Eiffel, etc.) CLS/CTS « Managed Code » (MSIL) .NET Framework Libraries .NET CLR .NET CLR .NET CLR Windows 98/Me NT/2000/XP Linux Autre… .NET Compact Framework Libraries .NET CLR .NET CLR .NET CLR Java Virtual Machine u u JVM interprète Java Byte Code. D’autres langages peuvent être compilés en Java bytecode (e.g. Ada) Just-in-Time existe pour différents OSs Java Compiler u CLASSFiles Garbage Collection, Security Manager Call-in+Call-out, Multithreading, ... Classloader/ Verifier JIT Interpreter Hotspot Native Code Modèle Java J2SE 1.4 J2SE 1.0: 212 classes 1.1: 504 classes 1.2: 1781 classes 1.3: 2130 classes 1.4: 2738 classes (.NET) u Tout est objet Types Value Types Reference Types Pointers System Value Types Interfaces User Value Types Self--describing Self Types Enumerations Classes Delegates Arrays Boxed Values User--Defined User System.Object u Mère de toutes les classes public class Object { public virtual int GetHashCode(); public virtual bool Equals(); public virtual String ToString(); public static bool Equals(object a, object b); public static bool ReferenceEquals(object a, object b); public Type GetType(); protected object MemberWiseClone(); protected virtual Finalize()´; } Object Model (Java) u Types primitifs et objets • Pas de boxing/unboxing automatique Types Primitive Types Reference Types Arrays Interfaces Classes java.lang.Object u La mère de toutes les classes public class Object { public Object(); public boolean equals(Object obj); public final Class getClass(); public int hashCode(); public final void notify(); public final void notifyAll(); public String toString(); public final void wait() throws InterruptedException; public final void wait(long timeout) throws InterruptedException; public final void wait(long timeout, int nanos) throws InterruptedException; protected Object clone() throws CloneNotSupportedException; protected void finalize() throws Throwable; } Hello World Example u en C# & Java: using System; namespace MyNameSpace { public class MyClass { public static void Main(String [] args) { Console.WriteLine(„Hello, C#!“); } } } package MyPackage; public class MyClass { public static void main(String [] args) { System.out.println(„Hello, Java!“); } } Java // HelloWorld.java public class HelloWorld{ public static void main(String[] args){ for(int i= 1; i<= 100; i++) System.out.println("Hello!"); } } C# Nom fichier peut être ? nom classe Peut être omis si pas de paramètres // NAWAK.cs public class HelloWorld{ public static void Main(string[] args){ for(int i= 1; i<= 100; i++) System.Console.WriteLine("Hello!"); } } N classes publiques dans le même fichier int peut être traité comme un objet Main peut retourner le type int ou void C# & Java Java import public int for java.util.Vector; static int sum(Vector v) { sum = 0; (int j = 0; j < v.size(); j++) { Integer i = (Integer)v.elementAt(j); sum = sum + i.intValue (); } return sum; } C# using System.Collections; static int SumList(ArrayList theList) { int sum = 0; foreach (int j in theList ) { sum = sum + j; } return sum; } C# & Java Java try { throw new SampleException (); } catch (SampleException ex) { } finally { } C# try { throw new SampleException (); } catch (SampleException ex) { } finally { } try { throw new SampleException (); } catch {} finally { } • catch est optionnel •Pas de mot clé throws Statements u Exceptions en Java • Les Exceptions doivent être déclarées dans la clause throws public int insert(int i) throws OverLimitException; {…} u Exceptions en .NET • Exceptions ne sont pas déclarées // Je mets un commentaire pour dire qu‘il y a une exception + loin … public int insert(int i) { … } Modèle Objet u Les types de bases ne peuvent pas être utilisés comme des objets en Java Integer i_ref = new Integer(7); List l = ... l.add( i_ref ); …… i_ref.intValue(); u C# : boxing & unboxing i 123 int i = 123; object o = i; int j = (int)o; System.Int32 o j Stack Heap 123 123 Données dynamiques en C int *pInt; // global pointer var Func1(int intArg) Memory …FFFF Stack { int IntLocal; // functions’ lif etime IntLocal = IntArg; (Fragments During Execution) Heap } main() { pInt = malloc(sizeof(int)); // lives until free() Static Data Func1(1); } Code …0000 Données dynamiques en C# Class Class1 { public static int IntStatic = 1; // global var public int IntInstance; // object’s lifetime Memory …FFFF Stack public Method1(int intArg) { int IntLocal; // method’s lifetime intLocal = intArg; } JIT Cache Heap GC Pools Static Data Metadata Map Code } Class1 NewClass1 = new Class1; // create object Class1.Method1(1); …0000 Implémentation & Héritage /*** JAVA ***/ class A {} interface I {} interface J {} class B extends A implements I, J {} /*** C# ***/ class A {} interface I {} interface J {} class B : A, I, J {} .NET-Types non disponibles en Java u Delegates & Events: QQchoseSePasse JeRéagis JEcouteEtRéagisAuxEvts class JEnvoieUnEvt{ ... public event FctADeclancherQuandQQchoseSePasse QQchoseSePasse; public delegate void FctADeclancherQuandQQchoseSePasse (int param); ... } } class JEcouteEtRéagisAuxEvts{ ... JEnvoieUnEvt Sender; // + création etc. ... Sender. QQchoseSePasse += new FctADeclancherQuandQQchoseSePasse (this.JeRéagis); Public void JeRéagis (int x){…………….} } JEnvoieUnEvt QQchoseSePasse Je m‘abonne (+=) .NET-Types non disponibles en Java u Enumerations (value type): enum Color : byte { RED = 1, BLUE = 2, GREEN = 3 }; u u Jagged & unjagged Arrays: Structs (value types): • Structs = sealed • Pas d’héritage int[ ]array1=new int[ ]{1,2,3}; int[ ][ ]array3=new int[3][ ]; array3[0]=new int[ ]{1,2,3,4}; array3[1]=new int[ ]{5,6,7,8,9}; array3[2]=new int[ ]{10,11}; struct Point { int x, y; ... } Point p = new Point(10, 20); point 10 20 point 20 10 C# : gestion des caractères spéciaux u Eviter la protection ('\n \t \\' …) via « @ » : string texte01 = "c'est pas toujours très\nlisible\t\tdes textes formatés\ncomme ça"; string texte02 = @"c'est pas toujours très lisible …………. des textes formatés comme ça"; Les mots clés C# Java using import Main main Console.WriteLine System.out.println Console.Write System.out.print string String System.Object java.lang.Object is instanceof public public private private internal * protected* sealed final static static this this base super unObjet as UneClasse (UneClasse)unObjet cast ToString() toString() ... ... Points en commun & Differences u points en commun : • Interfaces = « abstract classes » • Classe = héritage simple • Interface = héritage multiple • Variables initialisées par défaut • Concept des Namespaces (Java-Package & .NETNamespace) • Même visibilité des attributs (public, private, ...) u Différences • .NET : pas de différence entre types primitifs & classes. • Multiple langages supportés en .NET • Java : toute méthode = implicitement virtuel. • .NET : explicite (virtual, override, new). • Java : packages = répertoire, pas .NET Metainformation u Java & .NET ont des APIs réflection • Lire & instancier des classes u .NET permet l’annotation du code (classes, members, operations) avec la notion d’Attributes .NET Exemples u Using an Attribute [AuthorIs(„Michael“)] class MyClass { ... } • Il y a des attibuts par défaut (WebService, WebMethod, ...) u Définir un Attribut : [AttributeUsage(AttributeTargets.All)] public class AuthorIsAttribute : Attribute { private string m_Name; public AuthorIsAttribute(string name) { m_Name = name;} } .NET Exemples u Utiliser l’information de type using System; using System.Reflection; namespace ComponentClient { class Client { static void Main(string[] args) { Assembly a = Assembly.LoadFrom("Component.dll"); Type [] allTypes = a.GetTypes(); Type t = allTypes[0]; object o = Activator.CreateInstance(t); MethodInfo mi = t.GetMethod("algorithm"); double d = (double) mi.Invoke(o, new object[]{21.0}); } } } Java Example u Utiliser l’information de type : • Note : packages <> assemblies!! import java.lang.reflect.*; try { Class c = Class.forName(„MyPrintComponent“); Object o = c.newInstance(); Method m = c.getMethod(„print“, new Class[]{ String.class }); m.invoke(o, new Object[]{„Hallo, Java!“}); } catch (Exception e) { } Points en commun & Différences u u Points en commun : • Les APIs se ressemblent Différences: • .NET : meta information avec les attributes • La réflection en Java est parfois + compliquée (à cause des classes et types primitifs) • .NET permet la création de nouvelle classe « at runtime » & de les instancier à l’intérieur d’un assembly. Statements u u Les 2 PFs ont les mêmes instructions de programmation ( statements) Différences: string name = address.name; switch (name) { case “Maier”: Console.WriteLine(“Nice to meet you, Hans!”); break; case “Mueller”, case “Huber”: Console.WriteLine(“You owe me some money!”); break; default: Console.WriteLine(“I don’t know you”); break; } Statements u Différences: • Iterators en .NET: foreach (Elem i en MyContainer) { Console.WriteLine(i); } ... class MyContainer : IEnumerable, IEnumerator { public IEnumerator GetEnumerator() { return (IEnumerator)this; } public void Reset() { ... } public bool MoveNext() { ... } public object Current { get { ... } } } Statements u Différences: • Iterators en Java: for (Iterator i = MyContainer.iterator(); i.hasNext();) doSomething(i.next()); ... class MyContainer implements Iterator { public boolean hasNext() {…} public Object next() {...} public void remove() {...} public Iterator iterator() { return this; } } Statements u Différences: • Propriétés en .NET où Java utilisent des conventions de codage Class MyClass { ... public double x { set { if (value < 0) throw new ArgumentException (“< 0”); m_x = value; } get { return m_x; } } ... // User: MyClass m = new MyClass(); m.x = 22; Statements u Différences: • .NET supporte des Indexers, pas Java object[17] = 22; // en class: Int [] m_a; public double this[int pos] { get { return m_a[pos]; } set { m_a[pos] = value; } } • Les Indexers marchent aussi avec les non entiers comme les Strings Statements u Différences: • .NET supports la surcharge des opérateurs public static Point operator+(Point op1, Point op2) { return new Point(op1.x+op2.x,op1.y+op2.y); } ... Point p = new Point(1,2) + new Point(2,3); Statements u Différences: • .NET permet le passage par référence des arguments de méthodes class Test { public void Print(int i) { Console.WriteLine(i); } public void Inc(ref int i) { i++; } public int SetInitial(out int i) { i = 42; } ... } Test t = ...; int i; t.SetInitial(out i); t.Inc(ref i); t.Print(); Classes de bases Pas de grandes différences … .NET Java GUI Windows.Forms Web.Forms SWING, AWT Communication System.Net: Connection, HttpWebRequest, ... Java.net: Sockets, URL, ... Container System.Collections: ArrayList, BitArray, Maps, Queue, List, Stack java.util: Lists, Maps, Sets, Trees, Vectors Les threads C# void P() { ... thread actions ... } Thread t = new Thread(new ThreadStart(P)); Java class MyThread extends Thread { public void run() { ... thread actions ... } } Thread t = new MyThread(); Synchronisation de méthodes u C# public void WithdrawAmount(int num) { lock(this) { if(num < this.amount) this.amount -= num; } } u Java public void withdrawAmount(int num) { synchronized(this) { if(num < this.amount) this.amount -= num; } } points en commun & Différences u u points en commun : • Threading quasi similaire • Les 2 ont la notion de gestion & synchronisation Différences: • Synchronisation Java mieux intégrée dans le langage • Java = meilleure synchronisation & communication inter-thread (wait, notify, ...). Packaging u u Java • Fichier .class pour chaque classe. • Regroupement de ces fichiers (.jar). • .class et .jar doivent être dans le « classpath ». .NET • Regroupement en Assemblies (.EXE, .DLL) • Gestion des versions - Le CLR s’occupe de « loader » le bon assembly en fonction de la version. - Un même processus peut même utiliser deux versions différentes d’un même assembly , en même temps… - Élimine les problèmes de compatibilité entre différentes versions d’une même DLL. • GAC: Global Assembly Cache - Endroit où sont stockés les assemblies. - Géré par le framework. Assemblies en .NET u Assembly = ensembles de types name Sharedname version Hash Files Manifest Custom Attributes Type 1 IL-Code Type 2 IL-Code Type 3 IL-Code Referenced Security Assemblies Product Information Metadata Module 1 Resources Types Assemblies en .NET u u « Private Assemblies » pour un seul programme « Shared Assemblies » tockées dans un cache commun & utilisable par plusieurs applications. • Signées par une clé • Versionnées !! Java JAR files u .jar files sont l’équivalent des .NET‘s assemblies • « shared » ou « private » • Peuvent être signées u Ils contiennent des • types • ressources • (metadata dans un fichier manifest)?. u Pas de notion de versioning ! Points en commun & Différences u points en commun : • Assemblies & JAR = composants de déploiement u Différences: • Support de la version en .NET (side-by-side exécution) Composant serveurs en .NET u Notion de composants en EJB/COM+ u Pour utiliser des services du serveur d’application comme la synchronisation,les transactions, ou le pooling, les services COM+ peuvent être utilisés u COM+-Interop offrent ces fonctionnalités Gestion des composants : managed / unmanaged .NET propose le même ensemble de services sous l'appellation de ServicedComponent. Le conteneur utilisé dans le Framework est COM+ COM+ fonctionne dans un environnement non managé avec une gestion de type différente de celle de .NET (Common Type System) Dans J2EE les transactions sont gérées en Java à l'aide des API JTA/JTS et l'ensemble des composants s'exécutent dans un seul et même environnement managé. Java Component Models u u Client Components & Server Components JavaBeans = Components Clients • classes Java normales suivant certaines conventions public class MyJavaBean { private int color; public void setColor(int v) { color = v; } public int getColor() { return color; } // a lot of more ... } // BeanInfo class not shown here! Server Components en Java u Enterprise JavaBeans (EJBs) résident toujours dans un Container qui offrent les fonctionnalités JNDI Naming Service Deployment Descriptor 1) lookup home 2) create bean 2”) find bean EJB Context EJB Home EJB Jar Remote Bean Home Interface new 4 Client EJB Object 4) remove 3) Use bean Remote Bean Interface ejbCreate ejb... EnterpriseBean Bean Instance bean-methods EJB Server Run-time Application (Container) Server Components en Java u 4 Types de Beans • Stateless Session-Beans (Service Components) • Stateful Session Beans (Session Components) • Entity-Beans (Entity Components) • Message-Driven Beans (asynch. Service Components) u 1 bean est (théoriquement) portable de container à container (Application Servers) des différents éditeurs. Points en commun & Différences u u points en commun : • Les « Server Components » sont disponibles (Assemblies + COM+, EJB). • Interopérabilité avec les anciens composants en .NET en utilisant COM+, en Java en utilisant CORBA) Différences: • Les EJBs sont + matures • Des APIs existent pour la connexion aux legacy systems (Java Connector API) Accès BD en .NET : ADO.net Presentation Tier Windows Forms MyApp.Exe DataSet Business Tier Web Forms Internet Intranet IE Data Object (Class) DataSet DataSet Business to Business (BizTalk, for example) Data Tier Data Adapter XML Data Adapter Accès BD en .NET : ADO.net Controls, Designers, Code-gen, etc XSL/T, X-Path, etc DataSet Dual View DataAdapter DataReader XmlDataDocument XmlReader Command Connection .NET Data Provider Travail sans conexion possible Accès BD en .NET : ADO.net DataSet DataTable DataColumn DataTable DataRow Relations XML Schema Constraints Exemple .NET using System; using System.Data; using System.Data.SqlClient; string myConnection = “server=myserver;uid=sa;pwd=;database=StockTickerDB”; string myCommand = “SELECT * from StockTable”; SqlDataSetCommand datasetCommand = new SqlDataSetCommand (myCommand, myConnection); DataSet myDataSet = new DataSet(); datasetCommand.FillDataSet(myDataSet, “StockTable”); DataTable myTable =ds.Tables[“StockTable”]; foreach (DataRow row en myTable.Rows) { Console.WriteLine(“Value of {0} is {1}”, row[“LongName”], row[“Value”]); } ADO.NET u u ADO.NET est basé sur XML (XML Infoset) • DataSet créé dynamiquement suivant « XML schema » pour stocker les données • Les données relationnelle et les données XML sont traitée de la même façon ! ADO.NET peut travailler offline une fois que les données sont chargées • La MAJ est rendue automatique par les DataSets L’architecture JDBC Application u u u u u JDBC Driver Le code Java appelle les libraries JDBC JDBC charge un driver Driver “parle” avec les différentes bases de données +ieurs drivers sont possibles -> + d’une BD Idéal : la BD peut être changée sans toucher au code ! Accès aux sources de données en Java Accès aux sources de données en Java u Java utilise JDBC pour accéder aux données relationnelles Application Statement Resultset Prepared Statement Callable Statement Connection Driver Manager JDBC/ ODBC Bridge ODBC Driver ODBC DB Exemple Java import java.sql.*; // without error hadnling: Connection con=DriverManager.getConnection(„jdbc:odbc:stocks,““,““); Statement stmt = con.CreateStatement(); ResultSet rs = stmt.executeQuery(„SELECT * from stocks“); while (rs.next()) { System.out.println(rs.getString(„COMPANYNAME“)); } rs.close(); stmt.close(); con.close(); Accès BD en Java u Il y a d’autres APIs possibles : • « Embedded SQL » dans les formulaires SQLJ (JDBC utilisé en interne) • APIs ODBMS propriétaires • API JDO pour offrir la persistance pour les objets Java • XML est géré différemment • « Java Connector API » offre l’accès aux legacy systems « orientés connexion » (ex: SAP R3) Points en commun & Différences u points en commun : • Découplage entre le modèle concret de données et le modèle de programmation (DataSets & ResultSets) u Différences: • ADO.NET est basé sur XML, JDBC est + « relationnel » • JDBC = orienté connexion, ADO.NET = connecté ou déconnecté • .NET DataSets ˜ In-Memory-Database-Cache. XML & .NET u .NET = XML-centric • Web Services (SOAP) • Fichiers de Configuration • Datasets pour les accès aux BD (ADO.NET) u Note : de nombreuses caractéristiques de .NET sont basées sur l’XML infoset (« XML semantics ») XML & .NET u The System .Xml Namespace = classes de gestion du XML • DOM : XmlNode & fils • XPath & XslTransform • XmlTextReader & XmlTextWriter similaire à SAX en ce sens qu’ils sont tous deux « stream-based » XML & Java u +ieurs outils standards : • DOM, SAX • Xerces/Xalan, JDOM • JAX{P,M,B,R,RPC} • Castor u Mais les librairies Java‘s n’ont pas été conçues avec XML comme base (Java est trop vieux … J ) u JAXP (Java API 4 XML Parsing) supporte DOM & SAX. u En cours de développement : • JAXM (Java API pour le XML Messaging) • JAXB (Java API pour le XML Data Binding) • JAXR (Java API pour le XML Registries) • JAX/RPC (Java API pour le XML based RPC) XML & Java Remoting en .NET Application Domain A Application Domain B Client Serveur Transparent Proxy Real Proxy Envoy Sinks Channels Formatters Object Context Sinks Server Context Sinks Network Channels Formatters Remoting en .NET u u u .NET Remoting propose le formatage et le transport des appels distants • actuellement TCP & HTTP transport • Format binaire & SOAP Les Contextes sont automatiquement propagés Les options de « lifecycle management » sont très simples (comparé à EJB & CORBA) • Singleton (1 objet pour tous les appels) • SingleCall (1 nouvelle instance pour chaque appel) Remoting en .NET u Les Objets peuvent être marshallés par valeur (Serialisés) u Les invocations asynchrones sont facilement possibles sans toucher au serveur Points en commun & Différences u points en commun : • Le concept u Différences : • Les appels asynchrones ne sont pas facilement possibles en Java Remoting en Java u +ieurs possibilités : RMI/CORBA • RMI utilise JRMP ou IIOP comme protocole de transport Client Stub Server Stub/Skeleton-Layer Remote Reference Manager Transport Layer Skeleton IIS & ISAPI ASP.NET request *.aspx *.asmx *.ashx HTTP Request Object named pipes ASP.NET ISAPI Extension Manager ASPNET_ISAPI.DLL CLR ASP.NET ISAPI extension INETINFO.EXE ASPNET_WP.EXE IIS worker process ASP.NET worker process COM+ runtime Win2k Server aspnet_state.exe (ASP.NET session cprocess) COM+ Context ASP.net Presentation Layer Business Logic Layer .NET CLR Response Request 4. Execute Class IIS & ASP.NET 9. Response 1. Request ASPX Code Behind Renders Self XML WS SOAP ASPX Page Business Object Web Service ASMX Code 8. Returns Class VB.NET 2. Invokes 5. Invokes Web Service Proxy 3. Calls Web Service Enterprise service Proxy ASP.NET CLR INETINFO.EXE ASPNET_WP.EXE IIS worker process ASP.NET worker process COM+ runtime Win2k Server 6. Calls COM+ Object ASP.NET ASP.net Button code ... Button List List code ... Text Text code ... Browser ASP.NET Event handlers ASP.NET Example u A simple login screen: ASP.NET <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="LoginPage.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <body> <form id="Form1" method="post" runat="server"> <asp:Label id="TitleLabel" runat="server">Please specify your name & password</asp:Label> <br> <asp:Label id="LoginLabel" runat="server">Login</asp:Label> <br> <asp:TextBox id="LoginText" runat="server"></asp:TextBox> <asp:RequiredFieldValidator id="RequiredFieldValidator" runat="server" ErrorMessage="You need to specify your name" ControlToValidate="LoginText"></asp:RequiredFieldValidator> <br> <asp:Label id="PasswordLabel" runat="server">Password</asp:Label> <br> <asp:TextBox id="PasswordText" runat="server" TextMode="Password"></asp:TextBox> <br> <asp:Button id="EnterButton" runat="server" Text="Open the entrance" ToolTip="Press this after you have specified login & password"></asp:Button> <br> <asp:Label id="MessageText" runat="server"></asp:Label> </form> </body> </HTML> ASP.NET namespace LoginPage { public class WebForm1 : System.Web.UI.Page { protected TextBox PasswordText, LoginText; protected Button EnterButton; protected Label MessageLabel; private void InitializeComponent() { this.EnterButton.Click += new System.EventHandler(this.EnterButton_Click); this.Load += new System.EventH&ler(this.Page_Load); } private void EnterButton_Click(object sender, System.EventArgs e) { if (!(LoginText.Text.Equals("aladdin") && PasswordText.Text.Equals("sesam"))) { MessageLabel.Text = " Wrong name or password!"; } else { Session["user"] = "aladdin"; Response.Redirect("UserArea.aspx"); } } } } Java Server Pages & Servlets u Java permet également le « server-side scripting » • Les JSPs sont basés sur les Servlets (1) get a.jsp Client (5) HTTP file Web Server (2) process Other Components JSP (3) gen. Servlet Servlet Impl. (4) result Servlet JVM Database Exemple Java Java Example u Exemple Bean & JSP : // Datei MyPerson.java package MyPackage; import java.lang.*; public class MyPerson { public String getFirstName() { return "Michael"; } public String getLastName() { return "Stal"; } } // Datei MyTest.jsp: <HTML> <BODY> <jsp:useBean id="person" scope="session" class="MyPackage.MyPerson"/> Your name is: <br> <jsp:getProperty name="person" property="firstName"/> <br> <jsp:getProperty name="person" property="lastName"/> </BODY> </HTML> 9iAS et J2EE internet WebCache Mod_file Mod_sql http listener (Apache) Mod_sso LDAP server Mod_oc4j AJP Static HTML Files< Dynamic HTML files Stored Procedures Servlet Servlet Servlet OC4J EJB EJB EJB OC4J Web Services dans 9iAS Stored Proc. Web service Stored Proc. Servlet Java Class Http Webservices Servlet Servlet Integration Hub Adapter OC4J EJB Web Service 9iAS OC4J EJB JMS Legacy Application Points en commun & Différences u points en commun : • Pages = près compilées pour accélérer l’accès • Même syntaxe & concepts • ASP.NET propose de composant graphiques avec les Webcontrols, Java a lesTaglibs. u Différences: • Les différents langages de .NET peuvent être utilisés pour le scripting ASP.NET • Servlets/JSP sont disponibles sur un grand nombre de serveurs différents • Beaucoup d’implémentations et d’outils en Java Web Services en .NET u .NET : manière intégrée de créer des WS namespace WebService1 { public class Service1 : System.Web.Services.WebService { // lot of stuff omitted [WebMethod] public double DM_to_Euro(double value) { return value / 1.95583; } [WebMethod] public double Euro_to_DM(double value) { return value * 1.95583; } } } Web Services en .NET u Créer un WS est très simple : • (l’ex est simplifié …) localhost.Service1 s1 = new localhost.Service1(); double result = s1.Euro_to_DM(200); u Webservices = un moyen de faire du « remoting » u Mais avec .net : • Pas de compatibilité ebXML • Seulement implémenté sur MS server Web Services en Java u u Sun ONE fournit une API Web Service pour Java compatible ebXML +ieurs solutions propriétaires : • SOAP toolkits: - Apache SOAP - IBM Web Services Toolkit - GLUE • Intégrées aux serveurs d’application u Silverstream IONA Weblogic ... Sun travaille à des APIs standards • JAXM Points en commun & Différences u points en commun : • .NET & Java essaient d’être compatibles aux standards (SOAP, WSDL, UDDI). • La gestion est similaire : générateurs de WSDL qui créaient des proxies u Différences: • Java a différentes solutions où .NET n’en a qu’une • Actuellement les standards sont interprétés différemment, ce qui rend l’ Interop Java-.NET limitée. Mais il y a des chances que cela change. Enterprise APIs u Naming: • JNDI en Java (interface à CORBANaming, LDAP, ...) • Active Directory en .NET (Windows) u Middleware orientés messages : • JMS en Java • JAXM à l’horizon (XML based messaging) • .NET peut utiliser MSMQ, & le remoting peut être utilisé de manière asynchrone Legacy-Integration u u u .NET utilise le Microsoft Host Integration Server. Java utilise la Connector API Java offre une solution + simple. Les Connectors sont rapidement implémentés ... De l’Interopérabilité u Java offre un accès à C/C++ via JNI (Java Native Interface). Solution complexe de call-in, call-out. u .NET offre la primitive PInvoke: class PInvokeTest { [DllImport("user32.dll")] static extern int MessageBoxA(int hWnd, string m, string c, int t); static void Main(string[] args) { MessageBoxA(0, "Hello DLL", "My Window", 0); } } COM / .net Common Language Runtime Object COM Server Runtime Callable Wrapper Reference Counted Client Traced Reference De l’Interopérabilité u En .NET l’interopérabilité est possibles entre COM & COM+ Services. u Java offre une interopérabilité CORBA u En .NET l’interop entre les langages .NET est automatique et facile • Assemblies, class libraries… • Certains langages doivent être un petit peu adaptés (ex Managed C++ n’a pas d’héritage multiple) Offre Java u Des variantes de Java • J2SE (Java 2 Platform Standard Edition) • J2EE (Java 2 Platform Enterprise Edition) • J2ME (Java 2 Platform Micro Edition) • JavaCard J2ME 2 Profiles 1. Foundation Profile • • • • 2. Mobile Information Device Profile (MIDP) • • • • + Configuration: Connected Device Configuration (CDC) API de base + Machine Virtuelle CVM. Ensemble d’APIs supplémentaires. Cible: Télévision digitale, télétélé-avertisseurs, PDA, Cellulaires Cellulaires--Web Web.. Ressource: 1024K minimum ROM, 512K minimum RAM, Connexion réseau, Pas de GUI. Configuration: Connected Limited Device Configuration (CLDC) Api de base + Machine virtuelle KVM. Ensemble d’APIs supplémentaires. Cible: Cellulaires, PDA. Ressource: Aussi peut que 160K au total (RAM + ROM). Le J2ME Wireless Toolkit pour développer et tester des applications J2ME. Vision MSFT Today Client Application Web Application Embedded Visual Tools eVB and eVC++ Device-specific Active Server Pages Visual Studio & .NET Compact Framework Visual Studio & Mobile Internet Toolkit Vision MSFT Visual Studio .NET eVC Microsoft Smartphone OS Other Windows CE Devices Notebook PCs .NET Compact Framework Windows CE .NET Framework Tablet PCs SDKs Pocket PC + PPC Phone Edition … Windows XP OS SDKs Tool + Smart Device Extensions Managed .NET CF (VB .NET, C# etc.) eVB eVC eVC and eVB Smart Client Technology Choices Native ou Managed native eVC Time Browse Vision MSFT : accès aux données Mobile Browser Smart client .NET Compact Framework 4. ADO.NET Local Data WAP, HTML etc. ASP.NET, Mobile Controls Presentation Layer 1. XML Web services XML Web Services 3. Direct SQL Server access SQL Server CE SQL Server 2. Synchronization Windows CE (http) Windows Server Projet W3H Dynamic pages Business Logic Layer Web Services I/F Presentation Layer Data Access Layer Medasys data access Component Business object Vidal data access Component Remote Data Source .net Client Browser HTTP Presentation Layer Business Logic Layer Data Access Layer COM+ (WebService Proxy) Remote Data Source SOAP WebService I/F ASP.NET (WebServices) ASP.NET ASMX class (MobileWebForm) SOAP ASPX class DCOM Business Class HTML, WML, CHTML, .... COM+ (ADO.NET) ADO OleDBcompatible DB .net Presentation Layer Business Logic Layer Remote Data Source .NET CLR & Enterprise Service .NET CLR Response Data Access Layer .NET Server / DataBase Request 4. Execute Class IIS & ASP.NET 1. Request ADO.NET DataAdapter Net8 Stored Proc WS SOAP Web Service I/F 9. Response ASPX Code Behind Renders Self WS SOAP WebServic es I/F Business Object WebServi ce Proxy ASMX Code XML TCP ASPX Page Class VB.NET 8. Returns 7. Access Data 2. Invokes Web Service Proxy 5. Invokes Data Access object 3. Calls Web Service Enterprise service Proxy 6. Calls COM+ Object C# Class Extend ServiceComponent Data Access Layer Data Access Layer u u u u COM+ is deeply integrated into the CLR All COM+ services made available to CLR COM+ types defined within the EnterpriseServices namespace COM+ = COM (object-oriented system) +MTS (Transaction Server) +Services (Queued Component,COM+ event) .NET CLR & Enterprise Service ADO.NET DataAdapter WebService Proxy 7. Access Data Data Access object C# Class Extend ServiceComponent ASP.NET CLR ASPNET_WP.EXE ASP.NET worker process COM+ runtime (DLLHost.EXE) Win2k Server Exemple .net : le pooling Business Logic Layer .NET CLR Client creates "new" instance 4. Execute Class Data Access Layer .NET CLR & Enterprise Service ADO.NET DataAdapter 7. Access Data WebServices I/F Business Object ASMX Code Class VB.NET WebServi ce Proxy Instance is served from pool Data Access object C# Class Extend ServiceComponent 5. Invokes Enterprise service Proxy 6. Calls COM+ Object COM+ manages x active instances COM+ runtime (DLLHost.EXE) Vue globale ASP.NET Presentation Layer Response .NET CLR Request INETINFO.EXE IIS worker process ASP.NET Data Access Layer Business Logic Layer .NET CLR & Enterprise Service 4. Execute Class 9. Response Remote Data Source .NET Server / DataBase ADO.NET DataAdapter 1. Request Renders Self ASPX Page ASPX Code Behind XML 2. Invokes WS SOAP 8. Returns Web Service Proxy 3. Calls Web Service Web Services I/F ASMX Code Business Object Class VB.NET TCP 7. Access Data Data Access object Enterprise service Proxy 6. Calls COM+ Object C# Class Extend ServiceComponent CLR ASPNET_WP.EXE (ASP.NET worker process) (DLLHost.EXE) Win2k Server Stored Proc Web Service Proxy 5. Invokes COM+ runtime Net8 WS SOAP Web Service I/F J2EE Client Browser Presentation Layer Business Logic Layer Data Access Layer EJB HTTP (WebService Proxy) Servlets SOAP Java Server Pages Remote Data Source SOAP WebService I/F Web Services (Java Class) Business Class RMI / IIOP HTML, WML, CHTML, .... EJB (JDBC) JDBC Net8 compatible DB J2EE Presentation Data Access Business Logic OC4J OC4J Response Remote Data Source Request Apache & OC4J 4. Execute Class 9. Response 8. Forward JSP (Taglibs) 1. Request JDBC Web Service I/F Business Object WS SOAP WebS ervice I/F TCP WebServi ce Proxy Java Class Java Class 7. Access Data 2. Invoke WebServi ce Proxy Stored Proc RMI WS SOAP JSP 3. Calls Web Service Net8 5. Invokes EJB Home/Int erface 6. Calls EJB RMI EJB Data Access Oracle 9ias OC4J Presentation OC4J OC4J Business Logic Data Access Remote Data Source .NET Server / DataBase Response Request 4. Execute Class 9. Response 8. Forward JSP (Taglibs) JSP 1. Request 2. Invoke 3. Calls Web Service WebService Proxy WS SOAP JDBC RMI Web Service I/F WebService Proxy Java Class 5. Invokes EJB Home/Interface 9IAS WE 7. Access Data 6. Calls EJB RMI 9IAS Any OS Stored Proc TCP Business Object Java Class Net8 EJB Data Access WS SOAP Web Service I/F Interop u u u u Presentation Layer : DotNet Business Logic & Data Access : J2EE Response Web Service: String array serialized in XML WS Proxy : deserialized XML Stream on String Array Presentation Business Logic ASPX Code Behind DataSet Object WebService String Array Proxy Object WS SOAP String Array Web Service I/F Data Access Interop u u u u Presentation Layer : J2EE Business Logic & Data Access : DotNet Response Web Service: DataSet serialized in XML WS Proxy : deserialized XML Stream on XmlElement Presentation JSP Business Logic Vector Object WebService XmlElement Object Proxy WS SOAP DataSet Serialize Web Service I/F Data Access Résumé J# C# VB .NET Managed C++ Java MSIL Byte Codes CLR JRE / JVM BCL Core Lib Windows OS .NET Mac Win Unix Linux Java Résumé Browser Device HTML, XML, ADO.NET SOAP ASP.NET HTTP or ISAPI Data Web Service MSMQ DCOM Managed Object ADO.NET Security Managed Object Transactions IIS Concurrency Context .NET Framework Windows JDBC Browser HTML, XML HTTP Device Servlet or JSP RMI/IIO P HOME REMOTE Data Entity Bean JDBC Security Transactions HTTP Server Concurrency JVM Context Any OS Session Bean Containers EJB Server App Server Exemple d’architectures J2EE with JSP/ Servlets Presentation Business Logic Data JSP/Servlets JavaBeans (Struts & Tomcat) EJBs (JBoss) Runs on most major web servers J2EE JDBC Support for Hypersonic most databases via Type 4 SQL drivers .NET with ASP.NET ASP.NET IIS Web Forms Server Controls Code-Behind CLR C# Assembly ADO.NET Use COM+ via Serviced Components SQL Server 2000 Stored Procedures Downhill Bikes – J2EE Business Logic & Messaging Fabric Presentation EJB Container Response EJB Container Web Server & Servlet Engine Resources 8a. Read Data Request Data Access Object 13. Response 11. Forward 1. Request JSP (Taglibs) 7. Execute Biz Method 12. State? Action Servlet 4. Dispatch XML Action to Form & Forward Mappings Data Integration & Persistence 2. Fill State 3. Validate Business Service Façade (SLSB) 9a. Query Database JMS 8b. CRUD Data Directory RMI 9b. Get/Set Remove <<uses>> <<uses>> <<creates>> Value Object <<uses>> Entity Bean Data Connection Factory Connection Pool Action Form Action Object 10. Fill State Key <<uses>> 5. Execute Use Case Object <<uses>> Value Object M Model Pattern V View Pattern C Controller Pattern P Other Pattern RMI 6. Execute Biz Method Test Biz Methods Test Client Downhill Bikes - .NET Business Logic & Messaging Fabric Presentation Data Integration & Persistence .NET & Windows Response ADO.NET Request Any Other Use Case Facade IIS & ASP.NET 1. Request ASPX Code Behind 8. Response Renders Self XML DataSet WS SOAP ASPX Page 7. Returns Business Service WS Facade ADO DataAdapter 5. Accesses Data Use Case 4. Execute Use Case <<creates>> Use Cases Facades SQL DataProvider TCP <<uses>> SQL Connection XML Schema .XSD 2. Invokes WS Façade Proxy 3. Calls Web Service App. Config. Web.config Key <<generates>> XML DataSet M Model Pattern V View Pattern C Controller Pattern P Other Pattern 6. Query MS SQL Architecture.NET Eléments de programmation Exemple:: Exemple 1. User Interface (WEB PAGE) OrderProcess.aspx Separation de la Presentation UI & Presentation Logic en 2 fichiers 2. WEB PAGE CODE (“Code Behind”) OrderProcess.aspx.cs Business Logic 3. BUSINESS CLASS (Order Object) Order.cs Presentation ADO.NET Data Tier 4. Stored Procedures upOrdersAdd database Architecture J2EE Separation du Code Presentation & Busines Eléments de programmation Exemple:: Exemple 1. User Interface (HTML with JSP code) OrderProcess.jsp 2. User Interface Handling Tier (Servlet Code) OrderProcServlet.java 3. BUSINESS LOGIC OBJECT (EJB Session Bean) OrderSession.Java EJB Application Server 4. BUSINESS DATA OBJECT (EJB ENTITY BEAN ) OrderEntityEJB.java database RMI-over -iiop RMI-over -iiop JDBC/ ODBC Architecture J2EE Data Logic Presentation Logic <<Entity EJB>> <<HTML>> <<HTML>> <<build>> <<JSP>> <<Entity EJB>> <<JSP>> DB Server <<forward>> <<link>> <<Servlet>> <<Session EJB>> <<Session EJB>> <<Servlet>> Business Logic Modèle typique en .NET Presentation .Aspx .aspx.cs Business Logic Business Object Classes Server 1 database Stored Procedures RDBMS Engine Modèle typique en .NET Load Balancer Presentation Presentation Business Logic Business Logic Server 1 .NET Managed Components Server 2 State Server database Modèle typique en J2EE Server A Presentation JSP SERVLETS Server 1 SESSION BEANS Business Logic database ENTITY BEANS DATABASES Modèle typique en J2EE NLB Presentation Ejb Server 1 Application Business Servers Presentation Server 2 Logic Business Logic Database PROXY Database PROXY database JSP SERVLETS SESSION BEANS ENTITY BEANS RDBMS Engine .NET &/ou Java ? u u u u .NET est un produit, J2EE est une spécification Tous les 2 sont fortement centrés sur le WEB Pour de gros systèmes transactionnels, J2EE est + mature, mieux adapté Les notions « Java est indépendant des PF » & .NET est « indépendant des langages » sont à prendre avec précaution: • L’ECMA travaille à la standardisation de C# et de certaines parties de .NET • D’autres langages peuvent être compilés pour la JVM .NET &/ou Java ? u L’indépendance des langages .NET n’est pas gratuite et n’est pas totalement transparente. #pragma once using namespace System; // .NET mit C++ namespace CPPBase { public __gc class CPPBaseClass { public: virtual System::String __gc* Echo(System::String __gc *s); }; } System::String __gc * CPPBase::CPPBaseClass::Echo(System::String __gc *s) { return s; } u Dans un projet mieux vaut utiliser un seul langage J .NET &/ou Java ? u Windows Applications Ò .NET + que Java (IBMs SWT à suivre …?) u Utiliser Java quand l’indépendance de PF est nécessaire u Java est plus mature (?) u Il y a Java pour .NET (J #) • Mais la syntaxe n’est pas le problème u Web services : .NET est + simple, J2EE + scalable u Les analystes prédisent les 50/50 Le test : version Microsoft Productivity: Performance: Scalability: One third the code 28 times faster 6 times more users Performance J2EE & .NET (version MSFT) 2781 2800 8 CPU “Nile” Application Benchmark 4 CPU 2400 2 CPU Pages Served per Second 1989 2000 1600 1240 1154 1200 977 800 623 463 400 291 WebSphere 3.5 JSP on Win 2000 Oracle 8i 436 484 538 231 Microsoft ASP (VBScript) Oracle 8i Microsoft ASP.NET (C#) Oracle 8i Microsoft ASP.NET (C#) SQL Svr 2000 Résumé .NET Java Controller/Owner Microsoft Sun + partenaires Status Produit Spécifications et +ieurs implémentations Langages C#, C++, Eiffel#, VB, .... Java Communication, middleware (RPC, Messaging, Web) .NET Remoting, MSMQ, Web Services (no ebXML) RMI/CORBA, JMS, Web Services Composents Server COM+ Enterprise JavaBeans Support de XML oui En cours d‘intégration Server Pages ASP.NET JSP/Servlets + autres possibles Résumé .NET Java Accès BD ADO.NET (ADO) JDBC / SQLJ & autres Librairies de base System.* java.* GUI-Libs Windows.Forms Web.Forms Swing/AWT Runtime .NET CLR Java JVM Interop (call-in/call-out) PInvoke JNI InteropMiddleware COM/COM+ (COM Interop) CORBA, JMS Legacy Integration Host Integration Server JCA Résumé Area Security Deployment Clustering J2EE u JAAS API u u Deployment Descriptors EAR, WAR, JAR Container-Specific u Container-Specific u .NET u u u u u u u u ASP.NET Form-based Web.config Web.config Machine.config Global.asax XCOPY Deployment Windows.NET DCS SQL Server Historique EJB JMS JDBC JSP JAXP JNDI J2EE J2EE 1996 1997 1998 1999 2000 2001 Microsoft Mar 1992 MTS/COM+ ASP MSMQ ODBC ADSI WinDNA MSXML VS .NET .NET