저자: Zhu Xianzhong 컴파일러 소스: Tianji.com
Abstract 이 기사에서는 ASP.NET 애플리케이션과 J2EE 애플리케이션 서버 간의 상호 작용을 실현하는 방법과 XML 웹 서비스를 호출하는 것처럼 쉽게 EJB를 호출하는 방법을 소개합니다.
소개
오늘날 많은 대규모 조직에서는 .NET과 J2EE 기술이 혼합된 개발 팀과 게시 서버를 보유하고 사용하고 있습니다. J2EE 애플리케이션 서버를 통해 전송된 엔터프라이즈 품질의 균형을 맞추기 위해 회사의 비즈니스 로직은 종종 EJB(Enterprise JavaBeans) 형식으로 J2EE 애플리케이션 서버에 게시됩니다. 반면, 끊임없이 변화하는 비즈니스 개발 요구 사항을 충족하기 위해 대부분의 개발자는 높은 생산 성능을 갖춘 Visual Studio.NET 개발 환경에서 설명 논리를 구현하는 것을 선호합니다. .NET 프레젠테이션 계층을 J2EE 비즈니스 논리 계층에 연결해야 할 때 문제가 발생합니다.
Visual Studio.NET에서 C# 또는 Visual Basic.NET을 사용하여 ASP.NET 설명 계층을 구현한 다음 다음 형식으로 구현된 비즈니스 논리 계층을 호출하는 등 J2EE용 Visual MainWin이 어떻게 직면하고 극복하는 데 도움이 되는지 살펴보겠습니다. EJB - 개발하기가 어렵습니다. 안심하십시오. 이 작업을 수행하기 위해 EJB API 코딩을 망칠 필요는 없습니다. Visual MainWin for J2EE를 사용하면 ASP.NET 프런트엔드와 EJB 백엔드 두 계층 모두 성능 최적화와 일관된 J2EE 기반 보안을 통해 J2EE 애플리케이션 서버에서 순수 J2EE 애플리케이션으로 실행될 수 있습니다.
Visual Studio .NET에서 EJB를 호출하려면 J2EE용 Visual MainWin의 엔터프라이즈 버전을 설치해야 합니다. 물론 실험적 분석을 위해 mainsoft.com 웹사이트에서 평가판을 다운로드할 수 있습니다.
예제 분석
ASP.NET 웹 계층과 J2EE 비즈니스 계층을 사용하여 응용 프로그램을 만드는 방법을 보여주는 이 기사의 StocksPortfolio 예제는 Visual MainWin for J2EE에 설치되고 문서화되어 있습니다. 이 예제에서는 사용자가 주식 투자를 관리하는 데 사용하는 간단한 ASP.NET 웹 페이지와 가상의 주식 시세를 제공하는 데 사용되는 ASP.NET 웹 서비스를 구현합니다. 이 예에서는 또한 J2EE 애플리케이션 서버에서 주식 매매 논리를 구현하는 데 사용되는 세션 EJB를 사용합니다.
그림 1. JBoss 애플리케이션 서버에서 실행되는 StocksPortfolio 애플리케이션
.NET 환경에 EJB 추가
Visual Studio.NET에서 EJB를 호출하는 것은 웹 서비스를 호출하는 것만큼 쉽습니다. 솔루션 탐색기에서 "참조"를 마우스 오른쪽 버튼으로 클릭하고 "EJB 참조 추가"를 선택하면 J2EE용 Visual MainWin 프로젝트에서만 사용할 수 있는 새로운 참조 유형이 나타나며 이는 아래의 표준 Visual Studio 참조와 매우 유사합니다. NETIDE(그림 2 참조).
그림 2. EJB 참조 추가
J2EE용 Visual MainWin 프로젝트에 EJB 참조를 추가하려면 Java 아카이브(JAR) 파일만 필요합니다. 이 파일은 EJB를 구현하거나 로컬 및 원격 인터페이스를 포함합니다. Visual MainWin은 게시된 모든 EJB에 대한 정보를 애플리케이션 서버에 쿼리하고 JAR 정의에 해당하는 EJB를 대화 상자에 표시할 수 있습니다. 사용하려는 특정 EJB(여러 개일 수도 있음)를 선택하기만 하면 됩니다(그림 3 참조).
그림 3. EJB 참조 추가 대화 상자
프로젝트와 연결된 로컬 애플리케이션 서버와 동일한 유형이라면 원격 애플리케이션 서버에서 EJB를 사용할 수도 있습니다. 이는 Windows, Linux, Unix, 메인프레임 또는 기타 J2EE 지원 서버일 수 있습니다. 원격 서버에 게시된 EJB를 사용하려면 "고급"을 클릭하여 대화 상자를 확장합니다(그림 4 참조).
그림 4. 고급 모드 EJB 참조 추가 대화 상자
원격 J2EE 애플리케이션 서버에 대한 JNDI URL을 입력하고 "서버에서 가져오기"를 클릭하십시오. Visual MainWin은 원격 서버에 게시된 모든 EJB와 JAR 파일에 해당하는 EJB를 나열합니다. 이 작업은 로컬 EJB와 일치합니다.
사용하려는 EJB(여러 개가 있을 수 있음)를 선택하고 확인을 클릭하십시오. 그림 5와 같이 솔루션 탐색기 브라우저에 새 EJB 참조 폴더가 생성됩니다. 이 폴더에는 웹 참조 노드와 유사하게 새로 추가된 각 EJB 참조에 대한 서버 기반 참조가 포함되어 있습니다. 또한 EJB 호출 코딩을 단순화하기 위해 래퍼 클래스가 생성됩니다. 이 래퍼 클래스에 대해서는 이후 섹션에서 논의하겠습니다.
그림 5. EJB 참조를 표시하는 솔루션 탐색기 폴더
.NET에서 EJB 메소드 호출
프로젝트에 EJB 참조를 추가하면 시스템이 자동으로 .NET(C# 또는 VB.NET) 클래스를 생성합니다. 이는 EJB에 대한 간단한 인터페이스를 설명합니다. . 이 클래스에는 EJB를 생성하고 해당 메소드를 호출하는 데 필요한 J2EE 코딩이 포함되어 있습니다. 이 .NET 클래스는 자체 공용 메소드를 통해 EJB 원격 인터페이스의 메소드를 노출합니다. EJB의 비즈니스 메소드를 호출하려면 래퍼 클래스의 인스턴스를 생성하고 적절한 래퍼 클래스 메소드를 호출하기만 하면 됩니다.
다음은 .NET 프로젝트에서 EJB 메소드를 호출하기 위한 코드 예제입니다.
// StockTrader EJB의 인스턴스를 생성합니다.
localhost.StockTraderEJB 상인 = 새로운 localhost.StockTraderEJB();
//주식 이름 텍스트 상자에 사용자가 정의한 주식을 구매하고,
//구매한 주식 수는 주식 수 텍스트 상자의 숫자에 해당합니다.
trader.buy(tbStockName.Text, Int32.Parse(tbNumOfShares.Text));
심층 분석은
EJB의 홈 객체를 생성하기 위해 위에서 생성된 래퍼 클래스의 정적 생성자에서 요청된 J2EE 호출을 실행합니다. 그런 다음 기본 생성자에서 홈 객체를 사용하여 EJB 객체를 생성합니다. EJB 객체는 비즈니스 EJB 메소드가 호출되는 래퍼 클래스 멤버로 저장됩니다.
다음은 StockTrader EJB의 래퍼 클래스를 생성하는 코드의 일부입니다.
private static Trading.StockTraderHome home;
개인 거래.StockTraderEJB ejbObj;
정적 StockTraderEJB() {
// JNDI(Java Naming) 컨텍스트 생성
컨텍스트 컨텍스트;
context = vmw.j2ee.J2EEUtils.CreateContext(null, null);
객체 homeObj;
//JNDI 서버에서 홈 객체를 가져옵니다.
homeObj = context.lookup("ejb/StockTrader");
집 = ((trading.StockTraderHome)(homeObj));
}
//기본 생성자: 새 EJB 인스턴스 생성
공개 StockTraderEJB() {
this.ejbObj = home.create();
}
이 래퍼 클래스는 공용 메소드를 통해 EJB 원격 인터페이스의 메소드를 노출합니다. 그런 다음 이러한 각 메소드는 EJB 객체를 통해 EJB의 해당 비즈니스 메소드를 호출합니다. 다음 코드는 EJB 래퍼의 주식 거래자 메서드를 보여줍니다.
public virtual void buy(string arg_0, int arg_1) {
this.ejbObj.buy(arg_0, arg_1);
}
공개 가상 무효 판매(문자열 arg_0, int arg_1) {
this.ejbObj.sell(arg_0, arg_1);
}
Visual MainWin은 Java와 .NET 간의 데이터 유형 매핑도 담당합니다. 예를 들어, EJB의 메소드 중 하나가 java.lang.calendar 객체를 매개변수로 수신하는 경우 .NET System.DateTime 객체 매개변수를 사용하여 해당 메소드를 호출하고 이를 달력 객체의 java.lang에 매핑합니다. 이후에 EJB 메소드가 java.lang.class를 반환하면 대신 System.Type 객체를 받게 됩니다.
문제 디버깅
Visual MainWin이 개발을 단순화하더라도 여전히 다중 레벨 혼합 ASP.NET/EJB 응용 프로그램을 디버깅해야 할 수 있습니다. Visual MainWin 디버거를 사용하면 Visual Studio .NET IDE 내에서 하이브리드 응용 프로그램을 디버깅할 수 있습니다. C# 또는 VB.NET 코드에서 인터럽트를 설정하고, EJB Java 코드를 실행하고, 언어 경계를 넘어 전체 애플리케이션을 디버그할 수 있습니다. 그리고 문제가 발생할 때마다 디버깅이 있어야 하기 때문에 Visual MainWin 디버거는 디버거에서 실행될 수 있는 한 Linux, Unix 또는 기타 프레임워크에서 실행되는지 여부에 관계없이 J2EE 애플리케이션 서버에 연결할 수 있습니다. 패턴.
그림 6. EJB 소스 코드 디버깅을 위해 Visual MainWin 디버거 사용
Visual MainWin이 생성하는 애플리케이션은 표준 J2EE 서블릿 애플리케이션입니다. 이는 다른 J2EE와 마찬가지로 J2EE 애플리케이션 서버 관리자 콘솔을 통해 게시하고 관리할 수 있습니다. 서블릿과 동일 애플리케이션. 따라서 ASP.NET 프리젠테이션 계층과 EJB 비즈니스 논리 계층은 동일한 J2EE 보안 인프라를 사용할 수 있습니다. 하이브리드 ASP.NET/EJB 애플리케이션은 J2EE 서블릿 인증을 통해 일관된 보안 모델을 사용할 수 있으며, 애플리케이션 서버 사용자 및 역할 정의는 역할 기반 인증 메커니즘의 균형을 유지하여 보안을 보장할 수 있습니다.
요약
1. 이 기사에서는 원격 개체와 인터페이스에 대해 설명했습니다. Visual MainWin을 통한 로컬 개체 소비도 가능합니다. 기본 객체를 사용하는 애플리케이션을 배포하려면 애플리케이션의 WAR 파일과 로컬 EJB의 JAR 파일이 모두 포함된 EAR(Enterprise Archive) 파일을 생성해야 합니다.
2. Visual MainWin은 대부분의 .NET 유형을 Java 유형으로 매핑할 수 있지만 컬렉션 유형은 매핑할 수 없습니다. 이 매핑으로 인해 성능이 저하될 수 있기 때문입니다. 따라서 .NET 코드에서 Java 컬렉션 유형을 처리하거나 이러한 변환을 직접 수행하도록 선택할 수 있습니다.
3. Visual MainWin을 사용하면 세션 Bean과 비트랜잭션 엔터티 Bean을 사용할 수 있습니다. 트랜잭션 엔터티 Bean은 투명하게 사용할 수 없으므로 J2EE 트랜잭션 호출을 수동으로 코딩해야 합니다. 그러나 대부분의 경우 트랜잭션 엔터티 Bean은 세션 Bean을 통해 액세스할 수 있으므로 이렇게 할 필요는 없습니다.