비즈니스 위임 패턴

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(...);     }   }    // 세션 콩에 대한 다른 모든 프록시 방법   ... } 

[1]

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(...);     }   }    // 세션 콩에 대한 다른 모든 프록시 방법   ... } 

[1]

참고 항목

참조

  1. ^ a b c d e f g h i "Core J2EE Patterns – Business Delegate". Oracle. Oracle. Retrieved 22 June 2016.
  2. ^ Screening Technical Design Document – Version 2.0. Indiana, USA: Indiana state. p. 7.
  3. ^ a b c Kayal, D. (2008). Pro Java EE Spring Patterns. New York: Apress. pp. 161–166.