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

从前面的部分恢复

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

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

  • 在我们的本地主机上对正在运行的PostgreSQL进行测试
  • 使用Arquillian Offer的ShrinkWrap APi的一些非常好的功能。

先决条件

您需要在本地安装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指向正确的datasourc。 我们准备测试
  • 我们的测试方法与之前的测试方法相似。

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

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

  • 您可以在此bitbucket repo-tag上获得此帖子的代码 。

资源资源

  • Shrinkwrap解析器API页面 (此强大API的许多漂亮示例)
  • 定义Wildfly 8.1的数据源

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

具有Akka反应流的反应队列

反应性流是最近宣布的一项计划&#xff0c;旨在在JVM上为具有内置背压的异步流处理创建标准。 该工作组由Typesafe&#xff0c;Red Hat&#xff0c;Oracle&#xff0c;Netflix等公司组成。 早期的实验性实现之一是基于Akka的 。 预览版0.3包括演员生产者和消费者&#xff0c;这…

Django框架下报的版本问题

报错环境 python3.6.5&#xff0c;django2.2&#xff0c;PyMySQL0.9.3 …… django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3. 解决方法&#xff1a; Django连接MySQL时默认使用MySQLdb驱动&#xff0c;但MySQLdb不支持…

Gradle入门:简介

Gradle是一种构建工具&#xff0c;可以使用基于Groovy编程语言的内部DSL替换基于XML的构建脚本。 最近它吸引了很多关注&#xff0c;这就是为什么我决定仔细研究一下。 这篇博客文章是我的Gradle教程的第一部分&#xff0c;它有两个目标&#xff1a; 帮助我们安装Gradle 描…

首页回顾功能

公司要弄一个首页回顾的功能&#xff0c;可以查看以往某个时间的首页。程序每天自动在上午和下午分别抓取一个页面&#xff0c;生成地址为http://xxx.com/review/channel20090715am.html 的形式。 这个功能用到了jQuery UI 的 datepicker日历插件&#xff0c;但是主要的还是通过…

浏览器内核总结

一般来讲&#xff0c;浏览器分为外壳部分和渲染部分。外壳部分就是用户看得见摸得到的外观和操作界面;而渲染部分则包括了浏览器内核和JS引擎&#xff0c;其中JS引擎主要负责执行javascript语言实现网页上的动作&#xff0c;而内核则负责渲染网页&#xff0c;把数据变成用户可以…

mysql卸载重装总是卡在starting server这一选项

因为自己不小心把msyql给下载了&#xff0c;重装了一个5.7版本的可是在安装时卡在starting server这一部分&#xff0c;运行不下去。重写卸载重装仍然不成功&#xff0c;还是卡在starting server.无法继续下面的安装&#xff0c;查看日志也没有报错信息。 问题分析&#xff1a;…

箭头函数与普通函数的区别

箭头函数&#xff1a; let fun () > {console.log(lalalala); } 普通函数&#xff1a; function fun() {console.log(lalla); } 箭头函数相当于匿名函数&#xff0c;并且简化了函数定义。箭头函数有两种格式&#xff0c;一种只包含一个表达式&#xff0c;连{ ... }和return…

前端基础-HTML标记语言

阅读目录 一、 HTML标签与文档结构二、 HTML标签详细语法与注意点三、 HTML中标签分类四、 HTML注释 一、 HTML标签与文档结构 HTML作为一门标记语言&#xff0c;是通过各种各样的标签来标记网页内容的。我们学习HTML主要就是学习的HTML标签。 那什么是标签呢&#xff1f; #…

带有Gradle的Docker容器分为4个步骤

您是否需要通过Java Web应用程序创建Docker映像&#xff1f; 您在使用Gradle吗&#xff1f; 如果是这样&#xff0c;那么您距Docker nivana仅4步之遥。 对于此示例&#xff0c;我将使用一个简单的Spring Boot应用程序。 您可以在我的名为galoshe的Github存储库中找到所有源代码…

第七周

这个作业属于哪个课程C语言程序设计 &#xff08;第三版&#xff09;这个作业要求在哪里2019春季第七周作业我的课程目标学习指针的运用这个作业在哪个具体方面帮助我实现目标这个作业让我知道了指针实用性参考文献无一、2019春第七周作业&#xff08;基础题&#xff09; 7-2 自…

Java EE 8 –为更多设备提供更多应用程序

如果我不喜欢夏天的一件事&#xff0c;那就是事实是没有太多要分享或谈论的新闻。 谁决定将Java Day Tokyo置于这一年的无聊时间里&#xff0c;谁干得不错&#xff0c;就给我一个机会撰写有关新的和即将到来的Java EE 8规范的博客文章&#xff0c;其中包含了更多的思想和建议。…

Gradle入门:依赖管理

即使不是没有可能&#xff0c;创建没有任何外部依赖关系的现实应用程序也是一项挑战。 这就是为什么依赖性管理是每个软件项目中至关重要的部分的原因。 这篇博客文章描述了我们如何使用Gradle管理项目的依赖关系。 我们将学习配置已使用的存储库和所需的依赖项。 我们还将通过…

HTML5常用标签及特殊字符表

*http://html5doctor.com/nav*http://html5doctor.com/article*http://html5doctor.com/section*http://html5doctor.com/asidehttp://html5doctor.com/divhttp://html5doctor.com/figurehttp://html5doctor.com/outlinehttp://html5doctor.com/semantics p 和 span 的理解 p标…

【转载】使用Imaging组件加载GIF动画

Mobil手机加载GIF动态图像的方法有两种&#xff0c;一个就是使用GIF89a标准算法&#xff0c;另一个就是使用SDK自带的Imaging组件&#xff0c;这两种方法是很典型的手机图像处理技术的实践。使用Imaging组件加载GIF比使用标准算法处理高效的多&#xff0c;特别是在处理真彩GIF动…

【处理手记】Configuration system failed to initialize异常的另类原因

有个c#程序在某台电脑上&#xff0c;执行某个操作时&#xff0c;总是会报如图错误&#xff1a; 度娘一番&#xff0c;发现市面上常见的原因是配置文件中的特定节点的位置不对&#xff0c;或者配置文件损坏等等&#xff0c;而这个程序根本没有使用内置的配置文件方案&#xff0c…

学习《Building Applications with FME Objects》 之四 从数据集读取要素

FMEOReader可以访问任何支持格式的数据。 FMEOReader返回两类要素&#xff1a;schema&#xff08;模式&#xff09;要素和数据要素&#xff0c;模式要素用于描述数据集模型。每种支持的格式都有一个模式&#xff0c;一个模式要素是一类要素的数据模型&#xff0c;模式要素描述属…

使用Zapier将应用程序与Neo4j集成

最近&#xff0c;我被带往Zapier &#xff0c;以便在系统之间完成一些轻量级的集成&#xff0c;以快速地进行概念验证。 最初是持怀疑态度的&#xff0c;我发现它确实可以节省时间&#xff0c;并将您从未集成过的系统所有部分捆绑在一起。 而且&#xff0c;这是人们集成他们使…

[silverlight基础]仿文字连接跑马灯效果-高手绕道

运行效果如下:分析示意图&#xff1a;代码:1<Canvas x:Name"a"Background"AliceBlue"MouseEnter"a_MouseEnter"MouseLeave"a_MouseLeave"Cursor"Hand">2<Canvas.Clip>3<RectangleGeometry RadiusX"0&qu…

Hibernate脏检查的剖析

介绍 持久性上下文使实体状态转换进入队列&#xff0c;该实体状态转换在刷新后转换为数据库语句。 对于托管实体&#xff0c;Hibernate可以代表我们自动检测传入的更改并安排SQL UPDATE。 这种机制称为自动脏检查 。 默认的脏检查策略 默认情况下&#xff0c;Hibernate检查所有…

软件工程第二次作业-VSTS单元测试

一、选择开发工具 开发工具选择 Visual studio 2017 社区版&#xff0c;开发语言为C 由于之前已经安装完毕&#xff0c;所以不上传安装过程&#xff0c;主界面如下&#xff1a; 二、练习自动单元测试 使用的测试工具是VSTS&#xff0c;具体步骤如下&#xff1a; 1.编写一个判断…