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

与以前的版本相比,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

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

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

相关文章

js判断对象类型

1.typeof typeof只能判断区分基本类型,number、string、boolean、undefined和object,function; typeof 0; //number; typeof true; //boolean; typeof undefined; //undefined; typeof "hello world" //string; typeof function(){}; …

我喜欢的类型

http://v.qq.com/cover/h/hfd581s2y9unvy8.html?vidp0011ocge8q 转载于:https://www.cnblogs.com/sliz/archive/2012/12/09/2809742.html

使用WildFly和Java EE 7映像与Docker提供者一起流浪

什么是无业游民? Vagrant是创建虚拟开发环境的简化且可移植的方式。 它可与多种虚拟化软件一起使用,例如VirtualBox,VMWare,AWS等。 它还可以与多种配置软件一起使用,例如Ansible,Chef,Puppet或…

Apache Nutch 1.6 发布

Apache Nutch 1.6 发布,该版本修复了超过 20 个 bug,新功能包括:新的 HostNormalizer,可通过 MIME-type 和 Indexer API 的功能增强来动态设置 fetchInterval ,更新 Tika 到 1.2 版本,更新 Autimaton 到 1.…

EE Servlet 3:如何在Web应用程序中设置后端服务

在Web应用程序中,提供用户界面(UI)通常只是工作的一半。 许多应用程序都有后端服务支持的要求。 后端服务的一些示例是调度程序进程(批处理),侦听队列并在消息进入时作出响应,或者是简单的事情&…

es6解构赋值

解构赋值语法是一个 Javascript 表达式,这使得可以将值从数组或属性从对象提取到不同的变量中。 数组解构赋值: {let a,b,rest;[a,b][1,2];console.log(a,b); //1 2 } {let a,b,rest;[a,b,...rest][1,2,3,4,5]; console.log(a,b,rest); //1 2 [ 3, 4, 5 ]…

Jquery插件之ajaxForm

如今ajax满天飞,作为重点的form自然也受到照顾。 其实,我们在平常使用Jquery异步提交表单,一般是在submit()中,使用$.ajax进行。比如: $(function(){$(#myForm).submit(function(){$.ajax({url:"/WebTest/test/te…

休眠锁定模式–乐观锁定模式如何工作

显式乐观锁定 在上一篇文章中 ,我介绍了Java持久性锁定的基本概念。 隐式锁定机制可防止丢失更新 ,它适用于我们可以主动修改的实体。 虽然隐式乐观锁定是一种广泛使用的技术,但是很少有人了解显式乐观锁定模式的内部工作原理。 当锁定的实…

CSS中可继承的属性

不可继承的属性太多了不要背,记住可以继承的属性有哪些就行了。可以继承的属性很少,只有颜色,文字,字体间距行高对齐方式,和列表的样式可以继承。这么来记很轻松的呀!不要被下边的吓到了哦~所有元素可继承&…

如何在JMeter中执行客户端Web性能测试?

在本文中,我们将看到如何使用Jmeter插件进行客户端性能测试。 我将使用jmeter webdriver插件。 在开始本主题之前,请从我以前的文章中获得有关客户端性能测试的一些基本信息。 因此,让我们开始吧: 安装 通过这篇文章之后的链接&…

inline-block的兼容性问题

我们都知道在IE6 7 中用*display:block;*zoom:1;可以解决 inline-block 的兼容问题 很多人认为IE6 7 是不支持inline-block的,严格来说应该是:IE6 7 对 inline-block 支持的不够完全 这个要分两种情况来说&…

用Java读取/写入压缩和非压缩文件

这篇文章的主要原因是尝试不重复自己( DRY ),因为通常,我会遇到读写压缩和非压缩文件(主要是JSON和CSV)的递归需求。 首先让我们看看如何读取文本文件。 注意我正在使用(相对较小的&#xff09…

Gradle入门:创建多项目构建

尽管我们只能使用一个模块来创建一个工作的应用程序,但是有时将我们的应用程序划分为多个较小的模块是比较明智​​的。 因为这是一个相当普遍的用例,所以每个自重的构建工具都必须支持它,Gradle也不例外。 如果Gradle项目具有多个模块&…

float

1.float元素有继承属性:inherit. 2. span{width:100px;height:100px;background:red; } 文档中不显示,因为span为块状元素,不能设置宽和高。 3. span{width:100px;height:100px;background:red;float:left; } 此时在文…

[转载]Buffon投针实验:究竟为什么是pi?

Buffon投针实验:究竟为什么是pi? Brain Storm | 2009-11-06 20:16| 57 Comments | 本文内容遵从CC版权协议 转载请注明出自matrix67.com数学学习真正悲哀的就是,记住了某个神奇而伟大的定理,看懂了其最严密的推导过程,…

EE Servlet 3:使用会话和过滤器开发用户登录

我在上一篇文章中介绍了Application类,您可以在其中设置后端服务。 我添加的一个示例服务是UserService 。 该服务将加载包含用户名和密码集的Java用户属性文件; 稍后将用于对用户进行身份验证以登录到Web应用程序。 现在,我将展示如何使用标…

Ajax应用查询员工信息

首先要用上一篇的步骤启动服务器&#xff0c;建立站点。然后在该站点下创建php文件和html文件。 php代码如下&#xff0c;文件名为server.php <?php //设置页面内容是html编码格式是utf-8 header("Content-Type: text/plain;charsetutf-8"); //header("Co…

局域网基础知识

一、局域网的特征&#xff1a;   局域网分布范围小&#xff0c;投资少&#xff0c;配置简单等&#xff0c;具有如下特征&#xff1a;     1&#xff0e;传输速率高&#xff1a;一般为1Mbps--20Mbps&#xff0c;光纤高速网可达100Mbps&#xff0c;1000MbpS     2&…

初始化懒惰关系以及何时使用它们的5种方法

实体之间关系的延迟加载是JPA中公认的最佳实践。 它的主要目标是仅从数据库中检索请求的实体&#xff0c;并仅在需要时加载相关实体。 如果我们只需要请求的实体&#xff0c;那是一个很好的方法。 但是&#xff0c;如果我们还需要一些相关实体&#xff0c;它会增加工作量&#…

fieldset ----- 不常用的HTML标签

fieldset 元素可将表单内的相关元素分组。 <fieldset> 标签将表单内容的一部分打包&#xff0c;生成一组相关表单的字段。 当一组表单元素放到 <fieldset> 标签内时&#xff0c;浏览器会以特殊方式来显示它们&#xff0c;它们可能有特殊的边界、3D 效果&#xff…