@Stateless
@WebService
public class SecurityWebService {
public void registerUser(RegistrationRequest request) {
...
}
}
이 EJB는 웹 서비스로도 노출됩니다. 그러나 생성 된 웹 서비스에 문제가 있습니다. 기본적으로 상태 비 저장 세션빈은 트랜잭션 (자세한 내용은 here 참조)이므로 컨테이너 (GlassFish)에서 생성 된 WSDL에는 WS-Atomic Transaction 정책이 포함되어 있습니다. 불행히도 내 .NET 클라이언트는 WS-AT 정책을 이해하지 못하기 때문에 WSDL에서 질식합니다.
그래서 내가 원하는 것은 트랜잭션이 아니지만 관련된 EJB가 트랜잭션이어야합니다 (데이터베이스에 레코드를 삽입해야 함) 좋은 깨끗한 웹 서비스입니다. 어떻게해야합니까? 내가 생각할 수있는 유일한 접근법은 이런 모든 EJB를 호출하는 "일반적인"웹 서비스를 만드는 것입니다 - 전혀 우아하지는 않습니다 :
@WebService
public class SecurityWebService {
@Inject
private SecurityService securityService;
public void registerUser(RegistrationRequest request) {
securityService.registerUser(request);
}
}
@Stateless
public class SecurityService {
public void registerUser(RegistrationRequest request) {
...
}
}
더 좋은 방법이 있습니까?
고마워.
Naresh
왜 솔루션이 우아하지 않습니까? 이것은 책임의 깨끗한 분리입니다. 비 트랜잭션 웹 서비스는 트랜잭션 EJB와는 다른 책임이 있습니다. 또한 나중에 주변 상황을 쉽게 변경할 수 있습니다. – jhyot