maven_针对新手的Java EE7和Maven项目-第7部分

maven

maven

从前面的部分恢复

第1 部分第2 部分第3 部分第4 部分第5部分第6部分

在上一篇文章(第6章)中,我们发现了如何使用Arquillian和Wildfly 8.1进行JPA2域模型的单元测试。在本文中,我们做出了一个简单的配置决定,我们使用了与Wildfly 8.1捆绑在一起的内部H2数据库配置的数据源(称为ExampleDS)。 但是真正的DBMS呢? 在这篇文章中,我们将扩展以前的工作,使用相同的原理,并

先决条件

您需要在本地安装PostgreSQL RBDMS ,我的示例基于在localhost上运行的服务器,数据库名称为papodb

添加更多依赖

最终,我们需要在样本父代(pom)中添加更多依赖项。 其中一些与Arquillian有关,尤其与ShrinkWrap Resolvers功能有关(稍后会详细介绍)。

因此,我们需要将其添加到父pom中。 xml如下:

<shrinkwrap.bom-version>2.1.1</shrinkwrap.bom-version>
 
  <!-- jbdc drivers -->
 <postgreslq.version>9.1-901-1.jdbc4</postgreslq.version>
...
   <!-- shrinkwrap BOM-->
<dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-bom</artifactId>
        <version>${shrinkwrap.bom-version}</version>
        <type>pom</type>
        <scope>import</scope>
  </dependency>
   <!-- shrinkwrap dependency chain-->
  <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-depchain</artifactId>
        <version>${shrinkwrap.bom-version}</version>
       <type>pom</type>
  </dependency>
 
  <!-- arquillian itself-->
   <dependency>
      <groupId>org.jboss.arquillian</groupId>
      <artifactId>arquillian-bom</artifactId>
       <version>${arquillian-version}</version>
      <scope>import</scope>
      <type>pom</type>
   </dependency>
 
<!-- the JDBC driver for postgresql -->
 <dependency>
     <groupId>postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>${postgreslq.version}</version>
 </dependency>

有关上述更改的一些注意事项:

  • 为了避免依赖项之间的任何潜在冲突,请确保在Arquillian BOM之上定义ShrinkWrap BOM。

现在在sample-services(pom.xml)上,托管的项目是简单测试,我们需要引用其中一些依赖项。

<dependency>
         <groupId>org.jboss.shrinkwrap.resolver</groupId>
         <artifactId>shrinkwrap-resolver-depchain</artifactId>
         <scope>test</scope>
         <type>pom</type>
     </dependency>
     
    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
    </dependency>

重组我们的测试代码

在前面的示例中,我们的测试很简单,我们仅使用了特定的测试配置。 由于我们将测试应用程序打包为jar,因此生成了单个test-persistence.xml文件,而没有web.xml文件。 现在,我们将测试存档升级为战争。 当涉及捆绑和部署企业应用程序时,JavaEE7中的战争包装已成为第一手公民。 与前面的示例的主要区别在于,我们希望保留以前的设置,这意味着在wildfly上使用内部H2进行测试,以及对真实的RDBMS服务器进行新的设置测试。 因此,我们需要维护2套配置文件,并利用Maven配置文件功能,根据我们的模式对它们进行相应的打包。 如果您不熟悉Maven,请确保查看配置文件的概念。

为每个配置文件添加单独的配置

因此,我们的测试资源(请注意这些资源位于src / test / resources下)如下所示。

CapturFiles_8

两种情况都有差异。 h2的test-persistence.xml指向ExampleDS数据源,其中postgre上的那个指向我们在web.xml中定义的新数据源! 请从下面的git链接中查看实际代码。

这就是我们在web.xml中定义数据源的方式

CapturFiles_10

以上注意事项

  • JNDI名称中的标准命名java:jboss / datasources / datasourceName
  • 一旦读取了web.xml文件的内容,应用服务器就会自动部署和配置新的数据源。

这是我们的persistence.xml

CapturFiles_9
以上注意事项

  • 确保2个JNDI条目在数据源定义和persistence.xml中都相同
  • 当然,用于postGresql的Hibernate方言是不同的
  • 高亮显示的行是Wildfly 8.1所需要的特殊设置,如果您要一口气部署它,则需要设置数据源,jdbc驱动程序和代码。 它提示应用程序服务器首先初始化和配置数据源,然后初始化EntityManager。 如果您已经部署/配置了数据源,则不需要此设置。

在pom中定义配置文件

在sample-services pom.xml中,添加以下部分。 这是我们的配置文件定义。

<profiles>
       <profile>
            <id>h2</id>
             <build>
               <testResources
                 <testResource>
                        <directory>/resources-h2</directory>
                            <includes>
                                <include>**/*</include>
                          </includes>
                        </testResource>
                   </testResources>
                </build>
       </profile>
       <profile>
           <id>postgre</id>
             <build>
               <testResources>
                  <testResource>
                      <directory>/resources-postgre</directory>
                        <includes>
                                <include>**/*</include>
                          </includes>
                    </testResource>
                </testResources>
             </build>
       </profile>
    </profiles>

根据激活的配置文件,我们指示Maven在特定的子文件夹下包括并使用xml文件。 因此,如果我们应用以下命令:

mvn clean test -Pdb2

然后,maven将在resource-h2文件夹下包含persistence.xml和web.xml,我们的测试将使用内部的H2 DB。 如果我们发出:

mvn clean test -Ppostgre

然后,我们的测试Web存档将与本地Postgresql服务器专用的数据源定义一起打包。

编写一个简单的测试

最终,我们新的JUnit测试与之前的测试没有太大不同。 这是指示一些关键点的屏幕截图。

CapturFiles_11
 

上面代码的一些注意事项:
  • Junit测试和基本注释与上一篇文章相同。
  • init()方法再次相同,我们只是创建并保留一个新的SimpleUser实体
  • 第一个主要区别是ShrinkWrap Api的使用,它利用了pom中的测试依赖项,并且我们可以将JBDC驱动程序定位为jar。 找到ShrinkWrap之后,请确保将其与其他资源和代码一起打包在我们的test.war中。
  • 尽管仅打包jdbc驱动程序是不够的,为了使其正常工作,我们需要在服务器中存在(配置)数据源。 我们希望这是自动的,这意味着我们不想在测试Wildfly服务器上进行任何预配置。 我们利用该功能在web.xml上定义数据源。 (在代码中将其打开)。

CapturFiles_12

  • 一旦扫描了web.xml,应用程序服务器就会选择该条目,并将在java:jboss / datasources / testpostgre名称下配置一个数据源。
  • 因此,我们将驱动程序,数据源定义捆绑在一起,我们有一个persistence.xml指向正确的数据源。 我们准备测试
  • 我们的测试方法与以前的测试方法相似。

我们已经修改了H2配置文件的资源,以便每次都打包相同的战争结构。 这意味着,如果我们使用-Ph2配置文件运行测试,则包含的web.xml为空,因为实际上我们不需要在此定义数据源,因为该数据源已经由Wildfly部署。 但是persistence.xml是不同的,因为在一种情况下,定义的方言特定于H2,而在另一种情况下,所定义的方言特定于Postgre。

您可以遵循相同的原理并添加新的资源子文件夹,为另一个RDBMS(例如MySQL)配置数据源,添加适当的代码以获取驱动程序并将其打包。

资源资源

翻译自: https://www.javacodegeeks.com/2014/07/java-ee7-and-maven-project-for-newbies-part-7.html

maven

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值