【问题标题】:Java web service without a web application server没有 Web 应用程序服务器的 Java Web 服务
【发布时间】:2012-10-03 08:36:47
【问题描述】:

我们有一个消息处理服务器,

  • 启动几个线程
  • 处理消息
  • 与数据库交互等.....

现在客户端希望在服务器上有一个Web服务服务器,他们将能够使用Web服务客户端查询消息处理服务器。例如给我今天的所有消息,或者删除带有 id 的消息....

问题是:

  • 服务器只是一个标准的 j2se 应用程序,不像 tomcat 或 glassfish 那样在应用程序服务器内部运行。
  • 要处理一个Http请求,我需要实现一个http服务器吗?
  • 我想使用漂亮的 j2ee 注释,例如 @webservice、@webmothod 等... 有没有我可以使用的库或框架

【问题讨论】:

  • 为什么不能在任何容器(如 tomcat 或 glassfish)上部署 Web 服务应用程序?您可以将其客户端写入任何 j2se 应用程序。客户有什么限制吗?
  • @zaffargalachal 这不是那样的设计,我想在运行 10 次之后我们告诉他们服务器需要进入一个叫做 glassfish 的东西。他们会发疯的。
  • 如果消费者客户端是用 JAVA 编写的,除了 Web 服务,你不能有其他解决方案,比如 RMI 吗?

标签: web-services tomcat jakarta-ee jax-ws java-metro-framework


【解决方案1】:

要使用漂亮的 j2ee 注释,请参阅 Apache CXF http://cxf.apache.org/

【讨论】:

    【解决方案2】:

    您不需要第三方库即可使用 注释。 J2SE 附带,因此您仍然可以使用所有注释。您可以使用以下解决方案实现轻量级结果,但对于任何优化/多线程,它都需要您自己实现:

    1. 设计一个SEI,服务端点接口,它基本上是一个带有web-service注解的java接口。这不是强制性的,它只是基本 OOP 的一个良好设计点。

      import javax.jws.WebService;
      import javax.jws.WebMethod;
      import javax.jws.WebParam;
      import javax.jws.soap.SOAPBinding;
      import javax.jws.soap.SOAPBinding.Style;
      
      @WebService
      @SOAPBinding(style = Style.RPC) //this annotation stipulates the style of your ws, document or rpc based. rpc is more straightforward and simpler. And old.
      public interface MyService{
      @WebMethod String getString();
      
      }
      
    2. 在称为 SIB 服务实现 bean 的 java 类中实现 SEI。

      @WebService(endpointInterface = "com.yours.wsinterface") //this binds the SEI to the SIB
      public class MyServiceImpl implements MyService {
      public String getResult() { return "result"; }
       }
      
    3. 使用Endpoint 公开服务 导入 javax.xml.ws.Endpoint;

      public class MyServiceEndpoint{
      
      public static void main(String[] params){
        Endpoint endPoint =  EndPoint.create(new MyServiceImpl());
        endPoint.publish("http://localhost:9001/myService"); //supply your desired url to the publish method to actually expose the service.
         }
      }
      

    正如我所说,上面的 sn-ps 非常基础,并且在生产中表现不佳。您需要为请求制定一个线程模型。端点 API 接受 Executor 的实例以支持并发请求。线程不是我真正的事,所以我无法给你指点。

    【讨论】:

    • 注意上面的答案是伪代码,概念是对的,但代码可能不起作用。这是一个非常简单但有效的教程,代码绝对有效。 mkyong.com/webservices/jax-ws/jax-ws-hello-world-example
    • 当您的应用程序退出时,您必须优雅地停止 Web 服务。否则你将有问题重新开始。因为端口已经绑定?ect..
    • 如何确定用于"com.yours.wsinterface" 的正确值?
    • @Duncan - 正确的值是带有 @WebService 注释的 java 接口的 FQN(在本例中为 MyService)。在这种情况下,正确的值应该是 com.foo.MyService,因为这是 MyServiceImpl 实现的。
    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多