2013-08-01 58 views
1

我正在爲我的數據庫訪問編寫測試,並傾向於通過銷燬數據庫文件,然後添加數據並運行測試來啓動它們。 (這是爲了測試我的業務邏輯 - 我隱式地信任DataNucleus代碼。)如何在單個JVM運行中重新啓動DataNucleus?

我的測試不停地傳遞第一次運行,然後每次後續運行都失敗。這是沒有意義的,除了我傾向於在S​​BT命令提示符下運行我的測試,它在一個非常長壽命的JVM實例中運行一切。在某個時候,我添加了一個設置來爲測試分叉一個新的JVM,並且每次都開始工作。

我終於明白了(我認爲......)是DataNucleus爲JVM初始化了自己,並創建了緩存和環境視圖。當我刪除數據庫文件時,系統無法知道它需要重新初始化和重新創建所有內容,因爲JVM並沒有停下來,也沒有理由知道我已經改變了背後的東西。

顯然,分叉測試解決了這個問題,但我想知道是否有一個不太極端的解決方案。基本上,有沒有辦法讓DataNucleus系統重新初始化?最乾淨的東西大概是我在單元測試結束時可以調用的一種方法,但是我可以在開始時調用的reinitialize()reload()也可以。

我曾嘗試致電close()PersistenceManagerFactory,但這似乎並沒有忘記足夠的東西。

回答

1

關閉並創建一個新的PMF對我很有用,因爲它創建了一個新的StoreManager,它爲數據存儲創建連接池(無論它在哪裏)。日誌會告訴你連接到數據存儲的連接開始和結束以及連接池初始化的位置

+0

我改變了我的測試夾具以使用'SchemaAwareStoreManager.delete'和'create',現在一切似乎都奏效。不幸的是,我同時改變了一些其他的東西,所以目前還不清楚我是不是正確地關閉了「PersistenceManagerFactory」,或者我正在做其他事情。無論如何,關閉'PersistenceManagerFactory'確實有效。謝謝! – TOB

相關問題