Artikelquelle: Silicon Valley Power Autor: Mainstay
1. Einführung
EJB (Enterprise JavaBeans) ist ein relativ fortgeschrittener Inhalt in der Java-Programmierung und stellt auch die Schwelle für Java-Programmierer dar, von der Einstiegsebene zur Expertenebene aufzusteigen. Ein wesentlicher Unterschied zwischen SUN Certified Java Programmer (SCJP) und SUN Certified Java Developer (SCJD) besteht darin, dass SCJP den EJB-Test nicht ablegt, SCJD hingegen schon. Da immer mehr Unternehmen die J2EE-Plattform zur Entwicklung von E-Commerce-Anwendungssystemen übernehmen, ist die EJB-Entwicklung zu einem Problem geworden, mit dem sich heutige Java-Programmierer auseinandersetzen müssen.
In diesem Artikel werden zunächst die Grundprinzipien allgemeiner verteilter Objektanwendungen mit einer Routine vorgestellt. Anschließend werden grundlegende Downloads, Installationen und Konfigurationen durchgeführt. Anschließend wird schrittweise die Methode der EJB-Programmierung vorgestellt, wodurch das Erlernen von EJB zu einer einfachen und interessanten Sache wird.
2. Typisches verteiltes Objektprogramm
Unabhängig davon, ob es sich um CORBA oder RMI handelt, sind die Strategien zur Implementierung verteilter Objekte ähnlich. Wir können die Zusammensetzung eines verteilten Objektprogramms anhand eines einfachen Programmbeispiels simulieren.
Dieses Beispiel simuliert den Prozess der Remote-Anfrage von Objekteigenschaften. Es gibt ein Remote-Objekt Dog im Netzwerk, und jetzt müssen wir sein Namensattribut (strName) abrufen. Das Programm richtet auf der Clientseite eine Stub-Klasse (Dog_Stub) ein und startet auf der Serverseite eine Skeleton-Klasse (dog_Skeleton). Beide Klassen implementieren die Dog_Stub- und Dog_Skeleton-Schnittstelle aus der Ferne über Socket. Wenn das Client-Programm DogClient eine Anfrage an Dog_Stub sendet, um das Namensattribut abzurufen, sendet das Dog_Stub-Objekt den Methodennamen „getName()“ als Zeichenfolge an das Remote-Dog_Skeleton-Objekt über Socket content führt die getName()-Methode des DogServer-Objekts aus, um den Namen des Hundes abzurufen, und gibt ihn dann über den Socket an das DogStub-Objekt zurück. Der gesamte Prozess wird über das Netzwerk implementiert, aber für das Client-Programm DogClient weiß es nicht, wo sich das echte Dog-Objekt befindet, oder weiß nicht einmal, dass dieser Prozess das Netzwerk durchlaufen hat. Es weiß nur, dass die Anforderung zum Abrufen des Namensattributs vorliegt hat ein zufriedenstellendes Ergebnis erzielt. Das ist alles.
Tatsächlich ähnelt die Implementierung von CORBA oder Java RMI dieser, ist jedoch weitaus weniger einfach. Dieses Programm eignet sich zur Veranschaulichung des Ausführungsmechanismus verteilter Objektanwendungen.
Der Quellcode des Programms lautet wie folgt:
FileDog.java
öffentliche Schnittstelle Hund
{
public String getName() löst eine Ausnahme aus;
}/* Hund */
FileDogClient.java
öffentliche Klasse DogClient
{
public static void main( String[] args ) löst eine Ausnahme aus
{
Hund dog = new Dog_Stub();
String strName = dog.getName();
System.out.println( "Name: " + strName );
}//hauptsächlich()
}/* DogClient */
FileDogServer.java
Die öffentliche Klasse DogServer implementiert Dog
{
String strName;
int intAge;
public String getName() löst eine Ausnahme aus
{
return strName;
}//getName()
öffentlicher DogServer( String strNameInput )
{
strName = strNameInput;
}//DogServer()
public static void main( String[] args ) löst eine Ausnahme aus
{
New Dog_Skeleton( new DogServer( "TOMCAT" ) );
}//hauptsächlich()
}/* DogServer */
Datei Dog_Skeleton.java
java.io.* importieren;
java.net importieren.*;
Die öffentliche Klasse Dog_Skeleton erweitert Thread
{
static ServerSocket ss = null;
DogServer ds;
public Dog_Skeleton( DogServer dsInput ) löst eine Ausnahme aus
{
ds = dsInput;
if(ss==null)
ss = neuer ServerSocket(8000);
this.start();
}//Dog_Skeleton()
öffentlicher synchronisierter void run()
{
Versuchen
{
while ( ss != null )
{
Socket socket = ss.accept();
ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() );
ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() );
String strMethodName = ( String )ois.readObject();
if ( strMethodName.equals( "getName()" ) )
oos.writeObject( ds.getName() );
oos.flush();
ois.close();
oos.close();
socket.close();
}//während
}//versuchen
Catch (Ausnahme e)
{
e.printStackTrace();
}//fangen
}//laufen()
}/* Dog_Skeleton */
FileDog_Stub.java
java.io.* importieren;
java.net importieren.*;
Die öffentliche Klasse Dog_Stub implementiert Dog
{
Steckdose; Steckdose;
ObjectOutputStream oos;
ObjectInputStream ois;
public Dog_Stub() löst eine Ausnahme aus
{
socket = new Socket( "wudi", 8000 );
Oos = new ObjectOutputStream( socket.getOutputStream() );
Ois = new ObjectInputStream( socket.getInputStream() );
}//Dog_Stub()
public String getName() löst eine Ausnahme aus
{
Oos.writeObject( "getName()" );
Oos.flush();
return (String)ois.readObject();
}//getName()
}/* Dog_Stub */
Wenn Sie dieses verteilte Objektprogramm ausführen, führen Sie zuerst DogServer und dann DogClient auf dem Client aus, um die Ergebnisse anzuzeigen.