Java web service without a web application server

前端 未结 2 1660
花落未央
花落未央 2020-12-01 22:08

We have a message processing server, which

  • start a few threads
  • processing the message
  • interact with the database etc.....

now

相关标签:
2条回答
  • 2020-12-01 22:24

    For using nice j2ee annotations see Apache CXF http://cxf.apache.org/.

    0 讨论(0)
  • 2020-12-01 22:29

    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. 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();
      
      }
      
    2. 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"; }
       }
      
    3. 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.
         }
      }
      

    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.

    0 讨论(0)
提交回复
热议问题