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