博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jboss EAP:native management API学习
阅读量:6589 次
发布时间:2019-06-24

本文共 8867 字,大约阅读时间需要 29 分钟。

已经学习了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 = "*****";    @Test    public void testGetServers() {        //相当于CLI命令行: ls /host=master/server-config        List
servers = getServers("master"); for (String s : servers) { System.out.println(s); } } @Test public 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")); } @Test public void testStartServer() { //相当于CLI命令行:/host=master/server-config=server-one:start System.out.println(startServer("master", "server-one")); } @Test public void testStopServer() { //相当于CLI命令行:/host=master/server-config=server-one:stop System.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
getServers(String hostName) { List
servers = new ArrayList
(); 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
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,有兴趣的可以参考下面的文章

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

项目地址:

示例代码:

 

转载地址:http://gikio.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
Linux实验室 CentOS关机大法
查看>>
一行命令获取当前JVM所有可设置的参数以及当前默认值
查看>>
spring与struts2 mvc共存web.xml简单配置
查看>>
Python web爬虫
查看>>
Python捕捉命令输出、错误输出及赋值命令到变量的方法
查看>>
js解析json
查看>>
详解性能调优命令
查看>>
Linux mint 14下的powerDNS+mysql+powerAdmin搭建个性DNS域名解析服务器
查看>>
Red Hat EnterPrise Linux 5.4下web服务器的综合使用(普通站点、虚拟主机、安全性、...
查看>>
squirrelmail+change_sqlpass 认证 问题
查看>>
hive优化--增加减少map数
查看>>
重建二叉树
查看>>
ERP计划参数如何在线更新
查看>>
3.8Python数据处理篇之Numpy系列(八)---Numpy的梯度函数
查看>>
LVS+Keepalived实现高可用集群
查看>>
我的友情链接
查看>>
hadoop管理命令——fsck
查看>>
我的友情链接
查看>>
unbantu安装 mysql --- 百度云
查看>>