본문 바로가기

Development/Web & Server

[Play Framework] No EntityManager bound to this thread. Try wrapping this call in JPA.withTransaction, or ensure that the HTTP context is setup on this thread.

테스트를 하다가 JPA관련 테스트를 진행하면 다음과 같은 에러가 발생한다....

이유는 Transaction과 관련이 있었다. 현재 테스트 하는 Thread가 binding?이 되지 못해서 생기는 오류인듯 하다. 해결방법은 간단하다.


[error] Test ServiceTest.deviceServiceTest failed: java.lang.RuntimeException: No EntityManager bound to this thread. Try wrapping this call in JPA.withTransaction, or ensure that the HTTP context is setup on this thread.

[error]     at play.db.jpa.JPA.em(JPA.java:55)

[error]     at models.Device.getAllDevice(Device.java:75)

[error]     at jsonRpc.server.service.DeviceServiceImpl.getDeviceList(DeviceServiceImpl.java:30)

[error]     at ServiceTest.deviceServiceTest(ServiceTest.java:18)

[error]     ...


테스트를 하기전에 해당 Test Thread에 bind시켜주면 된다~!.


import javax.persistence.EntityManager;


import org.junit.After;

import org.junit.Before;


import play.db.jpa.JPA;

import play.db.jpa.JPAPlugin;

import play.test.FakeApplication;

import play.test.Helpers;

import scala.Option;


  @Before

public void setUp() {

final FakeApplication app = Helpers.fakeApplication();

Helpers.start(app);

Option<JPAPlugin> jpaPlugin = app.getWrappedApplication().plugin(JPAPlugin.class);

mEm = jpaPlugin.get().em("default");

    JPA.bindForCurrentThread(mEm);

   

}//end setUp Method


@After

public void tearDown() {

    JPA.bindForCurrentThread(null);

    this.mEm.close();

   

        }//end tearDown Method

//Variables

private EntityManager mEm;




'Development > Web & Server' 카테고리의 다른 글

[AWS] S3 연동하기~! Java  (0) 2013.12.11
[Hibernate] C3P0 connection Pool  (0) 2013.12.06
[Play Framework] Test 하기~!  (0) 2013.12.05
[Play Framework] Global Setting  (0) 2013.12.03
[Node.js] Json-RPC 라이브러리  (0) 2013.12.03