针对新手的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,一经查实,立即删除!

相关文章

【转】IP Socket知识

虽然不是每个人都要做网络工程师&#xff0c;但开发人员的日常工作中&#xff0c;没有哪个不曾接触IP&#xff0c; 我碰到过好多新手在IP上犯迷糊&#xff0c;总结一下。 IP地址的记法&#xff1a; IP地址由四个字节构成&#xff0c;为了方便阅读和书写&#xff0c;每个字节用0…

具有Akka反应流的反应队列

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

灰盒测试—提高篇

灰盒测试是要运用一些开发知识的&#xff0c;大家都认为要去学习开发知识。网上很多论坛也有人说做测试之前&#xff0c;最好要有一、二年的开发经验就比较好。做为黑盒测试人员&#xff0c;如果会当然好&#xff0c;但是大部分黑盒测试人员是没有开发经验&#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不支持…

CSS选择器总结

选择器   优先级 实例ID选择器   100类选择器    10伪类选择器     10 :link :visited :focus :hover :actived :lang  UI元素状态伪类          E:enabled{}匹配所有用户界面&#xff08…

C# 实体转为json字符串

C# 实体转为json字符串 Catalog cata new Catalog(); cata.C_platformid 0; cata.C_isnav 0; cata.C_isvalid 1; string strJson JsonConvert.SerializeObject(cata); 转载于:https://www.cnblogs.com/woniucode/p/10684214.html

Gradle入门:简介

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

JS中的间歇(周期)调用setInterval()与超时(延迟)调用setTimeout()相关总结

超时调用需要使用window.setTimeout(code,millisec)方法 它接受两个参数&#xff1a;要执行的代码和以毫秒表示的时间&#xff08;即在执行代码前需要等待多少毫秒&#xff09;。其中第一个参数可以是一个包含JS代码的字符串&#xff08;就和在eval()函数中使用的字符串一样&a…

损失函数_分类

通常机器学习每一个算法中都会有一个目标函数&#xff0c;算法的求解过程是通过对这个目标函数优化的过程。 在分类或者回归问题中&#xff0c;通常使用损失函数&#xff08;代价函数&#xff09;作为其目标函数。 损失函数用来评价模型的预测值和真实值不一样的程度&#xff0…

首页回顾功能

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

多表关联更新字段

update jdjc_cy gset g.ypmc(select w.cymc from jdjc_spjdcy w where w.cydzjg.zj) where g.cydh020-JLSP14001转载于:https://www.cnblogs.com/zhuyeshen/p/10685220.html

使对易失性字段的操作原子化

总览 易失字段的预期行为是&#xff0c;它们在多线程应用程序中的行为应与在单线程应用程序中的行为相同。 禁止它们表现相同的方式&#xff0c;但不能保证它们表现相同的方式。 Java 5.0中的解决方案是使用AtomicXxxx类&#xff0c;但是这些类在内存&#xff08;它们添加标头…

浏览器内核总结

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

SDHelper module加密系统解密

电脑上运行了SDHelper module&#xff0c;文档修改就会被加密&#xff0c;无法在别的电脑打开&#xff0c;工作中无意中发现的方法可以避开加密 1&#xff1a;可以通过打开文档并登录你的office&#xff0c;生成分享链接出去可以避免加密 2&#xff1a;本地起一个vue的项目&…

nehe教程混合这一节需要注意的两个地方

//glDepthFunc(GL_LESS); //glEnable(GL_DEPTH_TEST);///关掉深度测试,否则没效果,原因是后画的物体通不过测试,当然也就不能混合了 glDepthRange(0.0, 1.0); glClearDepth(1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(0.0, 0.0, 0.0, …

Kubernetes CRD开发模式及源码实现深入剖析-Kubernetes商业环境实战

专注于大数据及容器云核心技术解密&#xff0c;可提供全栈的大数据云原生平台咨询方案&#xff0c;请持续关注本套博客。如有任何学术交流&#xff0c;可随时联系。留言请关注《数据云技术社区》公众号。 1 CRD资源扩展 CRD 即CustomResourceDefinition&#xff0c;是 kubernet…

禁止浏览器缓存

近期在改页面的时候看到了页面中有response.setHeader("Pragma","No-cache"); 这样的语句&#xff0c;不知道是做什么的&#xff0c;经查得知原来是禁止浏览器缓存的&#xff0c;现把Html&#xff0c;Asp&#xff0c;Php&#xff0c;Jsp4种语言禁止浏览器缓…

Spring @Transactional实际如何工作?

在本文中&#xff0c;我们将深入探讨Spring事务管理。 我们将讨论Transactional在Transactional如何真正工作。 其他即将发布的帖子将包括&#xff1a; 如何使用传播和隔离等功能 主要陷阱是什么以及如何避免它们 JPA和事务管理 重要的是要注意&#xff0c;JPA本身不提供任何…

python3-开发进阶-RESTful 软件架构风格

一. 什么是RESTful REST与技术无关&#xff0c;代表的是一种软件架构风格&#xff0c;REST是Representational State Transfer的简称&#xff0c;中文翻译为“表征状态转移”REST从资源的角度类审视整个网络&#xff0c;它将分布在网络中某个节点的资源通过URL进行标识&#x…

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

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