8

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

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

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

问题是:

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

2 回答 2

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

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

于 2012-10-13T06:20:33.570 回答
0

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

于 2012-10-12T17:35:09.010 回答