wildfly_从WildFly 9(子系统)中运行OkHttpClient
wildfly
几天前, WildFly 9发布了,可以肯定的重点之一是Undertow Web子系统中对HTTP / 2.0的支持。 随着Hawkular最近开始使用WildFly 9(从8.2开始)作为其基础服务器,尝试使用http2连接从Hawkular-Wildfly-Monitor客户端到服务器的连接是很自然的。
这里的一个特殊之处是,在我的情况下,监视器客户端在Hawkular服务器内部运行,但是最后它是在独立的WildFly服务器内部还是Hawkular服务器内部运行都没有关系。
设置
Greg Autric写了一篇博客文章,展示了如何使用离线CLI在WildFly中设置Http2,在Hawkular案例中也能很好地工作。
帖子中唯一有问题的是,在启动服务器之前设置JAVA_OPTS
将忽略来自standalone.conf的所有设置,在当前的Hawkular版本中,这将阻止总线代理的正确启动(因为IPv4Only标志为丢失)。
因此,我认为最好修改standalone.conf
以将这些选项“添加”到已经存在的其他选项中:
JAVA_OPTS="-Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true"JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/opt/hawkular-1.0.0.Alpha3-SNAPSHOT/alpn-boot-8.1.3.v20150130.jar"JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
现在,当我启动Hawkular服务器并尝试在https端口上与FireFox连接时,我收到有关自签名证书的警告,但是可以按照Httpreg的说明通过Http2连接进行连接并获取UI。
运行OkHttpClient
如前所述,WildFly监视客户端是WildFly服务器内部的子系统。 我写了一些客户端代码,该代码正在子系统中运行(缩短):
OkHttpClient httpClient;httpClient = new OkHttpClient();// DO NOT USE IN PRODUCTION, allow all hostnameshttpClient.setHostnameVerifier(new NullHostNameVerifier());setKeystore(httpClient); // Use custom ssl factoryString uri = "https://...:8443/";Request request = new Request.Builder().url(uri).addHeader("Accept", "application/json").get().build();// sync execution just for the postResponse resp = httpClient.newCall(request).execute();System.out.println(resp.toString());
失败?
除了总是使用Http(s)/1.1且从不使用Http2的事实(从最后一个println
语句的输出中可以看到)之外,这段代码行之有效:
Response{protocol=http/1.1, code=204, message=....}
我一直在尝试各种选择,直到我认为必须将代码提取到独立的Java SE类中才能更好地进行隔离调试。
我编写了该类,设置了bootclasspath,然后运行它,它运行良好:
Response{protocol=h2, code=204, message=....}
那么区别是什么呢? 我删除了ALPN的bootclasspath设置,重新运行,连接恢复为http / 1.1。
这有点奇怪,因为我的客户端子系统运行在同一个WilFly服务器中,该服务器运行Undertow,并且能够处理http2请求,并且在较早的时候通过JAVA_OPTS
添加了ALPN类。
现在请记住,WildFly正在使用他们自己的类加载器系统(jboss-modules),该系统在隔离部署和类并限制其可见性和/或泄漏到不应该看到它们的区域时非常强大。
实际上,这也是这里发生的事情。
成功!
因此,我必须将ALPN类显式添加到监视客户module.xml
文件中:
<module xmlns="urn:jboss:module:1.3" name="${moduleName}"><resources><resource-root path="clients-common.jar"/>[...]<resource-root path="okhttp.jar"/><resource-root path="okio.jar"/></resources><dependencies><!-- modules required by any subsystem --><module name="javax.api"/>[...]<system export="true"><paths><!-- Needed for HTTP2 and SPDY support--><path name="org/eclipse/jetty/alpn"/></paths></system></dependencies></module>
从上面的代码片段中,您可以看到okhttp
和okio
jars打包在模块中,并且也可用于我的客户端代码。
现在,已经对module.xml进行了调整,并且我的子系统正在使用Http2 :-)
翻译自: https://www.javacodegeeks.com/2015/07/running-okhttpclient-from-within-wildfly-9-subsystem.html
wildfly
wildfly_从WildFly 9(子系统)中运行OkHttpClient相关推荐
- 从WildFly 9(子系统)中运行OkHttpClient
几天前, WildFly 9发布了,可以肯定的重点之一是Undertow Web子系统中对HTTP / 2.0的支持. 由于Hawkular最近已开始使用WildFly 9(从8.2开始)作为其基础服 ...
- 【Asp.net Core】在 Linux 子系统中安装 nginx 并配置反向代理
上一篇鸟文中,老周已经介绍过在 Ubuntu 子系统中安装 dotnet-sdk 的方法,本文老周给大伙伴们说说安装 nginx 服务,并配置反向代理.同样,老周假设你从来没有用过 Linux,所以老 ...
- 在WildFly中运行多个standalone模式的实例
WildFly作为一款优秀的EJB容器,其前身为JBoss AS.JBoss作为一款开源的应用服务器,被广泛的应用在各种项目当中.假设我们现在有这样一个项目,他是以standalone的模式运行在Wi ...
- 在每个运行中运行多个查询_在Kubernetes中运行OpenEBS
什么是OpenEBS? 现在,OpenEBS是kubernetes下与容器原生和容器附加存储类型相关通用的领先开源项目之一. 通过为每个工作负载指定专用的存储控制器,OpenEBS遵循容器附加存储或C ...
- java ee4.8下载_在WildFly 8.2中修补焊接3 – Java EE 8的第一个实验RI
java ee4.8下载 Java EE 8一直在发展,并且已经提出了几个新的组件JSR. JSR 365将定义CDI 2.0的规范. 红帽已经开始开发Weld 3的实现原型, Alpha3最近发布了 ...
- 在WildFly 8.2中修补焊接3 – Java EE 8的第一个实验RI
Java EE 8一直在发展,并且已经提出了几个新的组件JSR. JSR 365将定义CDI 2.0的规范. 红帽公司已经开始研究Weld 3的实现原型,并且Alpha3最近发布了 . Red Hat ...
- Windows10系统的Linux子系统中安装MySQL数据库心得
后端开发童鞋们, 自己开发机用的是Windows系统电脑(台式机或笔记本), 而开发的程序和使用的数据库等要运行在Linux服务器上, 这种情况有木有? 提前声明: 本文并不讨论操作系统的比较, 以及 ...
- win10查看linux文件夹,Win10系统访问Linux子系统中文件的教程
在19H1(目前处于Insider Preview阶段,预计4月份正式推送)中,微软为适用于Linux的Windows子系统带来了一项有趣的功能,这项功能允许用户从Windows 10访问Linux子 ...
- JVM00_面试官对类加载器子系统、运行时数据区、内存分布、执行引擎的灵虚拷问,你能坚持到第几问?
因为热爱所以坚持,因为热爱所以等待.熬过漫长无戏可演的日子,终于换来了人生的春天.他逐渐被人熟知,被人喜爱 三年前,在苏州园区某个国企面试,第一道题目便是:JVM是什么吗?然后就是拿着笔试题目被面试官 ...
最新文章
- javascript 的面向对象特性参考
- 宝塔ssl验证域名失败_宝塔SSL配置教程
- 重新理解 Monad
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
- 开发小Tips-setValue
- mysql 绕过select报错_MySQL注射绕过技巧(三)
- 简述ipython的特点 app_介绍、基本语法、流程控制
- 云服务器ECS共享标准型S6全新发布, 行业内最具性价比
- ES6-set集合应用
- nginx 413 Request Entity Too Large
- @AspectJ中的切点表达式详解
- C++ MFC实现基于RFID读写器的上位机软件
- iis绑定php程序应用池设定,什么是IIS应用程序池以及应用程序池详解
- 用qt的qml写的安卓摄像头程序
- matlab IIR滤波
- 软件项目管理课程设计-数字化校园学工信息系统
- java 支付宝 验证签名失败,关于支付宝签名校验失败的问题排解
- android支付宝4000,Android支付——支付宝支付
- 量化研究 | 策略在指数与主连复权的差异化分析(最终篇)
- Windows XP SP3 笔记本专用版 电脑疯子 2010年巨献
热门文章
- AT3945-[ARC092D]Two Faced Edges【dfs】
- P5934-[清华集训2012]最小生成树【最小割】
- YbtOJ#631-次短路径【左偏树,最短路】
- P3175-[HAOI2015]按位或【min-max容斥,FWT】
- P4562-[JXOI2018]游戏【数论,组合数学】
- ssl1776-游乐场【图论,深搜】
- ssl1197-质数和分解【dp练习】
- Codeforces Round #669 (Div. 2)
- 纪中B组模拟赛总结(2020.2.22)
- MySQL substring()函数