EJB和JSP, Servlet(一) EJB简介(补充)
来源:Linux-cn.com
作者:Webmaster
时间:2007-05-05
点击:
[
收藏] [
投稿]
EJB简介(补充)
昨天写完了ejb的简介部分,考虑到很多人没有接触过distributed object的概念,今天想了半天,做出了这么个例子,可以让大家对ejb的distributed object的概念的了解有所帮助。
先看例子:
Person.java:
public interface Person {
public int getAge() throws Throwable;
public String getName() throws Throwable;
}
PersonServer.java:
public class PersonServer implements Person {
int age;
String name;
public PersonServer(String name, int age){
this.age = age;
this.name = name;
}
public int getAge(){
return age;
}
public String getName(){
return name;
}
}
Person_Stub.java:
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.net.Socket;
public class Person_Stub implements Person {
Socket socket;
public Person_Stub() throws Throwable {
// Create a network connection to the skeleton.
// Replace "myhost" with your own IP Address
of your computer.
socket = new Socket("myhost",9000);
}
public int getAge() throws Throwable {
// When this method is invoked, stream the
method name to the
// skeleton.
ObjectOutputStream outStream =
new ObjectOutputStream(socket.getOutputStream());
outStream.writeObject("age");
outStream.flush();
ObjectInputStream inStream =
new ObjectInputStream(socket.getInputStream());
return inStream.readInt();
}
public String getName() throws Throwable {
// When this method is invoked, stream the method
name to the
// skeleton.
ObjectOutputStream outStream =
new ObjectOutputStream(socket.getOutputStream());
outStream.writeObject("name");
outStream.flush();
ObjectInputStream inStream =
new ObjectInputStream(socket.getInputStream());
return (String)inStream.readObject();
}
}
Person_Skeleton.java:
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.net.ServerSocket;
public class Person_Skeleton extends Thread {
PersonServer myServer;
public Person_Skeleton(PersonServer server){
// Get a reference to the object server that
this skeleton wraps.
this.myServer = server;
}
public void run(){
try {
// Create a server socket on port 9000.
ServerSocket serverSocket = new ServerSocket(9000);
// Wait for and obtain a socket connection from stub.
Socket socket = serverSocket.accept();
while (socket != null){
// Create an input stream to receive requests from stub.
ObjectInputStream inStream =
new ObjectInputStream(socket.getInputStream());
// Read next method request from stub. Block until
request is
// sent.
String method = (String)inStream.readObject();
// Evaluate the type of method requested.
if (method.equals("age")){
// Invoke business method on server object.
int age = myServer.getAge();
// Create an output stream to send return values back to
// stub.
ObjectOutputStream outStream =
new ObjectOutputStream(socket.getOutputStream());
// Send results back to stub.
outStream.writeInt(age);
outStream.flush();
} else if(method.equals("name")){
// Invoke business method on server object.
String name = myServer.getName();
// Create an output stream to send return values back to
// the stub.
ObjectOutputStream outStream =
new ObjectOutputStream(socket.getOutputStream());
// Send results back to stub.
outStream.writeObject(name);
outStream.flush();
}
}
} catch(Throwable t) {t.printStackTrace();System.exit(0); }
}
public static void main(String args [] ){
// Obtain a unique instance Person.
PersonServer person = new PersonServer("Richard", 34);
Person_Skeleton skel = new Person_Skeleton(person);
skel.start();
}
}
PersonClient.java:
public class PersonClient {
public static void main(String [] args){
try {
Person person = new Person_Stub();
int age = person.getAge();
String name = person.getName();
System.out.println(name+" is "+age+" years old");
} catch(Throwable t) {t.printStackTrace();}
}
}
|
做一下简单说明,