2013-02-10 79 views
1

我是java新手,正在使用CXF JAXRS库构建Java休息服务。Mulrereading Java休息服务

我希望服务能够一次使用多个http请求。我如何实现这一目标?

我需要在Web容器中托管服务吗?或者我可以实现多线程,即使我运行没有(最好)Web容器的服务?

感谢

+0

出于好奇,为什么你会*不*要在Web容器来举办这次的一个简单的例子?它提供了*很多*的好处。 – Perception 2013-02-10 22:57:03

+0

Java休息服务将在桌面客户端PC(非服务器)上运行,并从其他桌面应用程序获取请求。所以我认为一个Web容器会让java进程体积更大。在桌面PC中运行整个Java容器是否是正常的用例? – rak24 2013-02-11 14:25:32

+3

您可以在技术上***运行没有Web容器的JAX-RS实现,但我知道没有有用的实现。如果您将一个小型Web容器嵌入到您的桌面应用程序中,您将获得更高的里程数(如原文)。我建议看看[Grizzly](http://grizzly.java.net/)和[Jetty](http://jetty.codehaus.org/jetty/)。 – Perception 2013-02-11 14:37:30

回答

0

您必须修改您的应用程序来处理在同一时间多个请求,同时保存以供将来处理传入的请求的架构。

实施主 - 工作者模式,这将解决您的问题。 您可以按照以下步骤来实现此模式(其方法不是算法):

1)使用Java 5或Fork的Executor Framework根据您的意愿从Java 7加入。假设我们正在使用java 5.

2)使用共享队列暂时保存数据(比如某些工作对象)以供将来使用。我使用了线程安全的BlockingQueue。

3)创建一个主类,它将启动和停止工人的多个实例(n)。当收到一个新的请求时,master将数据放入工作对象中,并将这个工作对象添加到队列中。在将工作对象添加到队列时,master将调用此队列上的notifyAll方法(唤醒所有等待的工作人员)。

4)创建一个工作线程类,它将侦听此队列(通过在其构造函数中引用共享队列)。从队列中逐个获取工作对象,直到队列为空。队列为空时使工作人员处于等待状态。当Master将调用此队列上的notifyAll方法时,它将再次启用。

让我知道你是否需要任何其他的澄清。

执行人框架(未师傅模式)是here

+2

或者,您可以节省所有这些麻烦,只需使用像Jetty这样的嵌入式容器。 – artbristol 2013-02-18 13:09:46

+2

如果您真的想实现多线程,那么使用嵌入式容器并不总是一种解决方案。但这一切都取决于需求。 – Sandeep 2013-02-19 11:06:33