2013-08-01 1 views
1

데이터베이스 액세스 테스트를하고 데이터베이스 파일을 삭제 한 다음 데이터를 추가하고 테스트를 실행하여 테스트를 시작하는 경향이 있습니다. (내 비즈니스 로직을 테스트하는 것입니다. DataNucleus 코드를 묵시적으로 신뢰합니다.)단일 JVM 실행에서 DataNucleus를 다시 시작하려면 어떻게해야합니까?

내 테스트는 첫 번째 실행에서 계속 이어지며 이후의 각 실행마다 실패합니다. 이것은 하나의 매우 수명이 긴 JVM 인스턴스에서 모든 것을 실행하는 SBT 명령 프롬프트 내에서 테스트를 실행하는 경향이 있다는 점을 제외하고는 의미가 없습니다. 어떤 시점에서 테스트 용으로 새로운 JVM을 포크화할 설정을 추가하고 매번 모든 것이 작동하기 시작했습니다.

DataNucleus가 JVM 용으로 초기화되었고 캐시와 환경 뷰를 만들었습니다. 데이터베이스 파일을 삭제할 때 시스템에서 JVM이 중지되지 않았고 다시 뒤에서 변경된 사항을 알 수 없었기 때문에 모든 것을 다시 초기화하고 다시 만들어야한다는 것을 알 수있는 방법이 없었습니다.

테스트를 위해 새로운 JVM을 포크하는 것이 분명하지만 문제는 해결할 수있는 해결책이 있는지 궁금합니다. 기본적으로 DataNucleus 시스템에 재 초기화를 알리는 방법이 있습니까? 가장 깨끗한 것은 유닛 테스트가 끝날 때 전화 할 수있는 shutdown() 종류의 메소드 일 수 있지만, 처음에 호출 할 수있는 reinitialize() 또는 reload()과 같은 것이 작동 할 수도 있습니다.

나는 PersistenceManagerFactory에서 close()을 호출 해 보았습니다. 그러나 충분한 것을 잊어 버릴 것 같지 않습니다.

답변

1

데이터 저장소에 연결 풀을 만드는 새 StoreManager가 만들어지기 때문에 새 PMF를 닫고 만들어야합니다. 이 로그는 데이터 스토어에 대한 연결이 시작되고 끝나는 곳과 연결 풀이 초기화되는 곳을 알려줍니다.

+0

'SchemaAwareStoreManager.delete'와'create'를 사용하도록 테스트 픽스처를 변경 했으므로 모든 것이 작동하는 것 같습니다. 불행히도, 나는 다른 것들을 동시에 변경했기 때문에,'PersistenceManagerFactory'를 올바르게 닫지 않았거나 다른 것을하고있는 것이 확실하지 않습니다. 그럼에도 불구하고'PersistenceManagerFactory'를 닫는 것은 효과가있다. 감사! – TOB

관련 문제