许多框架允许我将 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/