Source de l’article : Silicon Valley Power Auteur : Mainstay
1. Introduction
EJB (Enterprise JavaBeans) est un contenu relativement avancé dans la programmation Java, et c'est également le seuil permettant aux programmeurs Java de passer du niveau débutant au niveau expert. Une différence significative entre SUN Certified Java Programmer (SCJP) et SUN Certified Java Developer (SCJD) est que SCJP ne passe pas le test EJB, contrairement à SCJD. Alors que de plus en plus d'entreprises adoptent la plateforme J2EE pour développer des systèmes d'applications de commerce électronique, le développement d'EJB est devenu un problème auquel les programmeurs Java d'aujourd'hui doivent faire face.
Cet article présente d'abord les principes de base des applications générales d'objets distribués avec une routine, puis commence par le téléchargement, l'installation et la configuration de base, et introduit progressivement la méthode de programmation EJB, faisant de l'apprentissage des EJB une chose simple et intéressante.
2. Programme objet distribué typique
Qu'il s'agisse de CORBA ou de RMI, les stratégies d'implémentation d'objets distribués sont similaires. Nous pouvons utiliser un exemple de programme simple pour simuler la composition d'un programme d'objets distribués.
Cet exemple simule le processus de demande à distance de propriétés d'objet. Il y a un objet distant Dog sur le réseau, et nous devons maintenant obtenir son attribut name (strName). Le programme configure une classe stub (Dog_Stub) côté client et démarre une classe squelette (dog_Skeleton) côté serveur. Les deux classes implémentent l'interface Dog_Stub et Dog_Skeleton communiquer à distance via Socket. Lorsque le programme client DogClient envoie une requête à Dog_Stub pour obtenir l'attribut name, l'objet Dog_Stub envoie le nom de la méthode "getName()" sous forme de chaîne à l'objet Dog_Skeleton distant via Socket. Une fois que l'objet Dog_Skeleton aura reçu cette chaîne, il le fera. content exécute la méthode getName() de l'objet DogServer pour obtenir le nom du chien, puis le renvoie à l'objet DogStub via le Socket. L'ensemble du processus est implémenté via le réseau, mais pour le programme client DogClient, il ne sait pas où se trouve le véritable objet Dog, ni même que ce processus a transité par le réseau. Il ne sait que la demande d'obtention de l'attribut name. a obtenu un résultat satisfaisant.
En fait, l’implémentation de CORBA ou Java RMI est similaire à celle-ci, mais elle est beaucoup moins simple. Ce programme est utile pour illustrer le mécanisme d'exécution des applications d'objets distribués.
Le code source du programme est le suivant :
FichierDog.java
interface publique Chien
{
public String getName() lève une exception ;
}/* Chien */
FileDogClient.java
classe publique DogClient
{
public static void main (String[] args) lève une exception
{
Chien chien = new Dog_Stub();
String strName = dog.getName();
System.out.println( "Nom : " + strName );
}//principal()
}/* ChienClient */
FileDogServer.java
classe publique DogServer implémente Dog
{
Chaîne strName ;
intintAge ;
public String getName() lève une exception
{
return strName ;
}//getName()
public DogServer (String strNameInput)
{
strName = strNameInput ;
}//ServeurDog()
public static void main (String[] args) lève une exception
{
Nouveau Dog_Skeleton( nouveau DogServer( "TOMCAT" ) );
}//principal()
}/* Serveur Chien */
Fichier Dog_Skeleton.java
importer java.io.* ;
importer java.net.* ;
la classe publique Dog_Skeleton étend le fil de discussion
{
ServerSocket statique ss = null ;
DogServer ds ;
public Dog_Skeleton (DogServer dsInput) lève une exception
{
ds = dsEntrée ;
si(ss==null)
ss = nouveau ServerSocket (8000);
this.start();
}//Dog_Skeleton()
exécution vide synchronisée publique ()
{
Essayer
{
tandis que ( ss != null )
{
Socket socket = ss.accepter();
ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() );
ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() );
String strMethodName = ( String )ois.readObject();
si ( strMethodName.equals( "getName()" ) )
oos.writeObject( ds.getName() );
oos.flush();
ois.close();
oos.close();
socket.close();
}//alors que
}//essayer
attraper (Exception e)
{
e.printStackTrace();
}//attraper
}//courir()
}/* Chien_Squelette */
FileDog_Stub.java
importer java.io.* ;
importer java.net.* ;
La classe publique Dog_Stub implémente Dog
{
Prise de courant ;
ObjectOutputStream ou;
ObjectInputStream est différent ;
public Dog_Stub() lève une exception
{
socket = nouveau Socket( "wudi", 8000 );
Oos = new ObjectOutputStream( socket.getOutputStream() );
Ois = new ObjectInputStream( socket.getInputStream() );
}//Dog_Stub()
public String getName() lève une exception
{
Oos.writeObject( "getName()" );
Oos.flush();
return (String)ois.readObject();
}//getName()
}/* Chien_Stub */
Lors de l'exécution de ce programme d'objets distribués, exécutez d'abord DogServer, puis exécutez DogClient sur le client pour voir les résultats.