2015-09-04 50 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支持的任何问题。我读过你之前的评论,你不想添加更多的框架,但我认为这是很难避免的。我希望它有帮助。

相关问题