비즈니스 위임 패턴
Business delegate pattern비즈니스 딜러는 Java EE 설계 패턴이다.[1] 이러한 패턴은 비즈니스 서비스와 연결된 프리젠테이션 계층 사이의 결합을 줄이고 서비스의 구현 세부사항(EJB 아키텍처의 조회 및 접근성 포함)을 숨기기 위한 것이다.[1][2]비즈니스 대표자는 프레젠테이션 계층에서 비즈니스 객체를 호출하는 어댑터의 역할을 한다.[3]
구조
기본 비즈니스 서비스에 대한 액세스 요청은 고객으로부터 전송되며, 룩업 서비스는 비즈니스 서비스 구성요소를 찾기 위해 비즈니스 대리인이 사용한다.[1]
구성 요소들
기본 구성 요소는 비즈니스 위임자, Lookup Service 및 비즈니스 서비스 입니다.
비즈니스 대표자
제어 및 보호는 ID 없이 ID와 함께 두 가지 유형의 구성을 가질 수 있는 비즈니스 대리인을 통해 제공되며, 여기서 ID는 EJBHome 또는 EJBObject와 같은 원격 객체에 대한 참조의 문자열 버전이다.[1]
Lookup Service
비즈니스 서비스는 비즈니스 대표가 사용하는 Lookup Service에 의해 위치한다.비즈니스 서비스 조회에 대한 구현 세부사항은 조회 서비스에 의해 캡슐화된다.[1]
비즈니스 서비스
이것은 고객에게 필요한 서비스를 제공하는 엔터프라이즈 콩 또는 JMS 구성 요소와 같은 비즈니스 계층 구성 요소.[1]
결과들
일부 결과는 다음과 같다.
- 중간 비즈니스 위임 계층이 비즈니스 계층과 프레젠테이션 계층을 분리함에 따라 더 많은 유연성과 유지 보수성.
- 비즈니스 딜러가 프레젠테이션 계층에 통일된 API를 제공하여 비즈니스 논리에 액세스하십시오.[1][3]
걱정
다음과 같은 우려를 고려할 수 있다.
- 응용 프로그램의 클래스 수를 늘리는 추가 계층으로 인한 유지 관리.
- 비즈니스 대표는 원격 비즈니스 객체 인터페이스의 변경을 관리해야 하며, 이러한 유형의 변경은 드물다.[3]
샘플코드
웹 계층 클라이언트가 세션 전면 패턴을 구현하는 세션 빈에 액세스해야 하는 PSA(Professional Services Application)의 샘플 코드는 다음과 같다.
리소스 위임자:
공중의 계급 ResourceDelegate { // 세션 전면의 원격 참조 사유의 리소스세션 세션; // Session Facade의 Home 객체에 대한 클래스 사유의 정태의 최종의 클래스 홈클라즈 = 코어 패턴.앱들.psa.ejb.리소스세션홈.계급; // 기본 생성자.집을 올려다보고 연결한다. // 새 세션을 생성하여 세션으로 이동 공중의 ResourceDelegate() 던지다 리소스Exception { 해보다 { 리소스세션홈 본국의 = (리소스세션홈) ServiceLocator.getInstance().딱 들어맞다( "리소스", 홈클라즈); 세션 = 본국의.만들다(); } 잡히다(ServiceLocator예외 이외의) { // 서비스 로케이터 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } 잡히다(CreateException 이외의) { // 세션 생성 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } 잡히다(RemoteException 이외의) { // 원격 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } } 공중의 비즈니스데레게이트(끈 id) 던지다 리소스Exception { 잘 하는 군요(); 다시 연결하다(id); } 공중의 끈 getID() { 해보다 { 돌아오다 ServiceLocator.getId(세션); } 잡히다 (예외 e) { // 애플리케이션 예외 발생 } } 공중의 공허하게 하다 다시 연결하다(끈 id) 던지다 리소스Exception { 해보다 { 세션 = (리소스세션) ServiceLocator.get서비스(id); } 잡히다 (RemoteException 이외의) { // 원격 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } } 공중의 자원토 setCurrentResource( 끈 resourceId) 던지다 리소스Exception { 해보다 { 돌아오다 세션.setCurrentResource(resourceId); } 잡히다 (RemoteException 이외의) { // 서비스 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } } 공중의 자원토 getResourceDetails() 던지다 리소스Exception { 해보다 { 돌아오다 세션.getResourceDetails(); } 잡히다(RemoteException 이외의) { // 서비스 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } } 공중의 공허하게 하다 setResourceDetails(자원토 vo) 던지다 리소스Exception { 해보다 { 세션.setResourceDetails(vo); } 잡히다(RemoteException 이외의) { 던지다 새로운 리소스Exception(...); } } 공중의 공허하게 하다 addNewResource(자원토 vo) 던지다 리소스Exception { 해보다 { 세션.addResource(vo); } 잡히다(RemoteException 이외의) { 던지다 새로운 리소스Exception(...); } } // 세션 콩에 대한 다른 모든 프록시 방법 ... }
ResourceSession용 원격 인터페이스:
공중의 계급 ResourceDelegate { // 세션 전면의 원격 참조 사유의 리소스세션 세션; // Session Facade의 Home 객체에 대한 클래스 사유의 정태의 최종의 클래스 홈클라즈 = 코어 패턴.앱들.psa.ejb.리소스세션홈.계급; // 기본 생성자.집을 올려다보고 연결한다. // 새 세션을 생성하여 세션으로 이동 공중의 ResourceDelegate() 던지다 리소스Exception { 해보다 { 리소스세션홈 본국의 = (리소스세션홈) ServiceLocator.getInstance().딱 들어맞다( "리소스", 홈클라즈); 세션 = 본국의.만들다(); } 잡히다(ServiceLocator예외 이외의) { // 서비스 로케이터 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } 잡히다(CreateException 이외의) { // 세션 생성 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } 잡히다(RemoteException 이외의) { // 원격 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } } 공중의 비즈니스데레게이트(끈 id) 던지다 리소스Exception { 잘 하는 군요(); 다시 연결하다(id); } 공중의 끈 getID() { 해보다 { 돌아오다 ServiceLocator.getId(세션); } 잡히다 (예외 e) { // 애플리케이션 예외 발생 } } 공중의 공허하게 하다 다시 연결하다(끈 id) 던지다 리소스Exception { 해보다 { 세션 = (리소스세션) ServiceLocator.get서비스(id); } 잡히다 (RemoteException 이외의) { // 원격 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } } 공중의 자원토 setCurrentResource( 끈 resourceId) 던지다 리소스Exception { 해보다 { 돌아오다 세션.setCurrentResource(resourceId); } 잡히다 (RemoteException 이외의) { // 서비스 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } } 공중의 자원토 getResourceDetails() 던지다 리소스Exception { 해보다 { 돌아오다 세션.getResourceDetails(); } 잡히다(RemoteException 이외의) { // 서비스 예외를 다음으로 변환 // 적용 예외 던지다 새로운 리소스Exception(...); } } 공중의 공허하게 하다 setResourceDetails(자원토 vo) 던지다 리소스Exception { 해보다 { 세션.setResourceDetails(vo); } 잡히다(RemoteException 이외의) { 던지다 새로운 리소스Exception(...); } } 공중의 공허하게 하다 addNewResource(자원토 vo) 던지다 리소스Exception { 해보다 { 세션.addResource(vo); } 잡히다(RemoteException 이외의) { 던지다 새로운 리소스Exception(...); } } // 세션 콩에 대한 다른 모든 프록시 방법 ... }