2013-04-03 44 views
8

我正在开发一个非常简单的REST Web服务,使用Eclipse,Tomcat7和Jersey实现,并连接到MySQL。 寻找球衣文档,我知道每个请求都会创建一个新的根资源类的对象。但我不知道是否每个请求都是独立的,例如,如果一个请求需要等待很长时间,那么服务器会接受更多的请求吗?并发请求到泽西休息服务

问题是: 我有2个主要类,1个类实现泽西与注释(Proxy.java),和其他类连接到一个BD(Notificator.java),这个类只有一个实例( Singleton),以便只使用1个Connection对象。实现Jersey的类使用这个类。所以,如果其中一个请求被阻止,我不知道其他人是否会运行,因为他们使用相同的(Notificator.java)实例。

这个关系是N个(Proxy.java)实例使用唯一一个(Notificator.java)巫婆有一个连接到MySQL。

+0

为什么你想只有一个连接到数据库? –

+0

我为了简单起见,并避免了并发问题。 –

回答

3

球衣是在servlet之上开发的。每个传入请求都有一个新线程。您的代码正在为所有线程创建一个瓶颈,因为存在对单个可用连接对象的争用。如果您有多个请求,则只有一个请求将使用该连接,而其他请求则需要等待。如果等待时间不长,那么没有问题。但是如果等待超过HTTP请求超时,那么其他请求可能会以TIMED OUT结束。

我知道您可能因为某些业务需求/复杂性而导致单连接瓶颈。因此,在所有这些我们无法同时处理所有请求的情况下,可能有各种各样的原因,那么我们应该创建我们的Web服务作为异步。异步Web服务使用SUBMIT REQUEST-> REQUEST ACCEPTED(将异步处理)和JOB URL返回以进行轮询 - > CLIENT POLLS的模型,直到作业未完成。

希望它有帮助!

+0

“每个传入请求都有一个新线程”,这是重要的一点!非常感谢。我知道有一个瓶颈,因为我只使用一个Connection,但通常只会有2或3个同时请求,所以我认为不会有问题。但我会研究“异步Web服务”。 –

0
+0

thx,但最后我的老师说我的连接池将难以实现,所以我只在Notificator类中使用关键字“syncronized”来避免并发问题。我也意识到,每次对球衣的呼叫都是独立运行的,所以,如果其中一个呼叫集团,其他人将正常运行。 –

+0

使用'synchronized'关键字可以阻止其他呼叫。如果这是你需要的,那么好吧。 – Vitaly

+0

我阻止其他呼叫,但是当资源可用时,它们会醒来?那是我老师给我解释的。这对我有用。 –

相关问题