上一节已经学习了CLI命令行来控制JBOSS,如果想在程序中以编码方式来控制JBOSS,可以参考下面的代码,实际上在前面的文章,用代码控制Jboss上的DataSource,已经有所接触了,API与CLI是完全等价的,一个是人工敲指令,一个是代码控制,二者最终的效果一致。

import com.sun.javafx.sg.PGShape;
import org.jboss.as.controller.client.ModelControllerClient;
import org.jboss.as.controller.client.helpers.ClientConstants;
import org.jboss.dmr.ModelNode;
import org.junit.Test;import javax.security.auth.callback.*;
import javax.security.sasl.RealmCallback;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;public class JBossClient {private String host = "172.16.38.***";private int port = 9999;private String userid = "jimmy";private String password = "*****";@Testpublic void testGetServers() {//相当于CLI命令行: ls /host=master/server-configList<String> servers = getServers("master");for (String s : servers) {System.out.println(s);}}@Testpublic void getServerStatus() {//相当于CLI命令行:/host=master/server=server-one:read-attribute(name=server-state)System.out.println(getServerStatus("master", "server-one"));//相当于CLI命令行:/host=master/server-config=server-one:read-attribute(name=status)System.out.println(getServerStatus2("master", "server-one"));}@Testpublic void testStartServer() {//相当于CLI命令行:/host=master/server-config=server-one:startSystem.out.println(startServer("master", "server-one"));}@Testpublic void testStopServer() {//相当于CLI命令行:/host=master/server-config=server-one:stopSystem.out.println(stopServer("master", "server-one"));}/*** 获取指定服务器运行状态* @param hostName* @param serverName* @return*/public String getServerStatus(String hostName, String serverName) {String status = "unknown";ModelControllerClient client = null;try {client = createClient(InetAddress.getByName(host), port, userid, password.toCharArray(), "ManagementRealm");} catch (UnknownHostException uhe) {uhe.printStackTrace();System.out.println("UHE: " + uhe.getMessage());}try {ModelNode op = new ModelNode();op.get(ClientConstants.OP).set(ClientConstants.READ_ATTRIBUTE_OPERATION);op.get(ClientConstants.OP_ADDR).add("host", hostName);op.get(ClientConstants.OP_ADDR).add("server", serverName);op.get("name").set("server-state");status = client.execute(op).get(ClientConstants.RESULT).asString();if (client != null) client.close();} catch (Exception e) {e.printStackTrace();System.out.println("Exception: " + e.getMessage());}return status;}/*** 另一种获取服务器运行状态的方法* @param hostName* @param serverName* @return*/public String getServerStatus2(String hostName, String serverName) {String status = "unknown";ModelControllerClient client = null;try {client = createClient(InetAddress.getByName(host), port, userid, password.toCharArray(), "ManagementRealm");} catch (UnknownHostException uhe) {uhe.printStackTrace();System.out.println("UHE: " + uhe.getMessage());}try {ModelNode op = new ModelNode();op.get(ClientConstants.OP).set(ClientConstants.READ_ATTRIBUTE_OPERATION);op.get(ClientConstants.OP_ADDR).add("host", hostName);op.get(ClientConstants.OP_ADDR).add("server-config", serverName);op.get("name").set("status");status = client.execute(op).get(ClientConstants.RESULT).asString();if (client != null) client.close();} catch (Exception e) {e.printStackTrace();System.out.println("Exception: " + e.getMessage());}return status;}/*** 启动指定服务器** @param hostName* @param serverName*/public ModelNode startServer(String hostName, String serverName) {ModelControllerClient client = null;ModelNode returnVal = null;try {client = createClient(InetAddress.getByName(host), port, userid, password.toCharArray(), "ManagementRealm");} catch (UnknownHostException uhe) {uhe.printStackTrace();System.out.println("UHE: " + uhe.getMessage());}try {ModelNode op = new ModelNode();op.get(ClientConstants.OP).set("start");op.get(ClientConstants.OP_ADDR).add("host", hostName);op.get(ClientConstants.OP_ADDR).add("server-config", serverName);returnVal = client.execute(op).get(ClientConstants.RESULT);if (client != null) client.close();} catch (Exception e) {e.printStackTrace();System.out.println("Exception: " + e.getMessage());}return returnVal;}/*** 停止指定服务器** @param hostName* @param serverName*/public ModelNode stopServer(String hostName, String serverName) {ModelControllerClient client = null;ModelNode returnVal = null;try {client = createClient(InetAddress.getByName(host), port, userid, password.toCharArray(), "ManagementRealm");} catch (UnknownHostException uhe) {uhe.printStackTrace();System.out.println("UHE: " + uhe.getMessage());}try {ModelNode op = new ModelNode();op.get(ClientConstants.OP).set("stop");op.get(ClientConstants.OP_ADDR).add("host", hostName);op.get(ClientConstants.OP_ADDR).add("server-config", serverName);returnVal = client.execute(op).get(ClientConstants.RESULT);if (client != null) client.close();} catch (Exception e) {e.printStackTrace();System.out.println("Exception: " + e.getMessage());}return returnVal;}/*** 获取指定host下的所有server** @param hostName* @return*/public List<String> getServers(String hostName) {List<String> servers = new ArrayList<String>();ModelControllerClient client = null;try {client = createClient(InetAddress.getByName(host), 9999, userid, password.toCharArray(), "ManagementRealm");} catch (UnknownHostException uhe) {uhe.printStackTrace();System.out.println("UHE: " + uhe.getMessage());}try {ModelNode op = new ModelNode();op.get(ClientConstants.OP).set(ClientConstants.READ_RESOURCE_OPERATION);op.get(ClientConstants.OP_ADDR).add("host", hostName);List<ModelNode> returnVal = client.execute(op).get(ClientConstants.RESULT).get("server-config").asList();for (ModelNode _ : returnVal) {servers.add(_.asProperty().getName());}if (client != null) client.close();} catch (Exception e) {e.printStackTrace();System.out.println("Exception: " + e.getMessage());}return servers;}private ModelControllerClient createClient(final InetAddress host, final int port, final String username, final char[] password, final String securityRealmName) {final CallbackHandler callbackHandler = new CallbackHandler() {public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {for (Callback current : callbacks) {if (current instanceof NameCallback) {NameCallback ncb = (NameCallback) current;ncb.setName(username);} else if (current instanceof PasswordCallback) {PasswordCallback pcb = (PasswordCallback) current;//pcb.setPassword("admin123".toCharArray());pcb.setPassword(password);} else if (current instanceof RealmCallback) {RealmCallback rcb = (RealmCallback) current;rcb.setText(rcb.getDefaultText());} else {throw new UnsupportedCallbackException(current);}}}};return ModelControllerClient.Factory.create(host, port, callbackHandler);}
}

除了native managent API外,jboss还提供了一套基于http的REST风格API,即9990端口对应的API,有兴趣的可以参考下面的文章

https://docs.jboss.org/author/display/AS71/The+HTTP+management+API

https://docs.jboss.org/author/display/AS71/The+native+management+API

GitHub有一个开源项目,从手机上管理jboss,就是基于http的这一套API实现的,技术上讲 ,利用这二套API,完全可以自己定制一套Jboss管理控制台(不管是c/s还是b/s)

最后送点福利,GitHub上的开源项目jboss-controller-operation-executor,我在原来的基础上,增加了几个domain模式下的控制方法,包括 停止/启用某一台服务器、获取服务器状态、停止/启用某个ServerGroup下所有Server,并增加了单元测试的示例代码,并将pom依赖项,升级到7.5,以兼容JBOSS EAP 6.4

项目地址:https://github.com/yjmyzz/jboss-controller-operation-executor

示例代码:https://github.com/yjmyzz/jboss-controller-operation-executor/blob/master/src/test/java/uk/co/techblue/jboss/test/UnitTest.java

Jboss EAP:native management API学习相关推荐

  1. node-webkit学习(4)Native UI API 之window

    4.1  WINDOW API概述 node-webkit版本>= v0.3.0才支持window api. Native GUI API中的window是对DOM页面的windows的一个封装 ...

  2. 【Jboss EAP】初识JBoss EAP

    前言 小编最近加入了公司的JavaEE团队,在做一些JavaEE相关的项目,在项目中用的是JBoss EAP服务器,由于是接触JavaEE项目的时间不长,所以对于JBoss EAP来说,自己只处于基本 ...

  3. JBOSS EAP实战(1)

    JBOSS的诞生 1998年,在硅谷SUN公司的SAP实验室,一个年轻人正坐在电脑前面思考,然后写着什么东西. 不,他没有在写程序,他在写辞呈.他正在做出人生的一个重大决定: 他要辞掉在SUN的这份工 ...

  4. CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法...

    CAS (10) -- JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法 jboss版本: jb ...

  5. jboss eap 6.2+ 版本中 加密datasource密码等敏感信息

    默认情况下,在jboss eap 6.2+ 管理控制台创建datasource后,会在standalone.xml(独立模式)或host.xml(域模式)中以明文保存相关敏感信息. 这会给服务器留下安 ...

  6. jboss eap 7_使用JBoss EAP 7的HTTP / 2

    jboss eap 7 就在几天前,新的JBoss EAP 7 ALPHA版本已经发布. 而且我已经写过博客,介绍如何开始使用它 . 一个非常有趣的部分是HTTP / 2支持,它已作为技术预览添加. ...

  7. jboss eap_HawtIO在JBoss EAP上(第二部分)

    jboss eap 我刚刚发布了一篇关于在JBoss Wildfly 8.1上运行HawtIO的条目 . 从那篇文章中,您将了解HawtIO的出色表现 ,以及它必须具备的所有 出色 插件,才能从单个仪 ...

  8. 使用JBoss EAP 7的HTTP / 2

    就在几天前,新的JBoss EAP 7 ALPHA版本已经发布. 而且我已经写过关于如何开始使用它的博客. 一个非常有趣的部分是HTTP / 2支持,它已作为技术预览添加. 它由新的Web服务器Unt ...

  9. HawtIO在JBoss EAP上(第二部分)

    我刚刚发布了一篇关于在JBoss Wildfly 8.1上运行HawtIO的条目 . 从那篇文章中,您将了解HawtIO多么出色 ,以及它必须具备的所有 出色 插件,才能从单个仪表板管理基于JVM的技 ...

最新文章

  1. 如何理解JS的单线程?
  2. Hbase完全分布式的搭建
  3. 华为修改优先级命令_VOlTE指标设定(华为网管各种命令)
  4. 从ffmpeg源代码分析如何解决ffmpeg编码的延迟问题(如何解决编码 0 延时)
  5. vue --- 2.0 编译的实现
  6. 求字符串的最长回文字串 O(n)
  7. java long short_Java Long类shortValue()方法与示例
  8. CentOS升级Python到2.7版本
  9. [转]VS清除打开项目时的TFS版本控制提示
  10. 折线图_Line plot - 折线图
  11. 2天玩转单反相机引领快乐光影新生活
  12. css3渐变画斜线 demo
  13. 卡通人物设计_40个很棒的卡通人物设计教程
  14. 围棋大师阿里,产品经理腾讯
  15. 二本机械毕业2年,从外包ETL到大厂数据开发,月薪13K到年薪40W
  16. 卡西欧科学计算机使用方法,卡西欧计算器使用说明
  17. Matlab开发Web App服务器
  18. PHP网页设计实现增删改查,包含报告实训内容
  19. Spring Security定义多个过滤器链(10)
  20. java 读取excel列_Java读取Excel指定列的数据详细教程和注意事项

热门文章

  1. HDU - 5875 Function [单调性剪枝+预处理]
  2. 最简单的小程序怎么做?
  3. java中的深复制和浅复制
  4. LVS(DR)+keepalived+nfs+raid+LVM
  5. Netflix的快速产品集成测试
  6. 学渣的逆袭(各种暴力~)
  7. Give root password for maintenance 问题的解决方法
  8. 【转】关于“Please install at least one language pack”的详
  9. Jquery之AJAX用户注册表单验证(Vancl版)
  10. 《An Introduction to Ray Tracing》——2.3 Ray/Polygon Intersection And Mapping