Académique Documents
Professionnel Documents
Culture Documents
Hassclic 283
Hassclic 283
Laboratoire PRiSM
Université de Versailles-Saint-Quentin
<dntt@prism.uvsq.fr>
Plateforme Java2
Java embarqué ••Java
Java1.0.2
1.0.2
••Java
Java1.1.1
1.1.1, ,1.1.2,
1.1.2,1.1.3,
1.1.3,1.1.8
1.1.8
Par
Pardérivation
dérivationde
delalaclasse
classeThread
Thread Par
Parimplémentation
implémentationde
del'interface
l'interfaceRunnable
Runnable
class
classMonThread
MonThreadextends
extendsThread
Thread class
classMonThread
MonThreadimplements
implementsRunnable
Runnable
{{ {{
////constructeur
constructeur ////constructeur
constructeur
MonThread
MonThread(...) (...) MonThread
MonThread(...) (...)
{{ {{
[...]
[...] [...]
[...]
}} }}
////methode
methode’run’
’run’aasurcharger
surcharger ////methode
methode’run’
’run’aaimplementer
implementer
public
publicvoid
voidrun()
run() public
publicvoid
voidrun()
run()
{{ {{
[...]
[...] [...]
[...]
}} }}
}} }}
Tuyêt Trâm DANG NGOC - Université de Versailles lundi 1 avril 2024
Communication sur IP
Le mécanisme de
port est utilisé afin
de pouvoir
permettre de gérer
plusieurs services
simultanés depuis
une seule interface
réseau.
Architectures
Architecturesmulti-tiers
multi-tiers : architecture
: architecture 1, 2,1,3-
2,
3-tiers
tiers
J2EE : architecture générale
Composants J2EE : Servlets, JSP, EJB, JMS,
JAAS, JAXP, JavaMail, JNDI, etc.
Outils de développement et d’intégration
Produits existants
Conclusion
Navigateur
Présentation
Serveur Web
Traitement
données
Système
de
fichiers
Tuyêt Trâm DANG NGOC - Université de Versailles lundi 1 avril 2024
Architecture 2-tiers
Navigateur
Présentation
Serveur Web
Traitement
données
Base de
Base de données
données
Tuyêt Trâm DANG NGOC - Université de Versailles lundi 1 avril 2024
Architecture 3-tiers
+Dimensionnement Navigateur
+Maintenance
+Fiabilité
+Disponibilité Présentation Serveur Web
+Extensibilité
+développement
Gestion du Traitement Serveur
d’applications
données
- complexité Base de
Base de
données
données
Tuyêt Trâm DANG NGOC - Université de Versailles lundi 1 avril 2024
Plan
Environnement Java
langage objet
simple
portable
robuste
indépendant de l’architecture (code virtuel)
Pour serveurs d’applications réparties
ensemble de services
ensemble de protocoles de communication
Services déclaratifs
Composant
Composant
d’application
d’application
Composant
Descripteur Composant
Descripteur d’application
de déploiement d’application
de déploiement
Descripteur
Descripteur
de déploiement
de déploiement
Composant
Composant
d’application
d’application
Descripteur
Descripteur Composant
de déploiement Composant
de déploiement d’application
d’application
Descripteur Services que le container
Descripteur interpose sur les
de déploiement
de déploiement applications, basés sur le
D’autres services descripteur de déploiement
relatifs à la vie du donné pour chaque
composant : attente composant d’application
de ressources, API services du container Services additionnels
ramasse-miette, etc. fournis par le container et
qui sont généralement
requis par toutes les
Tuyêt Trâm DANG NGOC - Université de Versailles applications
lundi 1 avril 2024 du container
Intégration J2EE
Container
ContainerJ2EE
J2EEWeb
Web
Navigateur
Base Pages HTTP
JSP Servlets
de Répertoire
données
IIOP-RMI
LDAP
JDBC
Container
ContainerJ2EE
J2EEEJB
EJB JCA
Enterprise
Enterprise
Enterprise Bean
Bean
Bean
Enterprise Bean
ERP
Tuyêt Trâm DANG NGOC - Université de Versailles lundi 1 avril 2024
Plan
Connecteurs
JMS JavaMail
Container J2EE
HTTP 1.0
Servlet
Requête Réponse
Service( req,rep)
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
// Prépare la réponse
reponse.setContentType ("text/html");
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
<html>
<!-- Copyright (c) 1999 The Apache Software Foundation. All rights reserved.-->
<body bgcolor="white">
<!– fixer les paramètres de la page
<%@ page language = “JAVA” session = “false” %>
<!– déclarer une variable caractère
<% char c = 0 ; %>
<!– scriptlet code Java
<%
for (int i =0 ; i < 26 ; i++) {
c = (char) (‘a’) + i ;
%>
<!– afficher c
<%= c %>
<% } %>
<jsp:useBean id='clock' scope='page' class='dates.JspCalendar' type="dates.JspCalendar" />
<font size=4>
<ul>
<li> Jour du mois <jsp:getProperty name="clock" property="dayOfMonth"/> </li>
<li> année <jsp:getProperty name="clock" property="year"/> </li>
<li> mois <jsp:getProperty name="clock" property="month"/> </li>
<li> temps <jsp:getProperty name="clock" property="time"/> </li>
</ul>
</font>
</body>
</html>
Interface home
fournit un moyen pour le client EJB de récupérer une
instance d’un EJB
Interface distante
expose les méthodes que le client EJB peut utiliser
Code EJB
implémente l’interface distante et l’interface EJB
approprié (SessionBean ou EntityBean par exemple)
import javax.ejb.* ;
import javax.ejb.spi.* ;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
import javax.activation.* ;
Interface SGBD
Client natif ODBC
Client
Interface SGBD
Client
import java.sql.*;
private void executer (String driver, String chaine_connexion, String login, String password)
{
// On charge le driver
Class.forName (driver) ;
// on se connecte
conn = DriverManager.getConnection (chaine_connexion, login, password) ;
// on initialise le curseur
stmt = conn.createStatement () ;
ORB ORB
import javax.rmi.* ;
import javax.rmi.CORBA ;
import org.omg.CORBA.* ; // RMI-IIOP, IDL
import org.omg.CosNaming.* ; // RMI-IIOP, IDL
Application Java
API JNDI
JNDI SPI
SPI Système SPI
SPI LDAP SPI RMI Autres SPI
de fichiers nommage
CORBA
import javax.naming.* ;
import javax.naming.directiry.* ;
import javax.naming.event.* ;
import javax.naming.ldap.* ;
import javax.naming.spi.* ;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
class ClientDe
{
// Crée une instance EJB “dé” sur le serveur EJB et appelle ensuite la méthode lancer ()
// et enfin affiche le résultat du lancé de dé
public static void main (String[] args)
{
try
{
InitialContext jndiContext = new InitialContext ();
ref = jndiContext.lookup (“jeux/De");
DeHome home= (EnsDe) PortableRemoteObject.narrow (ref, DeHome.class);
Souscrit
Client2
Délivre
message
message
thème Souscrit
Client1 Publie Client3
Délivre
Tuyêt Trâm DANG NGOC - Université de Versailles
message
lundi 1 avril 2024
Cas d’utilisation de JMS
import javax.jms.* ;
begin transaction
...
update table-a
...
if (condition-x)
commit transaction
else if (condition-y)
update table-b
commit transaction
else
rollback transaction
begin transaction
update table-c
commit transaction
import javax.transaction ;
import javax.transaction.xa ;
import javax.transaction.UserTransaction ;
[...]
public void withdrawCash(double amount) {
UserTransaction ut = context.getUserTransaction();
try
{
ut.begin(); updateChecking(amount);
machineBalance -= amount; insertMachine(machineBalance);
ut.commit();
}
catch (Exception ex)
{
try
{
ut.rollback();
}
catch (SystemException syex)
{
throw new EJBException ("Rollback failed: " + syex.getMessage());
}
throw new EJBException ("Transaction failed: " + ex.getMessage());
}
}
[...]
import javax.mail.* ;
import javax.mail.event.* ;
import javax.mail.internet.* ;
import javax.mail.search.* ;
import javax.security.auth ;
import javax.security.auth.callback ;
import javax.security.auth.login ;
import javax.security.auth.spi ;
import javax.security.* ;
import java.io.IOException;
import javax.security.auth.*;
import javax.security.auth.callback.*;
import javax.security.auth.login.*;
import javax.security.auth.spi.*;
import java.io.File;
import java.security.PrivilegedAction;
public class SampleAction implements PrivilegedAction {
public Object run() {
System.out.println("\nYour java.home property value is: " +
System.getProperty("java.home"));
System.out.println("\nYour user.home property value is: " +
System.getProperty("user.home"));
File f = new File("foo.txt");
System.out.print("\nfoo.txt does ");
if (!f.exists())
System.out.print("not ");
System.out.println("exist in the current working directory.");
return null; }
}
}
grant codebase "file:./SampleAction.jar", Principal sample.principal.SamplePrincipal "testUser" {
permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "user.home", "read";
permission java.io.FilePermission "foo.txt", "read";
};
Tuyêt Trâm DANG NGOC - Université de Versailles lundi 1 avril 2024
Java API for XML Processing (JAXP)
import javax.xml.parsers ;
import javax.xml.transform ;
import javax.xml.transform.dom ;
import javax.xml.transform.sax ;
import javax.xml.transform.stream ;
import org.xml.sax ;
import org.xml.sax.ext ;
import org.xml.sax.helpers ;
import org.w3c.dom ;
import org.w3c.dom.html ;
import org.w3c.dom.range ;
import org.w3c.dom.traversal ;
Tuyêt Trâm DANG NGOC - Université de Versailles lundi 1 avril 2024
Java pour XML
Vérification Construction de
soumission des données la requête d’insertion
d’une fiche insertion
de renseignement de la fiche
Servlet JDBC
de fiches
Message Insertion
d’erreur
génération de
page d’erreur
JSP SGBD
EJB
d’applications
BeanSession
Bean Session
BeanSession
Bean Session
Bean
Bean
Entité
Entité
Bean
Bean
Entité
Entité
JDBC
de donnes
Serveurs
Base de données
Mainframe
relationnelles
Tuyêt Trâm DANG NGOC - Université de Versailles lundi 1 avril 2024
Exemple d’application en entreprise
récupérer récupérer
classes classes
recupérer classes
Servlet EJB EIS
de classes Classes
renvoie renvoie
Listes de classes classes
classes voir pas de
présentation notifica notifica
liste de classes tions tions
JSP JMS
Service de
cryptographie
Interface et classe de
certificat
Classe et interface de
gestion de clef