使用javax.xml.ws.Endpoint公开Java Web服务的局限性?

时间:2009-11-10 20:22:48

标签: java .net web-services jax-ws

我正在尝试公开一些Java Web服务,以便我可以从C#进行互操作(请参阅此SO question)。下面的概念证明代码适用于WCF!

我的问题是关于使用javax.xml.ws.Endpoint类来发布我的服务:

  1. 通过这条路线而不是成熟的应用服务器,我会放弃什么?
  2. 对于长时间运行且呼叫量较小的服务,这是一个合适的解决方案吗?
  3. 以下生成WSDL,可以从.Net中干净地调用,并且运行良好。 为什么我不使用它?

    @javax.jws.WebService
    public class TestSvc { 
        @javax.jws.WebMethod()
        public String sayHello() {
            return "Hello!";
        }
    }
    
    import javax.xml.ws.Endpoint;
    public class Main  {
        public static void main(String[] args) throws Exception {
            Endpoint.publish("http://localhost:8181/Test", new TestSvc());
        }
    }
    

2 个答案:

答案 0 :(得分:4)

可扩展性参数(线程池等)通常非常有用,但您已经打了折扣。

接下来,可靠性。一些应用服务器具有良好的群集功能,非常容易添加新实例,从而在启用统一管理视图的同时实现容错。

随着您的服务数量的增长,易于管理通常非常方便。

安全基础架构和声明性安全模型非常重要。

对我来说,当您的业务逻辑变得非常重要时,整个Java EE编程模型值得拥有。现在我们可以进入整个EJB v Spring v ...辩论。但我想说的一点是,随着业务逻辑变得越来越严重,您需要诸如线程管理,持久性,连接池,消息传递,缓存和调度等工具;你在App Servers中找到的东西。其中一些在EJB3 + JPA或Spring中很自然,有些作为App Server中的自然附件。如果您有进行严肃的企业级Java开发的前景,那么现在购买更多的完整文本可能会更好,以便为未来建立可扩展的基础。

答案 1 :(得分:2)

除了一般地失去应用服务器的好处之外,如果您要使用应用服务器,则可能会失去管理,管理和测试服务的能力。

在操作间方面,如果没有java调用,您将无法提取WSDL。如果您的新服务在发布时执行了某些操作,您可能必须围绕它进行设计。如果您计划使用WCF或类似的东西来使用WSDL,那么在生成服务客户端时,您必须解决VS方面的一些怪癖(每一代都不会发生这种怪癖,但它们确实会发生在时间。)

长期运行的服务(我假设您的意思是预期无限期运行的服务)只需要作为一个流程进行管理。根据您的设计和要求,您必须考虑启动和停止流程,暂停流程等等。