无状态企业Bean中的Web服务客户端

时间:2013-01-21 11:11:05

标签: java web-services ejb

实现无状态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?

Tutorial

1 个答案:

答案 0 :(得分:4)

本地服务

如果客户端提供程序位于应用程序服务器上的相同EAR或WAR中,则可以像序数 EJB一样调用它。 e.g。

@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;

CalculatorService类使用javax.xml.ws.WebServiceClient注释(服务的客户端)注释,该注释具有wsdlLocation属性。


如果要将WebService包装到EJB中,请参阅此answer。有关此问题的阅读,请参阅EJB and Web Services: getting the best of both worlds