没有Web应用程序服务器的Java Web服务

Jun*_*Liu 8 tomcat web-services java-metro-framework jax-ws java-ee

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

  • 开始几个线程
  • 处理邮件
  • 与数据库等交互......

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

问题是:

  • 服务器只是标准的j2se应用程序,不在应用程序服务器内运行,如tomcat或glassfish.
  • 要处理Http请求,我是否需要实现http服务器?
  • 我想使用漂亮的j2ee注释,如@webservice,@ webmothod等...是否有任何我可以使用的库或框架

kol*_*sus 9

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

  1. 设计一个SEI服务端点接口,它基本上是一个带有Web服务注释的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();
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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"; }
     }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用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.
       }
    }
    
    Run Code Online (Sandbox Code Playgroud)

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