2015-09-04 47 views
0

我對Java EE的世界非常陌生! 我已經構建了一個可以正常工作的企業應用程序。因爲我不希望IDE特定的功能和無嵌入式Application Server我與使用Maven測試Java EE應用程序

<groupId>org.glassfish.maven.plugin</groupId> 
<artifactId>maven-glassfish-plugin</artifactId> 
<version>2.1</version> 

始終將應用程序部署到我的測試Glassfish的4.1!

所有工作正常,直到我寫了我的第一次單元測試。 我有很多麻煩,因爲我需要單元測試一個EJB容器。因此,我添加了

<groupId>org.glassfish.embedded</groupId> 
<artifactId>maven-embedded-glassfish-plugin</artifactId> 
<version>4.0</version> 

到我的EJB模塊。 之後,我添加了一個與GlassFish resources.xml中的EJB模塊:

<resources> 
    <jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" 
          connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" 
          connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" 
          datasource-classname="org.postgresql.ds.PGSimpleDataSource" fail-all-connections="false" 
          idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" 
          lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" 
          max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="embeddedConnPool" 
          non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" 
          statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" 
          validation-table-name="DUAL" wrap-jdbc-objects="false"> 
     <property name="URL" value="jdbc:postgresql://localhost:5432/mes"/> 
     <property name="User" value="mes"/> 
     <property name="Password" value="mes"/> 
    </jdbc-connection-pool> 
    <jdbc-resource jndi-name="jdbc/mes2" pool-name="embeddedConnPool" enabled="true" /> 
</resources> 

(之前我用這是在DAS設置好的了一個JDBC資源)。 在我perstistence.xml我有:

<jta-data-source>java:app/jdbc/mes2</jta-data-source> 

在這種設置中成功地執行我的單元測試,但我不能部署到我的測試Glassfish的4.1應用程序。 如果我嘗試,然後按照發生異常:

[ERROR] remote failure: Error occurred during deployment: Exception while preparing the app : Invalid resource : { ResourceInfo : (jndiName=java:app/jdbc/mes2__pm), (applicationName=mes-ear) }. Please see server.log for more details. 
[ERROR] Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method : java.lang.RuntimeException: Invalid resource : { ResourceInfo : (jndiName=java:app/jdbc/mes2__pm), (applicationName=mes-ear) } 
[ERROR] Invalid resource : { ResourceInfo : (jndiName=java:app/jdbc/mes2__pm), (applicationName=mes-ear) } 

我不知道該怎麼辦。我的單元測試是成功的,部署不起作用,或者我的單元測試拋出異常但部署工程。 我希望這是我的配置中的一個簡單的錯誤。

有沒有人建議該怎麼辦?

如果我改變我的persistence.xml到:

<jta-data-source>jdbc/mes</jta-data-source> 

和我與GlassFish resource.xml到:

<jdbc-resource jndi-name="jdbc/mes" pool-name="embeddedConnPool" enabled="true" /> 

的話,我可以部署我的應用程序,但單元測試崩潰: SCHWERWIEGEND :資源無效:jdbc/mes__pm

我不知道該怎麼辦。我的單元測試是成功的,部署不起作用,或者我的單元測試拋出異常但部署工程。 我希望這是我的配置中的一個簡單的錯誤。

有沒有人建議該怎麼辦? (我希望有人理解我都給巴)

問候, 祚

+0

已經嘗試過。工作正常。 – Jomikel

回答

2

也許的Arquillian測試框架將有助於:http://arquillian.org/

+0

它看起來不錯,但我希望這個問題可以解決沒有更多的框架....? – Jomikel

0

如果要實現單元測試是不是強制性的EJB容器來部署。您可以使用DAO層和內存數據庫來逐個執行和測試所有方法,並測試服務層(通常是EJB),您可以使用像Mockito這樣的框架,而不受JUnit支持的任何問題。我讀過你之前的評論,你不想添加更多的框架,但我認爲這是很難避免的。我希望它有幫助。

相關問題