什么样的"模式"用于获取SOAP客户端? Web应用程序/企业应用程序

时间:2015-10-28 11:37:58

标签: java web-services soap singleton

我想知道是否使用 singleton 模式来获取 SOAP客户端实例?

singleton 模式是解决该问题的好方法。我不想为每个 WS 调用创建一个新客户端。

我有两个应用程序,我遇到了同样的问题。 一个是用JSF编写的Web应用程序。其他是使用EJB编写的Enterpise应用程序。

目前的简化实施:

网络应用程序:

public final class ClientWs {

  private WS port;

  public ClientWs(String wsdlAddress) throws ClientWsException {
    setPort(wsdlAddress);
  }
  ...
}


@Named
@ApplicationScoped
public class ClientBean {
  ...
  public ClientWs getClient() {
    return new ClientWs(URL);
  }
  ...
}

Enterpise应用程序:

public final class ClientWs {

  private WS port;

  public ClientWs(String wsdlAddress) throws ClientWsException {
    setPort(wsdlAddress);
  }
  ...
}

@Singleton(name = "clientBean")
public class ClientBean {
  ...
  public ClientWs getWsClient() {
    return new ClientWs(URL);
  }
  ...
}

获取实例客户端的解决方案是什么?您会为这些类型的应用程序使用不同的方法吗?

1 个答案:

答案 0 :(得分:0)

如果你保持客户无国籍并让你的D.I.管理它,我不认为你真的需要担心它是单身人士吗?框架/容器(例如Spring,CDI或诸如此类)。您可以使用Spring-WS并从applicationcontext中获取实例。默认情况下它是一个单身人士,但你通常不知道,也不关心。

编辑:如上所示的实施不是无国籍的。它取决于创建时提供的URL。因此,一个vanilla单例实现会遇到这样的问题:您不能再使用客户端类来访问任何其他Web服务。如果你想继续这条路线,你可以创建一个工厂,在内部管理每个URL的每个客户端的单个实例,可能在Map中。

但是,正如我所提到的,我建议将生命周期管理的这一部分留给框架而不是自己编写。