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>

从上面的代码片段中,您可以看到okhttpokio jars打包在模块中,并且也可用于我的客户端代码。

现在,已经对module.xml进行了调整,并且我的子系统正在使用Http2 :-)

翻译自: https://www.javacodegeeks.com/2015/07/running-okhttpclient-from-within-wildfly-9-subsystem.html

wildfly

wildfly_从WildFly 9(子系统)中运行OkHttpClient相关推荐

  1. 从WildFly 9(子系统)中运行OkHttpClient

    几天前, WildFly 9发布了,可以肯定的重点之一是Undertow Web子系统中对HTTP / 2.0的支持. 由于Hawkular最近已开始使用WildFly 9(从8.2开始)作为其基础服 ...

  2. 【Asp.net Core】在 Linux 子系统中安装 nginx 并配置反向代理

    上一篇鸟文中,老周已经介绍过在 Ubuntu 子系统中安装 dotnet-sdk 的方法,本文老周给大伙伴们说说安装 nginx 服务,并配置反向代理.同样,老周假设你从来没有用过 Linux,所以老 ...

  3. 在WildFly中运行多个standalone模式的实例

    WildFly作为一款优秀的EJB容器,其前身为JBoss AS.JBoss作为一款开源的应用服务器,被广泛的应用在各种项目当中.假设我们现在有这样一个项目,他是以standalone的模式运行在Wi ...

  4. 在每个运行中运行多个查询_在Kubernetes中运行OpenEBS

    什么是OpenEBS? 现在,OpenEBS是kubernetes下与容器原生和容器附加存储类型相关通用的领先开源项目之一. 通过为每个工作负载指定专用的存储控制器,OpenEBS遵循容器附加存储或C ...

  5. 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最近发布了 ...

  6. 在WildFly 8.2中修补焊接3 – Java EE 8的第一个实验RI

    Java EE 8一直在发展,并且已经提出了几个新的组件JSR. JSR 365将定义CDI 2.0的规范. 红帽公司已经开始研究Weld 3的实现原型,并且Alpha3最近发布了 . Red Hat ...

  7. Windows10系统的Linux子系统中安装MySQL数据库心得

    后端开发童鞋们, 自己开发机用的是Windows系统电脑(台式机或笔记本), 而开发的程序和使用的数据库等要运行在Linux服务器上, 这种情况有木有? 提前声明: 本文并不讨论操作系统的比较, 以及 ...

  8. win10查看linux文件夹,Win10系统访问Linux子系统中文件的教程

    在19H1(目前处于Insider Preview阶段,预计4月份正式推送)中,微软为适用于Linux的Windows子系统带来了一项有趣的功能,这项功能允许用户从Windows 10访问Linux子 ...

  9. JVM00_面试官对类加载器子系统、运行时数据区、内存分布、执行引擎的灵虚拷问,你能坚持到第几问?

    因为热爱所以坚持,因为热爱所以等待.熬过漫长无戏可演的日子,终于换来了人生的春天.他逐渐被人熟知,被人喜爱 三年前,在苏州园区某个国企面试,第一道题目便是:JVM是什么吗?然后就是拿着笔试题目被面试官 ...

最新文章

  1. javascript 的面向对象特性参考
  2. 宝塔ssl验证域名失败_宝塔SSL配置教程
  3. 重新理解 Monad
  4. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
  5. 开发小Tips-setValue
  6. mysql 绕过select报错_MySQL注射绕过技巧(三)
  7. 简述ipython的特点 app_介绍、基本语法、流程控制
  8. 云服务器ECS共享标准型S6全新发布, 行业内最具性价比
  9. ES6-set集合应用
  10. nginx 413 Request Entity Too Large
  11. @AspectJ中的切点表达式详解
  12. C++ MFC实现基于RFID读写器的上位机软件
  13. iis绑定php程序应用池设定,什么是IIS应用程序池以及应用程序池详解
  14. 用qt的qml写的安卓摄像头程序
  15. matlab IIR滤波
  16. 软件项目管理课程设计-数字化校园学工信息系统
  17. java 支付宝 验证签名失败,关于支付宝签名校验失败的问题排解
  18. android支付宝4000,Android支付——支付宝支付
  19. 量化研究 | 策略在指数与主连复权的差异化分析(最终篇)
  20. Windows XP SP3 笔记本专用版 电脑疯子 2010年巨献

热门文章

  1. AT3945-[ARC092D]Two Faced Edges【dfs】
  2. P5934-[清华集训2012]最小生成树【最小割】
  3. YbtOJ#631-次短路径【左偏树,最短路】
  4. P3175-[HAOI2015]按位或【min-max容斥,FWT】
  5. P4562-[JXOI2018]游戏【数论,组合数学】
  6. ssl1776-游乐场【图论,深搜】
  7. ssl1197-质数和分解【dp练习】
  8. Codeforces Round #669 (Div. 2)
  9. 纪中B组模拟赛总结(2020.2.22)
  10. MySQL substring()函数