没有Web应用程序服务器的Java Web服务 [英] Java web service without a web application server
问题描述
我们有一个消息处理服务器,
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:
-
设计一个SEI服务端点接口,它基本上是一个带有Web服务注释的java接口。这不是强制性的,它只是基本OOP的良好设计点。
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屋!