没有Web应用程序服务器的Java Web服务 [英] Java web service without a web application server

查看:252
本文介绍了没有Web应用程序服务器的Java Web服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

We have a message processing server, which


  • 启动几个线程

  • 处理消息

  • 与数据库等交互.....

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

now the client want to have a web service server on the server, they will be able to querying the message processing server, with a web service client. e.g. give me all the messages for today, or delete the message with id....

问题是:


  • 服务器只是标准的j2se应用程序,不在应用程序服务器内运行,如tomcat或glassfish。

  • 要处理Http请求,我是否需要实现http服务器?

  • 我想使用漂亮的j2ee注释,例如@webservice,@ webmothod等...
    有没有我可以使用的库或框架

推荐答案

您不需要第三方库来使用 jax-ws 注释。 J2SE附带 jax-ws ,所以所有的注释仍然可供您使用。您可以使用以下解决方案实现轻量级结果,但对于任何优化/多线程,您可以自行实现:

You don't need a third party library to use jax-ws annotations. J2SE ships with jax-ws, so all the annotations are still available to you. You can achieve lightweight results with the following solution, but for anything optimized/multi-threaded, it's on your own head to implement:


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

  1. Design a SEI, service endpoint interface, which is basically a java interface with web-service annotations. This is not mandatory, it's just a point of good design from basic 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();

}


  • 在名为a的java类中实现SEI SIB服务实现bean。

  • Implement the SEI in a java class called a SIB service implementation bean.

    @WebService(endpointInterface = "com.yours.wsinterface") //this binds the SEI to the SIB
    public class MyServiceImpl implements MyService {
    public String getResult() { return "result"; }
     }
    


  • 使用端点公开服务
    import javax.xml.ws.Endpoint;

  • Expose the service using an Endpoint import 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.
       }
    }
    


  • 就像我说的那样,上面的片段非常基本,并且在制作中表现不佳。您需要为请求设计线程模型。端点API接受的执行人实例支持并发请求。线程不是我的事,所以我无法给你指点。

    The snippets above, like I said, are pretty basic, and will perform poorly in production. You'll need to work out a threading model for requests. The endpoint API accepts an instance of Executor to support concurrent requests. Threading's not really my thing, so I'm unable to give you pointers.

    这篇关于没有Web应用程序服务器的Java Web服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆