0

实现无状态 EJB 3.1 以调用 Web 服务的正确方法是什么。我的客户端作为 Servlet 工作,但我想将调用移动到 EEJ bean 中。我必须在 SOAP 标头信封中添加用户名和密码才能访问 WS,这工作正常。

servlet 使用的服务如下所示;

@WebServiceClient(name = "MessageService", targetNamespace = "http://...", wsdlLocation = "...wsdl")
public class MessageService
    extends Service

我可以包装MessageService在无状态 EJB 中还是应该使用 bean 本身@WebServiceRef(如教程中所示)而不包装 MessageService ?

教程

4

1 回答 1

4

本地服务

如果客户端提供者位于应用服务器上的相同 EAR 或 WAR 中,则可以像序号EJB 一样调用。例如

@WebService
@Stateless
public class CalculatorBean implements Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

CalculatorBean是线程安全的。方法中发生的所有业务逻辑add都是容器管理事务的一部分,不参与任何全局事务。

或者,客户端代码可以在 JNDI 名称空间中查找。

远程服务

运行时可以将服务对象或端口对象注入到使用 注释的成员变量中javax.xml.ws.WebServiceRef

@WebServiceRef(CalculatorService.class)
private Calculator port;

该类使用具有属性CalculatorServicejavax.xml.ws.WebServiceClient注解(服务的客户端)进行注解wsdlLocation


如果您想将 WebService 包装到 EJB 中,请参阅此答案。要阅读有关此内容的讨论,请参阅EJB 和 Web 服务:两全其美

于 2013-01-22T06:16:37.507 回答