본문으로 건너뛰기

10.3 EJB 3.1의 새로운 기능

EJB 3.1 Lite

EJB 3.1 Lite는 EJB 3.1의 부분집합으로 웹 프로파일에서도 사용할 수 있다. EJB 3.1의 대부분의 기능을 제공하고 있지만, 다음 기능을 제공하지 않는다.

  • 원격 인터페이스
  • RMI와 IIOP 상호 운용성
  • JAX-WS 웹서비스 엔드포인트
  • EJB 타이머 서비스(@Schedule, @Timeout)
  • 비동기 세션 빈 호출(@Asynchronous)
  • 메시지 드리븐 빈

싱글 톤

싱글 톤(singleton) 단 하나의 인스턴스 만 실행되는 새로운 유형의 세션 빈이다. 빈이 실행되는 JVM당 하나만 생성된다. 이러한 특징을 잘 활용할 수 있는 곳을 예를 들면, 인스턴스에 1개만 있어야 하는 캐시와 같은 것이 있다.

EJB Timer

EJB 2.1 이후 EJB는 타이머 메커니즘을 가지고 있다. 지정한 시간 간격으로 실행되는 것이고, 설정이 매우 복잡하다. EJB 3.0에서는 상황이 조금 개선되었지만, 타이머를 사용하려면 절차적으로 선언하여야 하고, 간격(interval)을 기반으로 해서 복잡한 로직에는 적용하기 어려웠다. 예를 들어, 만약 매주 일요일 자정마다 어떤 작업을 하는 것을 프로그래밍하려면, 많은 작업을 해야 했다. EJB 3.1은 Quartz와 Flux와 같은 다양한 다른 스케줄러들이 리눅스의 CRONTAB 작업과 같이 이런 시간을 지정하는 유연한 타이머 서비스를 제공하여 많이 개선했다. CRONTAB과 같은 일정을 포함하여, 간단한 스케줄링의 요구사항들이 반영되어 있어 EJB 3.1의 Timer는 매우 좋은 솔루션이다.

다음과 같이 특정일에 실행되는 스케쥴을 Java 어노테이션을 사용하여 지정할 수 있다.

@Schedule( ... dayOfMonth="1", month="1", year="2014")

Interface없는 빈

EJB 2.x 이전에 하나의 EJB를 생성하기 위해 빈을 구현하는 소스파일뿐만 아니라 비즈니스 인터페이스, 홈 인터페이스, XML로 작성된 디플로이먼트 디스크립터가 필요했다.

EJB 3.0에서는 어노테이션으로 EJB의 메타 데이터를 설정할 수 있기 때문에 디플로이먼트 디스크립터를 작성할 필요가 없다. 또 홈 인터페이스가 없어졌고 빈 구현 소스파일과 비즈니스 인터페이스만으로 EJB를 만들 수 있게 되었다. 빈 구현 파일도 기존에 필요했던 콜백 메서드 작성 등이 필요 없어 매우 쉽게 EJB를 만들 수 있게 되었다.

EJB 3.1에서도 이 흐름을 이어받아 로컬에서 접근하는 EJB는 로컬 비즈니스 인터페이스를 생략할 수 있게 되었다. 이렇게 하면 로컬에서만 사용되는 EJB는 빈을 구현하는 소스 파일 하나로만 만들 수 있어, EJB 2.x의 시대와 비교하면 엄청나게 단순화되었다.

배포의 단순화

기존의 EJB는 ‘EJB jar 파일’이라는 하나의 jar 파일로 저장하여야만 했지만, EJB 3.1에서는 @Stateless 등 EJB 관련 ‘주석’을 붙인 빈 클래스를 클래스 패스에 놓기만 하면 자동으로 EJB로 인식하게 된다. 또 웹 애플리케이션의 아카이브 파일인 WAR 파일의 ‘WEB-INF/classes’ 에 EJB 구현 클래스 파일을 놓으면 EJB로 사용할 수 있기 때문에 개발 생산성이 매우 높아졌다.

기존의 애플리케이션은 EJB를 사용하기 위해서는, EJB를 EJB-jar 파일에 저장하고 웹 애플리케이션과 관련된 부분은 WAR 파일에 저장한 후 그것을 EAR 파일로 묶어야만 하는 조금 귀찮은 과정이 많이 필요했지만, EJB 3.1에서는 하나의 WAR 아카이브에 EJB를 사용하는 웹 애플리케이션을 만들 수 있게 되었다. 정말 간편해졌다.

EJB에서 사용하는 디스크립터 파일도 WEB-INF/ejb-jar.xml 파일에 정의하여 사용할 수 있다. WAR 파일로 패키지된 빈은 하나의 네임 스페이스를 공유하고 WAR 일부가 된다. WEB-INF/lib 디렉터리에 .jar로 패키징하는 것도 WEB-INF/classes 디렉터리에 클래스를 두는 것과 같다. 새로운 표준 중 또 다른 형태가 EJB Lite이다. 최근의 많은 애플리케이션은 EJB 의 많은 기능을 필요로 하지는 않는다. EJB Lite는 EJB 중에서도 가장 많이 사용하는 세션 빈을 중심으로 한 EJB 3의 부분 집합이다. EJB Lite는 Stateless, Stateful세션 빈, Singleton세션 빈을 지원한다. 빈은 로컬 interface 또는 interface없이 뷰를 만들 수 있다. 이들은 인터셉터와 트랜잭션, 보안과 같은 컨테이너가 제공하는 서비스를 사용할 수 있다.