2010-09-15 21 views
0

我正在使用NetBeans和GlassFish 3.0.1來創建EJB3應用程序。我已經寫了幾個單元測試,它們通過JUnit運行並使用嵌入式GlassFish。每當我在開發計算機上運行這些測試時(所以從NetBeans內部),這都很好。Hudson + JUnit +嵌入GlassFish,如何提供域配置?

現在我想讓哈德森做這些測試。目前,它與查找失敗上的資源(數據源到JPA持久性單元在這種情況下)不:

[junit] SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method 
[junit] java.lang.RuntimeException: javax.naming.NamingException: Lookup failed for 'mvs_devel' in SerialContext 

摸索並試圖瞭解此之後,我認爲這是關係到嵌入式GlassFish未配置資源。換句話說,它缺少一個domain.xml文件。對?

兩個問題:

  1. 它爲什麼對我的dev的盒子NetBeans的工作? NetBeans在後臺做什麼神奇的事情?
  2. 我該如何提供文件? Hudson-box上的嵌入GlassFish在哪裏期待它?

Hudson使用的是相同的Ant構建腳本(由NetBeans創建)。

我讀過關於instanceRoot和EmbeddedFileSystemBuilder的this post,但我對此不夠了解。這對每個TestCase都是需要的(Emb。GF爲每個待測bean開始/停止)?這是EJBContainer.createEJBContainer()的一部分嗎?同樣,爲什麼在NetBeans上運行測試時沒有必要這麼做?

更新 繼彼得的意見,我可以確認:在代碼的新檢出的副本運行ant的時候,用如Hudson配置相同的屬性,測試得到執行!

回答

1

10-1這是一個類路徑問題,因爲IDE的傾向於交換路徑進出,具體取決於您是否正常運行或單元測試。

嘗試在SCM中從剛剛檢出的版本的命令行上運行測試。有可能你會有同樣的錯誤。在本地機器上調試比在遠程機器上調試要簡單得多。

當它在命令行(在一個單獨的目錄中)可靠地構建時,現在是時候轉移到哈德森了。

+0

感謝您的建議!當我運行'螞蟻測試'時,測試實際上工作並得到執行。任何其他想法? – Hank 2010-09-15 14:38:35

+2

@Hank:你是否從命令行在Hudson服務器上運行它?如果是,它可能是一個權限問題。用哈德森正在運行的相同憑證運行你的測試? – 2010-09-15 14:46:49

+0

@第二彼得:你達人!感謝隊友,就是這樣。 $ {GLASSFISH_HOME}/glassfish/domains/domain1/config對於哈德森用戶來說是不可讀的。現在一切都好! – Hank 2010-09-15 17:22:50