jconsole

与以前的版本相比,JBoss AS7的目标之一是使其在默认情况下更加安全。 受此目标直接影响的领域之一是,您不再期望服务器在端口上公开某些服务并无需任何身份验证/授权就可以访问它。 请记住,在先前的JBoss AS版本中,只要打开了这些端口以进行远程通信,就可以访问JNDI端口,JMX端口而无需任何身份验证/授权。 在JBoss AS7中,此类端口上用于通信的更细粒度的授权允许服务器控制谁可以通过该端口调用操作。

当然,这不仅限于JBoss AS7,而且仍然是WildFly(这是JBoss Application Server的重命名)的目标。 实际上,WildFly向前迈了一步,现在具有“一个单一端口”的功能来进行所有通信。

JBoss AS7和WildFly中的JMX通信

在此背景下,我们现在将专注于JBoss AS7和WildFly中的JMX通信。 在本文的其余部分中,我将使用WildFly(8.2.0 Final)作为参考,但是相同的细节(略有变化)适用于JBoss AS7和WildFly的其他主要版本,这些版本到目前为止已经发布。

WildFly服务器由“子系统”组成,每个子系统都具有一组特定的功能。 例如,有支持Java EE功能集的EE子系统。 然后是支持Web / HTTP服务器功能的Undertow子系统。 同样,有一个JMX子系统公开了服务器上的JMX功能集。 众所周知,我敢肯定,JMX服务通常用于监视甚至管理Java服务器,其中包括远程管理服务器。 WildFly中的JMX子系统允许远程访问JMX服务,并且端口9990是用于该远程JMX通信的端口。

JConsole用于针对JBoss AS7和WildFly的远程JMX访问

Java(JDK)与JConsole工具捆绑在一起,该工具允许连接到公开JMX服务的本地或远程Java运行时。 该工具易于使用,您所要做的就是运行jconsole命令,它将显示一个图形菜单,列出所有本地Java进程,以及一个用于指定远程URL以连接到远程进程的选项:

# Start the JConsole
$JAVA_HOME/bin/jconsole

假设您已经在本地启动了WildFly独立服务器。 现在,当您启动jconsole时,您会注意到WildFly Java进程在您可以连接到的本地运行进程中列出。 选择WildFly Java实例时,将自动连接到它,并且您会注意到服务器公开的MBean。 但是,在本文的上下文中,JConsole中的这种“本地过程”模式不是我们感兴趣的。

让我们使用该JConsole菜单中的“ Remote process”选项,该菜单允许您指定用于连接到Java运行时的远程URL以及用于连接到该实例的用户名和密码。 即使我们的WildFly服务器在本地运行,我们也可以使用此“远程进程”选项尝试并连接到它。 因此,让我们尝试一下。 在此之前,让我们考虑以下几点:

  1. 请记住,WildFly中的JMX子系统允许在端口9990上进行远程访问
  2. 对于远程访问JMX,URL的格式为– service:jmx:[vendor-specific-protocol]:// [host]:[port]。 供应商特定的协议是这里有趣的地方。 对于WildFly,特定于供应商的协议是http-remoting-jmx。
  3. 请记住,WildFly默认情况下是安全的,这意味着仅仅因为JMX子系统公开了9990端口以进行远程通信,并不意味着它开放给任何人通信。 为了允许通过此端口进行通信,必须对调用方客户端进行身份验证和授权。 这由WildFly中的“ ManagementRealm”支持。 对此领域进行身份验证和授权的用户被允许访问该端口。

牢记这些要点,让我们首先在管理领域中创建一个用户。 可以使用添加用户命令行脚本(位于JBOSS_HOME / bin文件夹中)完成此操作。 由于有足够的文档资料,因此我将不做详细介绍。 让我们假设我在管理领域中创建了一个名为“ wflyadmin”的用户,并使用了适当的密码。 要验证是否已正确创建用户,请在正确的领域中访问URL http:// localhost:9990 / console的WildFly管理控制台。 系统将要求您输入用户名和密码进行访问。 使用与新创建的用户相同的用户名和密码。 如果登录有效,那么您就很好。 如果不是这样,那么请确保您在添加新用户时做得正确(如我所说,我将不涉及添加新用户的细节,因为这只会不必要地延长本文的篇幅)。

因此,在这一点上,我们已经创建了一个属于ManagementRealm的名为“ wflyadmin”的用户。 我们将使用相同的用户帐户通过JConsole访问WildFly上的JMX服务。 现在让我们照常启动jconsole:

$JAVA_HOME/bin/jconsole

在JConsole菜单上,让我们再次选择“远程进程”选项,并在URL文本框中使用以下URL:

service:jmx:http-remoting-jmx://localhost:9990

注意:对于JBoss AS 7.xJBoss EAP 6.x ,供应商特定的协议是remoting-jmx,并且通信端口是9999 因此,URL为service:jmx:remoting-jmx:// localhost:9999

在用户名和密码文本框中,使用与新创建的用户/密码相同的密码。 最后,单击“连接”。 你看到了什么? 它不起作用! 连接失败。 那么出了什么问题?

为什么JConsole对WildFly的远程访问不起作用?

您做了所有显而易见的事情来远程访问WildFly JMX服务,但是您仍然看到JConsole无法连接到它。 可能是什么原因? 记住,在前面的几点中,我注意到“特定于供应商的协议”很有趣吗? 我们使用http-remoting-jmx,该协议内部依赖于某些WildFly / JBoss特定的库,主要用于远程通信以及身份验证和授权。 这些库是WildFly服务器专用的,因此不是标准Java运行时环境的一部分。 启动jconsole时,它将使用标准类路径,该类路径仅包含JDK / JRE中的相关库。

要解决此问题,您需要做的是将WildFly服务器特定的库引入JConsole的类路径中。 在研究如何做之前,让我们看一下需要哪些WildFly特定的库。 工作所需的所有必要类均在JBOSS_HOME / bin / client /文件夹中的jboss-cli-client.jar中。 因此,我们需要做的所有事情就是将这个jar包含在jconsole工具的类路径中。 为此,我们使用jconsole工具的-J选项,该选项允许将参数传递给jconsole的Java运行时。 为此的命令是:

$JAVA_HOME/bin/jconsole -J-Djava.class.path=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/jconsole.jar:/opt/wildfly-8.2.0.Final/bin/client/jboss-cli-client.jar

(请注意,对于Windows,classpath分隔符是分号而不是冒号)

注意,针对JBoss AS 7.xJBoss EAP 6.x的服务器特定的jar名为jboss-client.jar,并且位于相同的JBOSS_HOME / bin / client目录位置。

因此,我们使用-J选项将-Djava.class.path作为参数传递给jconsole Java运行时。 注意,我们在该类路径中指定的不仅仅是服务器特定的jar。 这是因为,使用-Djava.class.path应该包含完整的类路径。 我们包括JConsole所需的Java JDK lib文件夹中的jar,以及该类路径中服务器特定的jar。

运行该命令应照常启动JConsole,让我们继续选择“ Remote process”选项并指定与以前相同的URL:

service:jmx:http-remoting-jmx://localhost:9990

并使用与以前相同的用户名和密码,然后单击“连接”。 这次您应该能够连接,并且应该开始看到通过JMX公开的MBean和其他服务。

如何提供执行此必要的类路径设置的脚本?

由于尝试使用JConsole进行针对WildFly的远程访问是很平常的事情,因此可以合理地期望拥有一个设置类路径的脚本(如上所述),然后就可以使用该脚本了。 这就是为什么WildFly会提供这样的脚本的原因。 它位于JBOSS_HOME / bin文件夹中,称为jconsole.sh(对于Windows,称为jconsole.bat)。 这只是一个包装脚本,在适当设置类路径之后,该脚本内部调用Java JDK中存在的jconsole工具。 您所要做的就是运行:

$JBOSS_HOME/bin/jconsole.sh

在真正的远程计算机上针对WildFly使用JConsole怎么办?

到目前为止,我们使用的是与WildFly实例在同一台计算机上的jconsole工具,这意味着我们可以访问文件系统上WildFly安装目录中存在的WildFly服务器特定jar的文件系统。 这使我们能够设置jconsole的类路径以指向本地文件系统上的jar?

如果要从远程计算机对已安装并在另一台计算机上运行的WildFly服务器运行jconsole,该怎么办。 在这种情况下,您的远程客户端计算机将无法访问WildFly安装目录的文件系统。 因此,要使jconsole在这种情况下运行,您必须将JBOSS_HOME / bin / jboss-cli-client.jar复制到远程客户端计算机上,复制到您选择的目录,然后按照说明设置jconsole工具的类路径并将其指向该jar位置。 这样一来,您就可以从远程计算机上的jconsole访问WildFly的JMX服务。

翻译自: https://www.javacodegeeks.com/2014/12/my-wiki-remote-jmx-access-to-wildfly-or-jboss-as7-using-jconsole.html

jconsole

jconsole_我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问相关推荐

  1. jconsole 使用_我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问

    jconsole 使用 与以前的版本相比,JBoss AS7的目标之一是使其在默认情况下更加安全. 受此目标直接影响的领域之一是,您不再期望服务器在端口上公开某些服务,而无需任何身份验证/授权即可访问 ...

  2. 我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问

    与以前的版本相比,JBoss AS7的目标之一是使其在默认情况下更加安全. 受此目标直接影响的领域之一是,您不再期望服务器在端口上公开某些服务,而无需任何身份验证/授权就可以访问它. 请记住,在以前的 ...

  3. Idea中搭建Wildfly(JBoss)运行环境(Mac)

    目录 一.简介 二.下载Wildfly(JBoss) 三.配置Idea 四.调试 一.简介 首先说一下在linux环境,只需要将war包上传到 wildfly-8.2.0.Final/standalo ...

  4. wildfly(JBOSS)启动报错

    报错内容: 15:07:50,724 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFL ...

  5. 解决 wildfly(jboss) 启动报错:'findstr' 不是内部或外部命令

    在Idea中启动wildfly,报如题错误,到wildfly的安装路径的bin目录下启动run.bat,闪退,用cmd命令行启动,看到如题同样报错信息. 这是path环境变量的问题,解决方式: 1.添 ...

  6. Linux 下 WildFly (原Jboss) 的安装 、配置以及发布

    实验平台:CentOS 6.8 软件: wildfly-10.1.0.Final.tar.gz  jdk-8u131-linux-x64.tar.gz jdk8要事先安装好 一 : 安装WildFly ...

  7. WildFly如何编写一个EJB远程客户端

    目录 创建EJB服务器项目 配置服务器依赖项(WildFly 18和更新版本) 部署EJB服务器项目 创建EJB客户端项目 配置客户端依赖项(WildFly 18及更新版本) 在EJB客户端项目中配置 ...

  8. jconsole本地连接“提示安全连接失败”问题解决

    今天学习高并发编程时,了解到可以使用jconsole观察线程,但是无法连接,报错截图如下: 经研究学习后得知需要设置jvm启动参数 添加如下参数: -Dcom.sun.management.jmxre ...

  9. jboss eap mysql_JBoss EAP 7概述

    规范 JBoss EAP 7基于以下规范构建: Java EE 7(JSR 342) Java SE 1.8 Java EE 7 specifications: Note: orange indica ...

最新文章

  1. 【C++】多线程互斥锁、条件变量
  2. 01-CoreData 概述
  3. PHP学习:PHP超全局变量(Superglobal)$GLOBALS的介绍以及和global的区别
  4. 交换技术、覆盖技术、虚拟存储技术的区分
  5. Android Studio 从入门到精通
  6. Jquery各种前台效果JQ
  7. SpringCloud Config 本地配置
  8. 6 VPP源码分析 (VPP中的多线程)
  9. linux 配置java环境变量_linux配置java环境变量(详细)
  10. 用户调研的操作步骤与过程模板
  11. office计算机高级应用,Office办公软件高级应用(大学计算机二级考试标准教程)...
  12. ES系列:字段类型不对时,如何保存文档到索引
  13. 基于TensorRT 5.x的网络推理加速(python)
  14. 优化计算机组策略,在win7系统中优化组策略的多种小技巧
  15. 电报被人胡乱拉群解决办法
  16. python的学习笔记案例1--汇率兑换1.0
  17. 转发乐评IV(惘闻)的评论:污水塘的世界
  18. 从 0 搭建 Spring Cloud 服务,完整教程!
  19. 建设智慧水利,水库水利在线监控系统解决方案
  20. 微信公众平台-文章-app:让创意变为现实,这30个小程序“凭什么”脱颖而出?...

热门文章

  1. Android数据适配器Adapter简介
  2. VMware vSphere4.1看图识HA
  3. gitignore 文件生效办法
  4. Zend Framework 跳转方法(render, forward, redirect)区...
  5. linux perl 报错 Can‘t locate CPAN.pm in @INC (@INC contains: inc /usr/local/lib64/perl5 /usr.... 解决方法
  6. linux centos yum 报错 [Errno 256] No more mirrors to try 解决方法
  7. linux 字符串转换函数 simple_strtoul 简介
  8. linux 进程 崩溃被杀 原因查找
  9. docker 安装 solr搜索引擎
  10. python pip 安装错误 EnvironmentError: mysql_config not found