3

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

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

  1. 走这条路线而不是成熟的应用程序服务器,我会失去什么?
  2. 对于呼叫量较少的长时间运行服务,这是一个合适的解决方案吗?

以下生成 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());
    }
}
4

2 回答 2

4

通常,可伸缩性参数(线程池等)非常有说服力,但您已经忽略了这些。

其次,可靠性。一些应用服务器具有很好的集群功能,很容易添加新实例,因此在启用整合管理视图的同时启用容错。

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

安全基础设施和声明式安全模型可能非常重要。

对我来说,当您的业务逻辑变得不平凡时,整个 Java EE 编程模型都值得拥有。现在我们可以进入整个 EJB v Spring v ... 辩论。但我想说的一般观点是,随着您的业务逻辑变得更加严肃,您需要诸如线程管理、持久性、连接池、消息传递、缓存和调度之类的设施;你在应用服务器中找到的东西。其中一些在 EJB3+JPA 或 Spring 中自然出现,一些作为应用服务器中的自然附加组件。如果您有进行严肃的企业级 Java 开发的前景,那么现在购买稍微复杂一点的东西可能会更好,以便为未来建立可扩展的基础。

于 2009-11-10T20:32:25.483 回答
2

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

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

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

于 2009-11-10T20:43:16.093 回答