Académique Documents
Professionnel Documents
Culture Documents
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).
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;
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+("");
}
}
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.