2012-03-26 56 views
1

我遇到一個奇怪的錯誤,我不知道如何解決它。我在Bootstrap.groovy中創建測試實體:Grails - 引導測試數據失敗

def init = { servletContext -> 


    if (Environment.current != Environment.TEST) { 
     servletContext.reloadId = new Date().getTime() // for reloading css 

     // create some insurance companies 
     InsuranceCompany ozp = InsuranceCompany.findOrSaveWhere(code: "207", acronym: "OZP", name: "Oborová zdravotní pojišťovna zaměstnanců bank, pojišťoven a stavebnictví") 
     InsuranceCompany vzp = InsuranceCompany.findOrSaveWhere(code: "111", acronym: "VZP", name: "Všeobecná zdravotní pojišťovna České republiky") 
     InsuranceCompany vozp = InsuranceCompany.findOrSaveWhere(code: "201", acronym: "VOZP", name: "Vojenská zdravotní pojišťovna České republiky") 
     Patient miladavrana = Patient.findOrSaveWhere(title: "JUDr", firstName: "Milada", lastName: "Vraná", RC: "0307080846", insuranceCompany: vozp,address: new Address(street: "5.Května", number: 568, city: "Korouhev", PSC: 16422)) 
     Patient jiristarecek = Patient.findOrSaveWhere(title: "", firstName: "Jiří", lastName: "Stareček", RC: "9457174705", insuranceCompany: cpzp,address: new Address(street: "Nad Schody", number: 180, city: "Velký Valtinov", PSC: 51521)) 
} 

實際上,引導文件比較長,它有近1000行測試數據。如果我評論2/3的這些數據,一切正常。當我把所有這些數據取消註釋和Grails的試圖創建它,它失敗:

# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000000262b036, pid=4152, tid=8016 
# 
# JRE version: 6.0_29-b11 
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.4-b02 mixed mode windows-amd64 compressed oops) 
# Problematic frame: 
# j BootStrap$_closure1.doCall(Ljava/lang/Object;)Ljava/lang/Object;+87 
# 
# If you would like to submit a bug report, please visit: 
# http://java.sun.com/webapps/bugreport/crash.jsp 
# 

--------------- T H R E A D --------------- 

Current thread (0x000000000d985800): JavaThread "pool-7-thread-1" [_thread_in_Java, id=8016, stack(0x000000000bcf0000,0x000000000bdf0000)] 

siginfo: ExceptionCode=0xc0000005, reading address 0x0000000138c797cf 

Registers: 
RAX=0x000000000bdedd78, RBX=0x000000000bdedd78, RCX=0x00000000d9d1e488, RDX=0x00000000d9d0abff 
RSP=0x000000000bdedd88, RBP=0x000000000bdeddb8, RSI=0x000000000d985800, RDI=0x000000000ee83ed0 
R8 =0x0000000000000004, R9 =0x00000000d4b4e890, R10=0x000000006dfc4f80, R11=0x000000000ee83f38 
R12=0x0000000000000000, R13=0x00000000d9d1d8ce, R14=0x000000000bdee5b0, R15=0x000000000d985800 
RIP=0x000000000262b036, EFLAGS=0x0000000000010287 

這是該記錄錯誤產生的部分。我使用Grails 2.0.1 & MySQL 5.5.21作爲數據庫。任何人都可以預先或有此錯誤?非常感謝你。

乾杯, Lojza

+0

我認爲這是一個Groovy問題。 Groovy不支持大* .groovy文件。 – jenk 2012-03-27 16:59:13

回答

0

試圖通過JAVAOPTS增加堆分配到你的JVM。

+0

我試圖增加它4倍,但仍然是相同的錯誤... – 2012-03-30 14:50:13

+1

你爲什麼不嘗試將bootstrap中的代碼分解成不同的類並從引導中調用它們。當你保存時,在不同的交易中進行。記得在保存時刷新。我知道JVM處理大文件,但這似乎是一個常規編譯器或休眠問題。 – chethan 2012-03-31 04:16:30

+2

謝謝!你絕對正確!我使用「withTransaction」,現在它像魔術一樣工作! – 2012-03-31 19:11:19