我有一个如下定义的EJB(使用Java EE 6注释编码):如何将EJB公开为非事务性的Web服务?
@Stateless
@WebService
public class SecurityWebService {
public void registerUser(RegistrationRequest request) {
...
}
}
注意,此EJB也被暴露为web服务。但是,我遇到了生成的Web服务的问题。由我的容器(GlassFish)生成的WSDL包含WS-Atomic事务策略,因为默认情况下无状态会话Bean是事务性的(请参阅详细信息here)。不幸的是,我的.NET客户端在WSDL上窒息,因为它不理解WS-AT策略。
所以我真正想要的是一个非干净的Web服务,它不是事务性的,但关联的EJB应该是事务性的(它必须在数据库中插入记录)。我该怎么做呢?我能想到的唯一的方法是创建一个传递到像这样的EJB所有的所谓的“正常”的Web服务 - 不优雅可言:
@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) {
...
}
}
有没有更好的办法?
谢谢。
纳雷什
为什么你的解决方案不够优雅?这是责任的完全分离。非事务性Web服务具有与事务性EJB不同的责任。它也可以让你稍后改变事情。 – jhyot 2015-10-23 07:46:54