从播放的文档中:
由于Play 2.0的工作方式,操作代码必须尽可能快(即非阻塞)。那么,如果我们还不能生成结果,那我们应该返回什么呢?回应是对结果的承诺!
因此,我不应该直接在操作内部进行数据库调用。现在,当我查看Plays JPA文档时,这使我感到困惑:
每个JPA调用都必须在事务中完成,因此,要对特定操作启用JPA,请使用@ play.db.jpa.Transactional对其进行注释。这将使您的操作方法与为您管理事务的JPA操作组成
这让我有些困惑。如果遵循文档,则不应通过数据库调用阻止操作线程。但是,如果要执行的操作是创建和管理数据库事务,是不是通过将工作发送给参与者或以某种方式将工作卸载到另一个线程而丢失了该事务?我的意思是,我是scala和play的新手,但我只是看不到交易如何进入单独的线程。有谁有解释,或者我应该做的方式吗?我很困惑
您错过了一个难题,请在此处的“高度同步”下阅读:http : //www.playframework.com/documentation/2.2.x/ThreadPools
因此,是的,您希望它是非阻塞的,但是如果由于JPA / JDBC等原因而无法做到这一点,那么您可以像使用常规Java Web容器(具有许多线程的线程池)那样配置播放。它不会给您所有的发挥,但对您来说可能就足够了。
您还可以创建一个特定的线程池/执行上下文,并仅在该线程池/执行上下文上运行JPA / JDBC内容,并使其余服务器保持不阻塞状态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句