java - 如何将 EJB 公开为 Web 服务,以便稍后在 ejb 更改时让我保持客户端兼容性?

标签 java web-services

许多框架允许我将 ejb 公开为 web 服务。

但是在发布初始服务 2 个月后,我需要更改 ejb 或其界面的任何部分。我仍然有需要访问旧界面的客户端,所以我显然需要 2 个具有不同签名的 Web 服务。

任何人对我如何做到这一点有任何建议,最好让框架完成创建包装器和复制逻辑的繁重工作(除非有更聪明的方法)。

我可以在此基础上选择webservice框架,欢迎提出建议。

编辑:我知道我的更改会破坏兼容性,而且我完全知道我将同时需要两个具有不同命名空间的服务。但是我怎样才能以简单的方式做到这一点呢?

最佳答案

我不认为,您需要任何额外的框架来执行此操作。 Java EE 允许您直接将 EJB 公开为 Web 服务(自 EJB 2.1 起;请参阅 example for J2EE 1.4 ),但使用 EE 5 则更简单:

@WebService
@SOAPBinding(style = Style.RPC)
public interface ILegacyService extends IOtherLegacyService {
    // the interface methods
    ...
}

@Stateless
@Local(ILegacyService.class)
@WebService(endpointInterface = "...ILegacyService", ...)
public class LegacyServiceImpl implements ILegacyService {
    // implementation of ILegacyService
}

根据您的应用程序服务器,您应该能够在任何合适的位置提供 ILegacyService。正如jezell所说,你应该尽量把不改变契约的改变直接放到这个接口(interface)里。如果您有其他更改,您可以只提供具有不同接口(interface)的另一个实现。可以将通用逻辑拉入 LegacyServiceImpl 的父类(super class)中。

关于java - 如何将 EJB 公开为 Web 服务,以便稍后在 ejb 更改时让我保持客户端兼容性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/222028/

相关文章:

java - 如何使用 `ReportExecution2005.asmx` 指定要渲染的页面?

java - 在小程序中序列化对象

java - 如何在maven中创建一个减去一些包的发行版?

web-services - 使用Webservices查找两个邮政编码之间的距离?

web-services - 使用 marklogic 使用外部 Web 服务

java - 下面的配置是什么意思(jaxb-fluent-api)?

java - Amazon SQS 在这种情况下如何工作?

java - 当使用 CursorAdapter 的回调时,调用 initLoader() 仅有效一次

java - 为什么在这种情况下 subpath() 会抛出 IllegalArgumentException ?

java - 每当有键匹配时减去两个映射的值?