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

We have a message processing server, which

start a few threads

processing the message

interact with the database etc.....

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....

the problem are:

The server just a standard j2se application, doesn't run inside application server, like tomcat or glassfish.

To handle a Http request, do I need to implement a http server?

I would like to use the nice j2ee annotation such as @webservice, @webmothod etc...

is there any library or framework I can use

解决方案

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:

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

}

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"; }

}

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值