기사 출처: Silicon Valley Power 작성자: Mainstay
1. 소개
EJB(Enterprise JavaBeans)는 Java 프로그래밍에서 비교적 고급 콘텐츠이며, Java 프로그래머가 입문 수준에서 전문가 수준으로 발전하기 위한 문턱이기도 합니다. SCJP(SUN Certified Java Programmer)와 SCJD(SUN Certified Java Developer)의 중요한 차이점은 SCJP는 EJB 테스트를 치르지 않지만 SCJD는 EJB 테스트를 치르는 것입니다. 점점 더 많은 기업이 전자 상거래 애플리케이션 시스템을 개발하기 위해 J2EE 플랫폼을 채택함에 따라 EJB 개발은 오늘날의 Java 프로그래머가 직면해야 하는 문제가 되었습니다.
이 글에서는 먼저 루틴을 통해 일반적인 분산 객체 응용 프로그램의 기본 원리를 소개한 다음 기본적인 다운로드, 설치 및 구성부터 시작하여 점차적으로 EJB 프로그래밍 방법을 소개하여 EJB를 쉽고 재미있게 학습할 수 있도록 합니다.
2. 일반적인 분산 객체 프로그램
CORBA이든 RMI이든 분산 객체를 구현하는 전략은 유사합니다. 간단한 프로그램 예제를 사용하여 분산 객체 프로그램의 구성을 시뮬레이션할 수 있습니다.
이 예에서는 개체 속성을 원격으로 요청하는 프로세스를 시뮬레이션합니다. 네트워크에 원격 개체 Dog가 있으며 이제 해당 이름(strName) 속성을 가져와야 합니다. 프로그램은 클라이언트 측에서 스텁(Dog_Stub) 클래스를 설정하고 서버 측에서 스켈레톤(dog_Skeleton) 클래스를 시작합니다. 두 클래스 모두 Dog_Stub 및 Dog_Skeleton은 소켓을 통해 원격으로 통신합니다. 클라이언트 프로그램 DogClient가 name 속성을 얻기 위해 Dog_Stub에 요청을 보내면 Dog_Stub 개체는 Socket을 통해 메서드 이름 "getName()"을 문자열로 원격 Dog_Skeleton 개체에 보냅니다. 콘텐츠는 DogServer 개체의 getName() 메서드를 실행하여 Dog의 이름을 얻은 다음 이를 Socket을 통해 DogStub 개체에 반환합니다. 전체 프로세스는 네트워크를 통해 구현되지만 클라이언트 프로그램 DogClient의 경우 실제 Dog 개체가 어디에 있는지 알지 못하거나 이 프로세스가 네트워크를 통과했다는 사실조차 알 수 없습니다. 만족스러운 결과를 얻었습니다.
실제로 CORBA나 Java RMI의 구현은 이와 유사하지만 훨씬 덜 단순합니다. 이 프로그램은 분산 개체 응용 프로그램의 실행 메커니즘을 설명하는 데 유용합니다.
프로그램 소스코드는 다음과 같습니다.
FileDog.java
공개 인터페이스 개
{
public String getName()이 예외를 발생시킵니다.
}/* 개 */
FileDogClient.java
공개 클래스 DogClient
{
public static void main( String[] args )에서 예외 발생
{
개 dog = new Dog_Stub();
문자열 strName = dog.getName();
System.out.println( "이름: " + strName );
}//기본()
}/* DogClient */
FileDogServer.java
공개 클래스 DogServer는 Dog를 구현합니다.
{
문자열 문자열이름;
int intAge;
공개 문자열 getName()에서 예외가 발생했습니다.
{
strName을 반환합니다.
}//getName()
공개 DogServer( 문자열 strNameInput )
{
strName = strNameInput;
}//개서버()
public static void main( String[] args )에서 예외 발생
{
New Dog_Skeleton( new DogServer( "TOMCAT" ) );
}//기본()
}/* DogServer */
파일 Dog_Skeleton.java
import java.io.*;
java.net.* 가져오기;
공개 클래스 Dog_Skeleton은 스레드를 확장합니다.
{
정적 ServerSocket ss = null;
DogServer ds;
공개 Dog_Skeleton( DogServer dsInput )이 예외를 발생시킵니다.
{
ds = ds입력;
if(ss==널)
ss = 새로운 ServerSocket(8000);
this.start();
}//Dog_Skeleton()
공개 동기화 무효 실행()
{
노력하다
{
동안( ss != null )
{
소켓 소켓 = 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();
소켓.닫기();
}//하는 동안
}//노력하다
catch(예외e)
{
e.printStackTrace();
}//잡다
}//달리다()
}/* Dog_Skeleton */
FileDog_Stub.java
import java.io.*;
java.net.* 가져오기;
공개 클래스 Dog_Stub은 Dog를 구현합니다.
{
소켓 소켓;
ObjectOutputStream oos;
ObjectInputStream ois;
공개 Dog_Stub()에서 예외가 발생했습니다.
{
소켓 = 새 소켓( "wudi", 8000 );
Oos = new ObjectOutputStream(socket.getOutputStream());
Ois = new ObjectInputStream(socket.getInputStream());
}//개_스텁()
공개 문자열 getName()에서 예외가 발생했습니다.
{
Oos.writeObject( "getName()" );
Oos.flush();
return (String)ois.readObject();
}//getName()
}/* Dog_Stub */
이 분산 객체 프로그램을 실행할 때는 먼저 DogServer를 실행한 후 클라이언트에서 DogClient를 실행하여 결과를 확인합니다.