Источник статьи: Power Silicon Valley Автор: Mainstay
1. Введение
EJB (Enterprise JavaBeans) представляет собой относительно продвинутый контент в программировании на Java, а также является порогом для программистов Java для перехода от начального уровня к экспертному уровню. Существенная разница между сертифицированным SUN Java-программистом (SCJP) и сертифицированным SUN Java-разработчиком (SCJD) заключается в том, что SCJP не проходит тест EJB, а SCJD — проходит. Поскольку все больше и больше предприятий используют платформу J2EE для разработки прикладных систем электронной коммерции, разработка EJB стала проблемой, с которой приходится сталкиваться сегодняшним Java-программистам.
В этой статье сначала описываются основные принципы общих распределенных объектных приложений с использованием рутины, затем начинается с базовой загрузки, установки и настройки, а также постепенно знакомится с методом программирования EJB, что делает изучение EJB простым и интересным занятием.
2. Типичная распределенная объектная программа
Независимо от того, CORBA или RMI, стратегии реализации распределенных объектов одинаковы. Мы можем использовать простой пример программы для моделирования состава программы с распределенными объектами.
В этом примере имитируется процесс удаленного запроса свойств объекта. В сети есть удаленный объект Dog, и теперь нам нужно получить атрибут его имени (strName). Программа устанавливает класс-заглушку (Dog_Stub) на стороне клиента и запускает класс скелета (dog_Skeleton) на стороне сервера. Оба класса реализуют интерфейс Dog_Stub и Dog_Skeleton, которые взаимодействуют удаленно через Socket. Когда клиентская программа DogClient отправляет запрос Dog_Stub для получения атрибута имени, объект Dog_Stub отправляет имя метода «getName()» в виде строки удаленному объекту Dog_Skeleton через Socket. После того, как объект Dog_Skeleton получит эту строку, он будет content выполняет метод getName() объекта DogServer для получения имени собаки, а затем возвращает его объекту DogStub через метод Socket. Весь процесс реализуется через сеть, но клиентская программа DogClient не знает, где находится настоящий объект Dog, или даже знает, что этот процесс прошел через сеть. Она знает только, что запрос на получение атрибута имени. получил удовлетворительный результат.
Фактически реализация CORBA или Java RMI аналогична этой, но она гораздо менее проста. Эта программа полезна для иллюстрации механизма выполнения распределенных объектных приложений.
Исходный код программы следующий:
FileDog.java
общедоступный интерфейс Собака
{
public String getName() выдает исключение;
}/* Собака */
FileDogClient.java
общедоступный класс DogClient
{
public static void main( String[] args) выдает исключение
{
Собака собака = новый Dog_Stub();
Строка strName = Dog.getName();
System.out.println("Имя: " + strName);
}//основной()
}/* DogClient */
FileDogServer.java
публичный класс DogServer реализует Dog
{
Строка имя_строки;
интервал intAge;
public String getName() выдает исключение
{
вернуть имя_строки;
}//getName()
общедоступный DogServer (строка strNameInput)
{
стрИмя = стрИмяВход;
}//ДогСервер()
public static void main( String[] args) выдает исключение
{
Новый Dog_Skeleton(новый DogServer("TOMCAT" ));
}//основной()
}/* DogServer */
Файл Dog_Skeleton.java
импортировать java.io.*;
импортировать java.net.*;
публичный класс Dog_Skeleton расширяет поток
{
статический ServerSocket ss = null;
DogServer ds;
public Dog_Skeleton (DogServer dsInput) выдает исключение
{
дс = дсВход;
если (сс == ноль)
сс = новый ServerSocket(8000);
это.start();
}//Dog_Skeleton()
общедоступный синхронизированный недействительный запуск()
{
Пытаться
{
пока (сс!= ноль)
{
Сокет сокета = ss.accept();
ObjectInputStream ois = новый ObjectInputStream(socket.getInputStream());
ObjectOutputStream oos = новый ObjectOutputStream(socket.getOutputStream());
String strMethodName = (String)ois.readObject();
if ( strMethodName.equals( "getName()" ) )
oos.writeObject(ds.getName());
оос.флеш();
оис.закрыть();
оос.закрыть();
сокет.закрыть();
}//пока
}//пытаться
поймать (Исключение е)
{
е.printStackTrace();
}//ловить
}//бегать()
}/* Dog_Skeleton */
FileDog_Stub.java
импортировать java.io.*;
импортировать java.net.*;
Открытый класс Dog_Stub реализует Dog
{
Розетка розетка;
ObjectOutputStream оос;
ObjectInputStream ois;
public Dog_Stub() выдает исключение
{
сокет = новый сокет («вуди», 8000);
Oos = новый ObjectOutputStream(socket.getOutputStream());
Ois = новый ObjectInputStream(socket.getInputStream());
}//Dog_Stub()
публичная строка getName() выдает исключение
{
Oos.writeObject("getName()");
Оос.флеш();
return (String)ois.readObject();
}//getName()
}/* Dog_Stub */
При запуске этой распределенной объектной программы сначала запустите DogServer, а затем запустите DogClient на клиенте, чтобы увидеть результаты.