使用Arquillian(远程)测试OpenLiberty

听到许多好评后,我想我会尝试一下Open Liberty 。

在这篇文章中,我将讨论以下内容:

  • 开放自由的设置
  • 设置JDBC连接
  • 设置Arquillian
  • 测试REST端点

安装开放自由

在撰写本文时,我正在使用Open Liberty 18.0.0.1,并且正在使用Java SE 1.8.0_172(PS Keen继续使用Java 9和Java 10,但我认为最好等待LTS Java 11)。

安装非常容易。 假设我们要创建一个正在运行的服务器名称test

首先,解压缩您的Open Liberty下载文件。 它将创建目录结构wlp

导航到bin目录并运行以下命令:

./server create test

现在,服务器名称test已创建。 开始:

./server start test

参数test是服务器的名称。

导航到http://localhost:9080/test以查看上下文根。

停止,

./server stop test

配置server.xml

启动test服务器后,将在/usr/servers/test下创建一个目录,该目录内有一个名为server.xml文件。 让我们来看看。

<?xml version="1.0" encoding="UTF-8"?>
<server description="new server"><!-- Enable features --><featureManager><feature>jsp-2.3</feature></featureManager><!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" --><httpEndpoint id="defaultHttpEndpoint"httpPort="9080"httpsPort="9443" /><!-- Automatically expand WAR files and EAR files --><applicationManager autoExpand="true"/>
</server>

在本文中,我们使用Java EE 7 Web Profile来实现这一点,这样做非常简单(甚至不必重新启动服务器)。 只需更改featureManager

<?xml version="1.0" encoding="UTF-8"?>
<server description="new server"><!-- Enable features --><featureManager><feature>webProfile-7.0</feature></featureManager><!-- the rest of the configuration omitted -->

您可以通过查看console.log来检查正在动态加载的功能。

配置JDBC数据源

在server.xml中配置数据源

对于本练习,我正在使用MySQL 8.0。 设置MySQL及其配置不在本文的讨论范围之内。

假设我们已经创建了一个新数据库,也称为test

要设置您的数据源,请对server.xml进行以下修改,然后重新启动(或者不,对此不太确定,但是重新启动没有任何危害)。

评论交错。

<?xml version="3.0" encoding="UTF-8"?>
<server description="new server"><!-- Enable features --><featureManager><feature>webProfile-7.0</feature></featureManager><!-- Declare the jar files for MySQL access through JDBC. --><dataSource id="testDS" jndiName="jdbc/testDS"><jdbcDriver libraryRef="MySQLLib"/><properties databaseName="test"serverName="localhost" portNumber="3306"user="root" password="P4sswordGoesH3r3"/></dataSource><library id="MySQLLib"><file name="/home/dwuysan/dev/appservers/wlp/usr/shared/resources/mysql/mysql-connector-java-8.0.11.jar"/></library><!-- Automatically expand WAR files and EAR files --><applicationManager autoExpand="true"/>
</server>

persistence.xml

OpenLiberty附带有作为JPA Provider捆绑的EclipseLink。 在此示例中,我没有配置任何EclipseLink的属性。

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"version="2.1"><persistence-unit name="testPU"><jta-data-source>jdbc/testDS</jta-data-source>        <properties></properties></persistence-unit>
</persistence>

然后,您可以通过以下方式在Java EE应用程序中调用它:

@Stateless
@LocalBean
public class LogService {@PersistenceContextprivate EntityManager em;public Collection<Log> getLogs() {return this.em.createNamedQuery(Log.FIND_ALL, Log.class).getResultList();}
}

设置arquillian

在本文中,我们将针对正在运行的OpenLiberty服务器实施Arquillian远程测试。

首先,将arquillian添加到pom.xml

配置pom.xml

这是已修改的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>id.co.lucyana</groupId><artifactId>test</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>test</name><properties><endorsed.dir>${project.build.directory}/endorsed</endorsed.dir><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><dependency><groupId>org.jboss.arquillian</groupId><artifactId>arquillian-bom</artifactId><version>1.4.0.Final</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement><dependencies>        <dependency><groupId>org.jboss.arquillian.graphene</groupId><artifactId>graphene-webdriver</artifactId><version>2.3.2</version><type>pom</type><scope>test</scope></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><scope>test</scope><version>3.12.0</version></dependency><dependency><groupId>org.jboss.arquillian.junit</groupId><artifactId>arquillian-junit-container</artifactId><scope>test</scope></dependency>        <dependency><!-- Arquillian WebSphere Liberty Profile support --><groupId>io.openliberty.arquillian</groupId><artifactId>arquillian-liberty-remote</artifactId><version>1.0.0</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>javax</groupId><artifactId>javaee-web-api</artifactId><version>7.0</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.7.0</version><configuration><source>1.8</source><target>1.8</target><compilerArguments><endorseddirs>${endorsed.dir}</endorseddirs></compilerArguments></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.2.1</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.1.0</version><executions><execution><phase>validate</phase><goals><goal>copy</goal></goals><configuration><outputDirectory>${endorsed.dir}</outputDirectory><silent>true</silent><artifactItems><artifactItem><groupId>javax</groupId><artifactId>javaee-endorsed-api</artifactId><version>7.0</version><type>jar</type></artifactItem></artifactItems></configuration></execution></executions></plugin></plugins></build>
</project>

修改server.xml

这里提供的文档是不言自明的。 请查阅此文档以获取有关如何启用远程测试的更多最新信息。

<?xml version="1.0" encoding="UTF-8"?>
<server description="new server"><!-- Enable features --><featureManager><feature>webProfile-7.0</feature><feature>restConnector-2.0</feature></featureManager><!-- Declare the jar files for MySQL access through JDBC. --><dataSource id="testDS" jndiName="jdbc/testDS"><jdbcDriver libraryRef="MySQLLib"/><properties databaseName="test" serverName="localhost" portNumber="3306" user="root" password="P4sswordGoesH3r3"/></dataSource><library id="MySQLLib"><file name="/home/dwuysan/dev/appservers/wlp/usr/shared/resources/mysql/mysql-connector-java-8.0.11.jar"/></library><httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint" host="*" /><!-- userName and password should also be set in arquillian.xml to these values --><quickStartSecurity userName="admin" userPassword="admin" /><!-- Enable the keystore --><keyStore id="defaultKeyStore" password="password" /><applicationMonitor updateTrigger="mbean" /><logging consoleLogLevel="INFO" /><!-- This section is needed to allow upload of files to the dropins directory, the remote container adapter relies on this configuration --><remoteFileAccess><writeDir>${server.config.dir}/dropins</writeDir></remoteFileAccess><!-- Automatically expand WAR files and EAR files --><applicationManager autoExpand="true"/>
</server>

信任服务器(即证书)

您还需要让客户端信任这些密钥,否则您将看到SSL证书信任错误,并且需要授予容器适配器写入dropins目录的权限” (Liberty-Arquillian 2018)

完成上述所有必要的更改后,(并重新启动服务器),请注意,在<location of your OpenLiberty server>/usr/servers/test/resources/security下创建了一个新目录,其中test为名称我们最初创建的服务器的数量。

请注意,正在创建两个文件, keys.jksltpa.keys 。 现在,我们对keys.jks感兴趣。

为了能够从Netbeans(Maven)运行测试,JDK必须信任正在运行的OpenLiberty。

检查证书

keytool -list -v -keystore key.jks
Enter keystore password:

此处的password基本上是我们在server.xml中创建的password ,尤其是以下行:

<!-- Enable the keystore -->
<keyStore id="defaultKeyStore" password="password" />

因此,输入密码,输出应如下所示:

*****************  WARNING WARNING WARNING  *****************
* The integrity of the information stored in your keystore  *
* has NOT been verified!  In order to verify its integrity, *
* you must provide your keystore password.                  *
*****************  WARNING WARNING WARNING  *****************Keystore type: jks
Keystore provider: SUNYour keystore contains 1 entryAlias name: default
Creation date: May 26, 2018
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=localhost, OU=test, O=ibm, C=us
Issuer: CN=localhost, OU=test, O=ibm, C=us
Serial number: 2a6c5b27
Valid from: Sat May 26 12:24:30 WITA 2018 until: Sun May 26 12:24:30 WITA 2019
Certificate fingerprints:MD5:  63:92:B2:4A:25:E3:BB:3B:96:37:11:C1:A7:25:38:B5SHA1: B6:38:95:88:FC:50:EC:A0:8E:41:4E:DE:B5:D4:8B:85:2E:61:A2:5FSHA256: 9C:7B:6A:FA:46:8C:50:F2:7D:7B:C4:24:4B:15:78:5A:34:25:C8:43:D1:AB:4D:EE:C7:00:4C:AF:30:F5:5C:92
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3Extensions: #1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 88 F2 C2 32 73 73 B6 66   8F FA 42 85 1F 43 A5 AF  ...2ss.f..B..C..
0010: 84 33 62 D5                                        .3b.
]
]*******************************************
*******************************************

接下来,导出证书

现在,我们需要创建一个.cer 。 使用以下命令:

keytool -export -alias default -file testwlp.crt -keystore key.jks
Enter keystore password:

基本上,我们将alias证书导出到名为testwlp.crt的文件中。 现在,应该创建一个名为testwlp.crt的文件。

最后,通过将证书导入JDK cacert来信任该证书

keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -alias testwlp -import -file testwlp.crt

PS请注意,正如许多专家(通过Twitter)指出的那样,显然有很多“信任”服务器的方法。 我相信有更好的方法,并且我尽可能不接触任何JDK的文件。

创建arquillian.xml

现在完成了所有这些管道工作,让我们相应地添加arquillian.xml

<?xml version="1.0" encoding="UTF-8"?>
<arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"><engine><property name="deploymentExportPath">target</property></engine><container qualifier="liberty-remote" default="true"><configuration><property name="hostName">localhost</property><property name="serverName">test</property><!-- check the 'quickStartSecurity' on 'server.xml' --><property name="username">admin</property><property name="password">admin</property><!-- check the 'server.xml' --><property name="httpPort">9080</property><property name="httpsPort">9443</property> </configuration></container>    <extension qualifier="webdriver"><!--<property name="browser">firefox</property>--><property name="remoteReusable">false</property></extension>
</arquillian>

编写REST测试用例

完成所有这些设置后,您现在可以编写Arquillian Test用例。 以下是针对JAX-RS端点的测试用例的示例(请原谅测试用例的简单性,这一点是为了说明我们如何使用Arquillian-remote针对OpenLiberty进行测试)

package id.co.lucyana.test.resource;import id.co.lucyana.test.entity.Log;
import id.co.lucyana.test.services.LogService;
import id.co.lucyana.test.util.ApplicationConfig;
import java.net.URL;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.drone.api.annotation.Drone;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver;@RunWith(Arquillian.class)
public class LogResourceTest {@Droneprivate WebDriver webDriver;@Deploymentpublic static JavaArchive createTestArchive() {return ShrinkWrap.create(JavaArchive.class).addClass(Log.class).addClass(LogResource.class).addClass(LogService.class).addClass(ApplicationConfig.class).addAsManifestResource("test-persistence.xml",ArchivePaths.create("persistence.xml"));}@Test@RunAsClientpublic void testLogResource(@ArquillianResource URL url) {        this.webDriver.get(url.toString() + "resources/log");String pageSource = this.webDriver.getPageSource();System.out.println("RESULT: " + pageSource);Assert.assertTrue(true);}
}

参考文献

DigiCert,2018, '如何将受信任的根安装到Java cacerts Keystore中' ,DigiCert,于2018年6月20日访问

Liberty-Arquillian,2018年, ``Arquillian Liberty远程文档'' ,GitHub。 Inc,于2018年6月20日访问

SSLShopper,2008年, “最常见的Java Keytool密钥库命令” ,SSLShopper,于2018年6月20日访问

翻译自: https://www.javacodegeeks.com/2018/06/testing-openliberty-arquillian-remote.html

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

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

相关文章

Windows编程初步(三)【说明:有敏感字眼已全删,不知道为啥还审核不通过】

第三节 设计输出及利用在线帮助 在Windows中&#xff0c;消息ON_PAINT是专门用来处理输出的。基本所有的输出代码应放在这里。 。其输出方式不再限于从上往下&#xff0c;而是全屏可控&#xff0c;因此每个输出都需要告知系统输出位置。典型的文字输出代码是TextOut函数。 将…

第十二届蓝桥杯省赛A组砝码称重Java解题思路及代码

【问题描述】 你有一架天平和 N个砝码&#xff0c;这N个砝码重量依次是W1, W2, …, Wn。 请你计算一共可以称出多少种不同的重量&#xff1f;注意砝码可以放在天平两边。 【输入格式】 输入的第一行包含一个整数N。 第二行包含N个整数: W1, W2, W3, … Wn。 【输出格式】 输出…

【定时同步系列1】定时同步之MARTIN OERDER算法原理与公式推导

关注公号【逆向通信猿】,口令:OM算法 信号模型 接收到的信号(PAM)或等效的低通信号(QAM,PSK)可以写为 r ( t ) = ∑ n = − ∞ ∞ a n g T (

408考研数据结构复习-时间复杂度与空间复杂度-附统考真题

文章目录一、时间复杂度二、空间复杂度三、相关题目一、时间复杂度 一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n)&#xff0c;它是该算法问题规模n的函数&#xff0c;时间复杂度主要分析T(n)的数量级。算法中基本运算&#xff08;最深…

解调去载波后均衡信道与实际信道的关系

关注公号【逆向通信猿】更精彩!!! 通常,信号经过调制后发送,会经过信道作用,示意图可以表示为 其中 x ( t ) x(t) x(t)为基带信号, e

第十二届蓝桥杯省赛A组试题:左儿子右兄弟Java

【问题描述】 对于一棵多叉树&#xff0c;我们可以通过 “左孩子右兄弟” 表示法&#xff0c;将其转化成一棵二叉树。如果我们认为每个结点的子结点是无序的&#xff0c;那么得到的二叉树可能不唯一。换句话说&#xff0c;每个结点可以选任意子结点作为左孩子&#xff0c;并按任…

activiti脚本任务_Activiti中的高级脚本:自定义配置注入

activiti脚本任务脚本任务可能是Activiti代码库中“最古老的”类之一&#xff0c;但是我认为它仍然未被许多人使用。 &#xff08;感知到的&#xff09;缺点当然是性能&#xff08;解释还是编译&#xff09;&#xff0c;并且从IDE角度来看支持较少。 但是&#xff0c;好处&…

【锁相环系列3】QPSK+基带+Costas锁相环载波同步(重点环路滤波器参数设置和迭代核心代码详解)

引言 假设在QPSK信号解调中,完成匹配滤波、定时抽样后的星座如下所示 而画出基带信号部分点的星座图如下所示 由以上两幅图可以看出,基带信号中还存在微小的频偏,导致星座图旋转,而这种微小的频偏很难通过FFT估计出来,由此想到了用锁相环解决,锁相环锁定后的星座如下 …

第十二届蓝桥杯Java省赛A组试题:异或数列

【题目描述】 初始时&#xff0c;Alice和Bob分别有一个整数a和b&#xff0c;有一个给定的长度为n的数列。a和b的初始值均为0。Alice和Bob轮流操作&#xff0c;Alice先手&#xff0c;每步可以从两个选项中选一种&#xff1a; 选项1&#xff1a;从数列中选一个X;给Alice的数异或上…

自动化学科前沿讲座分享,作业,自动化与人工智能

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 现在我们都在讲智能制造&#xff0c;而实现智能制造&#xff0c;需要有传统制造的部…

线性移位寄存器序列(m序列)之MATLAB实现

移位寄存器的结构 nnn级线性移位寄存器的结构如下图 当生成多项式g(x)g(x)g(x)为本原多项式时&#xff0c;产生的序列为m序列。例如 g(x)x5x21g(x)x^5x^21g(x)x5x21的本原多项式&#xff0c;初态为10000的5级m序列&#xff0c;其周期为25−1312^5-13125−131&#xff0c;结构如…

江南大学物联网工程学院数据库课程实验一作业1实验报告

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 一、开发环境 DBMS&#xff1a;Microsoft SQL Server 2019 (…

BCH码和m序列参数估计(梅西迭代算法求多项式的MATLAB实现)

关注公众号【逆向通信猿】试读更多内容!!! 伯利坎普迭代算法解决了BCH码译码中求错位多项式 σ ( x ) \sigma (x) σ(x)的问题,即用迭代算法求解方程组,极大地加快了译码速度。求最短线性移存器的迭代算法是梅西(J.Massey)于1969年提出的,而且指出了与BCH码迭代译码算…

scala和java像不像_关于Java和Scala同步的五件事你不知道

scala和java像不像实际上&#xff0c;所有服务器应用程序都需要在多个线程之间进行某种同步。 大多数同步工作是在框架级别为我们完成的&#xff0c;例如通过我们的Web服务器&#xff0c;数据库客户端或消息传递框架。 Java和Scala提供了许多组件来编写可靠的多线程应用程序。 …

江南大学物联网工程学院数据库课程实验二作业2实验报告

一、开发环境 DBMS: Microsoft SQL Server 2019 (64- bit) 可视化管理工具: Microsoft SQL Server Management Studio- 18.10 二、代码、注释及测试 第三题 --创建客户表并且添加数据 create table customers( cnum varchar(5) primary key, --将客户编号设置为主键&#x…

BPSK调制下(2,1,6)标准卷积码及打孔生成2/3、3/4、4/5、5/6删余码Viterbi译码误码率曲线图(MATLAB实现)

关注公号【逆向通信猿】更精彩!!! 目录 仿真结果卷积码原理图删余后性能比较常用的删余码仿真代码根据码率生成打孔参数(子函数)将标准(2, 1, 6)编码后的序列进行打孔,生成删余码(子函数)对接收到的序列进行反打孔,将原来打孔删除的比特进行补零(子函数)BPSK调制下(2,1,6…

使用JDK 11在Java字符串上的新方法

Java的String类似乎将在JDK 11中获得一些新方法&#xff0c;该方法将于2018年9月发布。 错误号 错误标题 新的String方法 描述 JDK-8200425 字符串::行 lines() “使用专用的分隔符从源字符串中懒惰地提供行的字符串实例方法。” JDK-8200378 String :: strip&#x…

江南大学物联网工程学院数据库课程实验三作业3vb.net实验报告

一、开发环境 语言环境&#xff1a;Microsoft.NET Framework 4.6 SDK IDE&#xff1a;Microsoft Visual Studio Community 2015 二、代码及配置 1、Form1 Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadEnd SubPrivate …

[2021.07.25更新]循环冗余校验(CRC)的MATLAB实现

欢迎同步关注公众号【逆向通信猿】 CRC校验(循环冗余校验) 在计算CRC校验的时候,发现一个网站如下 http://www.ip33.com/crc.html 于是,想自己动手实现该网站计算CRC校验的功能,网站提供的在线计算工具是以十六进制来表示输入参数和结果的,为了方便MATLAB实现,本文提供…

江南大学物联网工程学院数据库课程实验四作业4vb.net实验报告

一、开发环境 语言环境&#xff1a;Microsoft.NET Framework 4.6 SDK IDE&#xff1a;Microsoft Visual Studio Community 2015 二、代码 Imports System.Data.SqlClient Public Class Form1 连接本机数据库并获取test_one数据库中的sc表数据 Dim mybind As BindingManagerB…