2016-02-03 18 views
2

,如果用户以管理员身份登录,他可以执行任何操作。如果第二个管理员同时检查了相同的路线并为相同的路线创建了airwaybill,则假定一个管理员修改了路线。这将是一个问题。我无法找到我的应用程序如何处理这些并发请求。 (我们只是使用jdbc交易)在我们的应用程序中处理java中的并发请求

我得到了我的团队的不同答案1. web /应用程序服务器处理这些事务,它将处理并发请求,没有任何问题。 2.锁将发生在数据库上的行上,并不会有任何并发​​请求的问题。

bottomline:并发请求应该在代码中处理?或者我们将在部署时在Web /应用程序中为并发请求进行任何设置?或者默认数据库会通过行锁机制来处理并发请求?

如果有人知道在哪里可以找到解决方案,请告诉我。

回答

0

据我所知,大多数数据库引擎在查询过程中使用某种锁定,但会因引擎而异。我知道InnoDB强制执行交易原子性(see this stack exchange thread),所以在交易中封装的任何东西都不会在执行过程中受到干扰。然而,对于哪个请求首先到达数据库没有任何保证。

至于webServer/appServer,假设你使用了一个线程化的web服务器:apache tomcat,jetty等,然后每个请求都由一个单独的线程来处理,所以我认为它没有固有的线程安全。在大多数情况下,数据库将不会抱怨地处理您的并发性,但是我会建议在应用程序端包含某种序列化,以防您决定在某处改变数据库实现,您还可以更好地控制请求的方式被处理。

简而言之,做两个。

+0

我使用的是Apache Tomcat服务器,数据库是oracle。我不会更改tomcat服务器/数据库。所以我可以忽略处理并发transanctions“数据库将处理您的并发而不抱怨”,是吗? – ra305676

+0

为了防守,我建议在服务器上放置一些防御措施,这样你就不太可能被抓到。 –

0

据我所知,大多数数据库在事务和查询期间都有某种锁定,但您应该检查数据库引用以确保它使用的锁定方法的类型。至于你的web服务器的问题,我知道tomcat并发地处理请求,并为它自己的资源提供某种线程安全性,但它不会为你的应用程序提供线程安全性。因此,你应该自己做。对于上面提到的问题,我认为当你访问你的路由时,你应该在数据库中查询它是否存在。另外当你的其他管理员修改路由时,你可以在你正在做的那个块上使用某种锁,这样当另一个管理员同时想要访问正在修改的路由时,他会等待事务处理完成。如果您在服务器端使用java,我建议查看java同步方法或其他语言,请检查该语言的锁定和线程安全方法。

相关问题