Fuente del artículo: Silicon Valley Power Autor: Mainstay
1. Introducción
EJB (Enterprise JavaBeans) es un contenido relativamente avanzado en programación Java y también es el umbral para que los programadores de Java avancen del nivel básico al nivel experto. Una diferencia significativa entre el programador Java certificado SUN (SCJP) y el desarrollador Java certificado SUN (SCJD) es que SCJP no realiza la prueba EJB, mientras que SCJD sí. A medida que más y más empresas adoptan la plataforma J2EE para desarrollar sistemas de aplicaciones de comercio electrónico, el desarrollo de EJB se ha convertido en un problema que los programadores de Java deben afrontar hoy en día.
Este artículo primero presenta los principios básicos de las aplicaciones generales de objetos distribuidos con una rutina, y luego comienza con la descarga, instalación y configuración básicas, y gradualmente presenta el método de programación EJB, lo que hace que aprender EJB sea algo fácil e interesante.
2. Programa típico de objetos distribuidos
Ya sea CORBA o RMI, las estrategias para implementar objetos distribuidos son similares. Podemos utilizar un ejemplo de programa simple para simular la composición de un programa de objetos distribuidos.
Este ejemplo simula el proceso de solicitar propiedades de objetos de forma remota. Hay un objeto remoto Dog en la red y ahora necesitamos obtener su atributo de nombre (strName). El programa configura una clase stub (Dog_Stub) en el lado del cliente e inicia una clase esqueleto (dog_Skeleton) en el lado del servidor. Ambas clases implementan la interfaz Dog_Stub y Dog_Skeleton para comunicarse de forma remota a través de Socket. Cuando el programa cliente DogClient envía una solicitud a Dog_Stub para obtener el atributo de nombre, el objeto Dog_Stub envía el nombre del método "getName ()" como una cadena al objeto Dog_Skeleton remoto a través de Socket. Después de que el objeto Dog_Skeleton reciba esta cadena, lo hará. El contenido ejecuta el método getName () del objeto DogServer para obtener el nombre del perro y luego lo devuelve al objeto DogStub a través del Socket. Todo el proceso se implementa a través de la red, pero para el programa cliente DogClient, no sabe dónde está el objeto Dog real, ni siquiera sabe que este proceso ha pasado por la red. Solo sabe que la solicitud para obtener el atributo de nombre. Ha obtenido un resultado satisfactorio. Eso es todo.
De hecho, la implementación de CORBA o Java RMI es similar a esta, pero mucho menos simple. Este programa es útil para ilustrar el mecanismo de ejecución de aplicaciones de objetos distribuidos.
El código fuente del programa es el siguiente:
ArchivoPerro.java
interfaz pública perro
{
public String getName() arroja una excepción;
}/* Perro */
FileDogClient.java
clase pública DogClient
{
public static void main (String[] args) lanza una excepción
{
Perro perro = nuevo Dog_Stub();
Cadena strName = perro.getName();
System.out.println( "Nombre: " + strName );
}//principal()
}/* ClientePerro */
FileDogServer.java
DogServer de clase pública implementa Dog
{
Cadena strName;
int edad int;
cadena pública getName() lanza una excepción
{
devolver nombre_cadena;
}//obtenerNombre()
DogServer público (cadena strNameInput)
{
strName = strNameInput;
}//ServidorPerro()
public static void main (String[] args) lanza una excepción
{
Nuevo Dog_Skeleton( nuevo DogServer( "TOMCAT" ) );
}//principal()
}/* Servidor de perros */
Archivo Dog_Skeleton.java
importar java.io.*;
importar java.net.*;
la clase pública Dog_Skeleton extiende el hilo
{
ServerSocket estático ss = nulo;
DogServer ds;
público Dog_Skeleton (DogServer dsInput) lanza una excepción
{
ds = dsEntrada;
si(ss==nulo)
ss = nuevo ServerSocket(8000);
this.start();
}//Perro_Esqueleto()
ejecución vacía sincronizada pública ()
{
Intentar
{
mientras (ss! = nulo)
{
Conector hembra = ss.accept();
ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() );
ObjectOutputStream oos = nuevo ObjectOutputStream( socket.getOutputStream() );
Cadena strMethodName = (Cadena)ois.readObject();
if ( strMethodName.equals( "getName()" ) )
oos.writeObject( ds.getName() );
oos.flush();
ois.close();
oos.cerrar();
socket.cerrar();
}//mientras
}//intentar
captura (Excepción e)
{
e.printStackTrace();
}//atrapar
}//correr()
}/* Perro_Esqueleto */
FileDog_Stub.java
importar java.io.*;
importar java.net.*;
La clase pública Dog_Stub implementa Dog
{
Toma de corriente;
ObjectOutputStream oos;
ObjectInputStream es;
public Dog_Stub() lanza una excepción
{
enchufe = nuevo enchufe ("wudi", 8000);
Oos = nuevo ObjectOutputStream( socket.getOutputStream() );
Ois = nuevo ObjectInputStream( socket.getInputStream() );
}//Perro_Stub()
cadena pública getName() lanza una excepción
{
Oos.writeObject( "getName()" );
Oos.flush();
return (Cadena)ois.readObject();
}//obtenerNombre()
}/* Perro_Stub */
Cuando ejecute este programa de objetos distribuidos, primero ejecute DogServer y luego ejecute DogClient en el cliente para ver los resultados.