2013-02-23 51 views
3

在互聯網上,我經常會發現最近但相反的信息關於這個話題...,因此我想問一個關於最低要求的問題。Arquillian:我是否需要domain.xml和arquillian.xml以使用Derby DB進行最少的Glassfish Embedded測試?

我的目標是做簡單的EJB 3.1應用程序的一個非常簡單的集成測試:

  • 簡單的JPA 2.0功能與EclipseLink的
  • 的Arquillian使用JUnit測試
  • Maven的
  • 德比DB(在內存或文件中的./target),JTA持久性上下文。
  • 中的Arquillian

嵌入式Glassfish的所以我只想做一個簡單的JPA測試。我使用Glassfish在Arquillian中運行,但是在執行我的JPA時,我的應用程序總是無法處理Derby DB(告訴我沒有表等),但DDL文件看起來很理智。 我在我的persistence.xml中提供了模式名稱,用戶等,但沒有任何幫助。有時會發布一篇文章,告訴我如何在嵌入式Glassfish的最小domain.xml中進行更改以匹配我的persistence.xml或修改arquillian.xml。

我的問題是:對於這種最小的方法 - 我真的需要src/test/glassfish/domains/domain1/domain.xml或arquillian.xml嗎?

我很確定,前段時間我設法使用Embedded Glassfish,但使用Hibernate 4作爲JPA提供程序。我沒有訪問該項目anylonger,因此不能區分除了我definetely沒有添加domain.xml等。 像(other question here)這樣的帖子真的讓我困惑。

重要的是我沒有使用託管服務器,而是一個嵌入式服務器。

感謝和歡呼聲, 蒂莫

這裏是我的版本之一,請看我下面的評論。

<persistence-unit name="localiser-core" transaction-type="JTA"> 
    <jta-data-source>jdbc/__default</jta-data-source> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" /> 
     <property name="javax.persistence.jdbc.url" 
        value="jdbc:derby:memory:test;create=true" /> 
     <property name="javax.persistence.jdbc.user" value="" /> 
     <property name="javax.persistence.jdbc.password" value="" /> 

     <property name="eclipselink.target-database" value="Derby"/> 
     <property name="eclipselink.ddl-generation.output-mode" 
        value="database" /> 

     <property name="eclipselink.ddl-generation" value="create-tables" /> 
     <property name="eclipselink.application-location" value="target" /> 
     <property name="eclipselink.create-ddl-jdbc-file-name" value="create.sql"/> 
     <property name="eclipselink.drop-ddl-jdbc-file-name" value="drop.sql"/> 
     <property name="eclipselink.debug" value="ALL"/> 
     <property name="eclipselink.weaving" value="static"/> 
     <property name="eclipselink.logging.level" value="FINEST"/> 
     <property name="eclipselink.logging.level.sql" value="FINEST"/> 
     <property name="eclipselink.logging.level.cache" value="FINEST"/> 

    </properties> 

</persistence-unit> 
+0

這是我的持久性的許多適應之一。xml - 我嘗試了許多變體,包括文件,不同的數據庫名稱,用戶名和密碼名等。它似乎也可以針對數據庫發出SQL,但似乎沒有模式。 此外,ading /刪除JTA數據源名稱沒有幫助:( – 2013-02-23 02:21:40

回答

1

因爲你的連接網址是:JDBC:德比:內存:測試;創建= TRUE,你告訴德比是:連接到文件夾中的「測試」數據庫,相對於當前工作目錄無論Derby何時啓動,並且數據庫'test'在當前工作目錄中都不存在,請從頭開始創建它。

所以一種可能性是,您的應用程序每次都有不同的當前工作目錄,或者應用程序中的其他內容可能會在您每次運行應用程序時清除當前的工作目錄。

因此,Derby在該位置找不到以前的數據庫,因此它會創建一個新的數據庫。解決此

一種方法是爲數據庫指定更明確的定位,通過使用連接URL,例如:JDBC:德比:內存:/用戶/蒂莫/ TESTDB

然後創建數據庫一次,達前面,然後你的應用程序會在指定位置找到數據庫並使用它。

+0

你好布賴恩,非常感謝你的回覆! 事情是,我嘗試了千位的地點,也沒有「內存」和文件夾,如「/ tmp /」和「target」(使用Maven) 但是,它似乎創建了一個數據庫,但抱怨丟失的模式不會在數據庫中創建:( 當忽略模式名稱從用戶名派生它,但它仍然說,模式不存在或至少找不到相應的表。 – 2013-02-24 15:01:19

+0

順便說一下,我雖然「內存」是一個保留的名稱,表明數據庫將完全進入內存而不是HDD? – 2013-02-24 15:16:33

+0

糟糕!我完全忽略了你的URL的'記憶'方面!這意味着你的數據庫不會持續超出您的程序的一次運行。您的程序的每個實例都會創建一個全新的內存數據庫副本,並在運行結束時消失。 – 2013-02-25 19:36:27

相關問題