테스트를 하다가 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 |