2011-11-15 11 views
2

私はMEMのDB内からのpostgresに移行して以来、私の機能テストを実行するときPlayframework機能テストjava.util.concurrent.TimeoutException

java.util.concurrent.TimeoutException 

を得続けます。あなたはおそらく、あなたのスレッドプールのサイズを大きくする必要が

Http.Response response = GET("/services/names/"); 
    assertIsOk(response); 

完全なエラーメッセージ

java.lang.RuntimeException: java.util.concurrent.TimeoutException 
    at play.test.FunctionalTest.makeRequest(FunctionalTest.java:291) 
    at play.test.FunctionalTest.makeRequest(FunctionalTest.java:297) 
    at play.test.FunctionalTest.GET(FunctionalTest.java:100) 
    at play.test.FunctionalTest.GET(FunctionalTest.java:54) 
    at controllers.ImagesTest.shouldReturnListOfImages(ImagesTest.java:25) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at play.test.PlayJUnitRunner$StartPlay$2$1.evaluate(PlayJUnitRunner.java:98) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at play.test.PlayJUnitRunner.run(PlayJUnitRunner.java:48) 
    at org.junit.runners.Suite.runChild(Suite.java:128) 
    at org.junit.runners.Suite.runChild(Suite.java:24) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:136) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:117) 
    at play.test.TestEngine.run(TestEngine.java:101) 
    at controllers.TestRunner.run(TestRunner.java:67) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:546) 
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:500) 
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:476) 
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:471) 
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:159) 
    at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:220) 
    at play.Invoker$Invocation.run(Invoker.java:265) 
    at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:200) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:680) 
Caused by: java.util.concurrent.TimeoutException 
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:91) 
    at play.test.FunctionalTest.makeRequest(FunctionalTest.java:278) 
+0

"/ services/name"コールで何をしていますか?あなたのモデルがPostgreSQLと互換性がない(予約されたキーワードなどを使用しない)場合を除き、mem dbからPostgreSQLへの移行は、このエラーが実際の問題をマスキングしている可能性があります。 –

答えて

0

。デフォルトのテストによってDEVモードで実行し、DEVモードがあなたのapplication.confにこのラインのための1ルックのスレッドプールのサイズを持っていますでしょう、その値を増やす場合= 1

play.poolを参照してください。助けて。

+0

動作しません。 – lemon

1

機能テストには、すべてのリクエストでハードコードされた30秒のタイムアウトが組み込まれています。 (Play 1.2.3のFunctionalTest.java:278を参照してください)。多分あなたのテストはポストグレムで長く続くでしょうか?

1

あなたは、デッドロックが発生している:でテスト実行と1.2 release notesで説明したように、アクションの実行がconflctingされたもので、トランザクションを。あなたがSET TRANSACTIONを使用して、それを指定した場合でもので、残念ながら、あなたは何ができるか

the transaction isolation level will still be READ COMMITTED、PostgreSQLでは READ UNCOMMITED分離レベルを使用することはできませんテストコード内のトランザクションは、そのアクションにトランザクション前にコミットされていることを確認することですテストコードが起動します。たとえば、

@Test 
public void testSomething() { 
    Fixtures.loadModels("models.yml"); 
    JPA.em().getTransaction().commit(); 

    // Call a controller 
} 

メモリ内データベースを使用してテストを実行することもできます。