Vous êtes sur la page 1sur 4

UNIVERSITE DE BOUMERDES M’HAMED BOUGARA

FACULTE DES SCIENCES, DEPARTEMENT D’INFORMATIQUE


Spécialité : M2-TI / Année universitaire 2020-2021 (S5)
Module : Technologies de composants

TP 4

Objectifs du TP :
- Créer composant serveur.
- Créer un client distant pour accéder à une fonction donnée.
- Utiliser l’introspection pour déterminer les propriétés d’un JavaBean.

L’application à réaliser est constituée à base d’un composant serveur et un client distant qui demande une
authentification pour accéder à un service d’introspection qui permet de déterminer de façon dynamique les
caractéristiques d'un JavaBean (les propriétés, les méthodes et les événements).
Etape 1 : Création de composant serveur :
Le JavaBean serveur : où c’est un projet sous forme d’un Bean en réseau.
package server;
import java.beans.*;
import java.io.Serializable;
import java.io.*;
import java.net.*;
public class BeanServer implements Serializable {
private static String key = "123456";
public BeanServer(){
}
public static void main(String[] args) throws IOException{
ServerSocket listener = new ServerSocket(9090);
try{
System.out.println("server started");
while (true){
System.out.println("server listening");
Socket socket = listener.accept();
BufferedReader input = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String answer = input.readLine();
if(key.equals(answer)){
try{
PrintWriter out = new
PrintWriter(socket.getOutputStream(), true);
out.println("ok");
}finally{
socket.close();
}
}
else{
PrintWriter out = new PrintWriter(socket.getOutputStream(),
true);
out.println("no");
}
}
}finally{
listener.close();
}
}
}

1
Etape 2 : Création d’un nouveau projet pour l’application
2.1- Créer un nouveau projet, puis créer une nouvelle fenêtre (figure 1).
2.2- Ajouter 3 zones de texte pour insérer le port l’adresse du serveur et la
clé d’authentification.
2.3- Au niveau du bouton connexion nous appelons le serveur via un
socket.
2.4- Ensuite si la clé est correcte on affiche la fenêtre "Home" (figure 2).

Figure 1: La page d'authentification

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {


try{
String port = jTextField1.getText();
String adress = jTextField2.getText();
String key = jTextField3.getText();
Socket s = new Socket(adress,Integer.parseInt(port));
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
out.println(key);

BufferedReader input = new BufferedReader(new


InputStreamReader(s.getInputStream()));
String answer = input.readLine();
if(answer.equals("ok")){
jTextField1.setText(answer);
new Home().setVisible(true);
}
else
System.out.println("Key not exist");
}catch(IOException ex){
jTextField1.setText("Désolé, problème de connexion ...");
}
}

Etape 3 : Création d’une nouvelle fenêtre pour l’introspection :


2.1 – Dans le projet de l’application créez la fenêtre illustrée par la figure 2.

Figure 2: la fenêtre "Home"

2.2 – Créer la classe MyBeanInfo suivante qui permet de déterminer les propriétés d’un JavaBean.
2
import java.io.*;
import java.beans.*;
public class MyBeanInfo {
public String str_BeanInfo;
public String my_Bean;

public MyBeanInfo(String my_Bean){


this.str_BeanInfo="";
this.my_Bean=my_Bean;
}

public String getMyBeanInfo() throws Exception {

String str_BeanInfo="";
Class monBeanClasse = Class.forName(my_Bean);
if(monBeanClasse==null){
throw new ClassNotFoundException();
}
MethodDescriptor[] methodDescriptor;
BeanInfo bi = Introspector.getBeanInfo(monBeanClasse);
BeanDescriptor unBeanDescriptor = bi.getBeanDescriptor();
str_BeanInfo=str_BeanInfo+("Nom du bean : " + unBeanDescriptor.getName()+"\n");
str_BeanInfo=str_BeanInfo+("Classe du bean : " +
unBeanDescriptor.getBeanClass()+"\n");
str_BeanInfo=str_BeanInfo+"\n";
str_BeanInfo=str_BeanInfo+"Description des propriétés:\n";
PropertyDescriptor[] propertyDescriptor = bi.getPropertyDescriptors();
for (int i=0; i<propertyDescriptor.length; i++) {
str_BeanInfo=str_BeanInfo+(" Nom propriete : "
+propertyDescriptor[i].getName()+"\n");
str_BeanInfo=str_BeanInfo+(" Type propriete : "+
propertyDescriptor[i].getPropertyType()+"\n");
str_BeanInfo=str_BeanInfo+(" Getter propriete : "+
propertyDescriptor[i].getReadMethod()+"\n");
str_BeanInfo=str_BeanInfo+(" Setter propriete : "+
propertyDescriptor[i].getWriteMethod()+"\n\n");
}
str_BeanInfo=str_BeanInfo+("\n");
methodDescriptor = bi.getMethodDescriptors();
str_BeanInfo=str_BeanInfo+"Description des Méthodes:\n";
for (int i=0; i < methodDescriptor.length; i++) {
str_BeanInfo=str_BeanInfo+(" Methode :
"+methodDescriptor[i].getName()+"\n");
}
str_BeanInfo=str_BeanInfo+("\n");
EventSetDescriptor[] unEventSetDescriptor = bi.getEventSetDescriptors();
str_BeanInfo=str_BeanInfo+"Description des événements:\n";
for (int i = 0; i < unEventSetDescriptor.length; i++) {
str_BeanInfo=str_BeanInfo+(" Nom evt : "+
unEventSetDescriptor[i].getName()+"\n");
str_BeanInfo=str_BeanInfo+(" Methode add evt : "
+unEventSetDescriptor[i].getAddListenerMethod()+"\n");
str_BeanInfo=str_BeanInfo+(" Methode remove evt : "
+unEventSetDescriptor[i].getRemoveListenerMethod()+"\n\n");
methodDescriptor = unEventSetDescriptor[i].getListenerMethodDescriptors();
for (int j = 0; j < methodDescriptor.length; j++) {
str_BeanInfo=str_BeanInfo+(" Event Type: " +
methodDescriptor[j].getName()+"\n");
}
}
return (str_BeanInfo);//=str_BeanInfo+("");
}
}

Description des objets / méthodes de code de la classe MyBeanInfo précédente :


3
− La classe BeanInfo contient des informations sur un bean et possède plusieurs méthodes pour les
obtenir.
− La méthode getBeanInfo() prend en paramètre un objet de type Class qui représente la classe du
bean et elle renvoie des informations sur la classe et toutes ses classes mères.
− La méthode getPropertyDescriptors() permet d'obtenir un tableau d'objets de type
PropertyDescriptor qui contiennent les caractéristiques d'une propriété.
− La méthode getMethodDescriptors() permet d'obtenir un tableau d'objets de type
MethodDescriptor. Cette classe fournit plusieurs méthodes pour extraire les informations des
objets contenus dans le tableau.
− La méthode getEventSetDescriptors() permet d'obtenir un tableau d'objets de type
EventSetDescriptor qui contienent les caractéristiques d'un événement. Plusieurs méthodes
permettent d'obtenir ces informations.

2.3 - Au niveau du bouton « Ok » de la fenêtre Home on instancie la classe MyBeanInfo avec le nom
complet de JavaBean (package.class) comme paramètre et on affiche les propriétés dans le jTextArea.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
MyBeanInfo mb= new MyBeanInfo(jTextField1.getText());
try{
String str= mb.getMyBeanInfo();
jTextArea1.setText(str);
}catch(Exception e){
jTextArea1.setText("Class Not Found");
}
}

Vous aimerez peut-être aussi