jboss EAP 6.2+ 通过代码控制JNDI数据源

简介: 通过Jboss提供的API,可以操控JBoss,效果跟在管理控制台手动操作完全一样,下面是示例代码: 一、pom.xml添加依赖项 org.jboss.as jboss-as-controller-client 7.

通过Jboss提供的API,可以操控JBoss,效果跟在管理控制台手动操作完全一样,下面是示例代码:

一、pom.xml添加依赖项

<dependency>
    <groupId>org.jboss.as</groupId>
    <artifactId>jboss-as-controller-client</artifactId>
    <version>7.2.0.Final</version>
</dependency>

二、创建数据源示例

/**
 * 创建jboss数据源示例
 * @throws IOException
 */
@Test
public void createJbossDataSource() throws IOException{
    String dataSourceName = "myDS";//数据源名称
    ModelNode request = new ModelNode();
    request.get(ClientConstants.OP).set(ClientConstants.ADD);
    request.get(ClientConstants.OP_ADDR).add("subsystem",
            "datasources");
    request.get(ClientConstants.OP_ADDR).add("data-source",dataSourceName);

    request.get("jndi-name").set("java:/"+dataSourceName);
    request.get("use-java-context").set(Boolean.TRUE);
    request.get("connection-url").set("jdbc:oracle:thin:@172.21.X.X:1521:orcl");
    request.get("driver-name").set("oracle");//注意:jboss上要事先添加好名为oracle的ojdbc数据驱动jar包
    request.get("driver-class").set("oracle.jdbc.driver.OracleDriver");
    request.get("min-pool-size").set(1);
    request.get("max-pool-size").set(15);
    request.get("user-name").set("你的用户名");
    request.get("password").set("你的密码");

    ModelControllerClient client = ModelControllerClient.Factory.create(InetAddress.getByName("127.0.0.1"), 9999);
    client.execute(new OperationBuilder(request).build());
    client.close();

    System.out.println(dataSourceName + "创建完成!");
}

三、删除数据源

    /**
     * 删除指定数据源示例
     * @throws IOException
     */
    @Test
    public void deleteJbossDataSource() throws IOException {
        String datasourceName = "myDS";
        ModelNode request = new ModelNode();
        request.get(ClientConstants.OP).set("remove");
        request.get(ClientConstants.OP_ADDR).add("subsystem","datasources");
        request.get(ClientConstants.OP_ADDR).add("data-source",datasourceName);
        ModelControllerClient client = ModelControllerClient.Factory.create(
                InetAddress.getByName("127.0.0.1"), 9999);
        client.execute(new OperationBuilder(request).build());
        client.close();
        System.out.println("数据源" + datasourceName + "删除完成!");
    }

四、启用/禁用指定数据源

/**
 * 启用指定数据源
 * @throws IOException
 */
@Test
public void enableJbossDataSource() throws IOException{
    String datasourceName = "myDS";
    ModelNode request = new ModelNode();
    request.get(ClientConstants.OP).set("enable");//禁用的话,换成disable
    request.get(ClientConstants.OP_ADDR).add("subsystem","datasources");
    request.get(ClientConstants.OP_ADDR).add("data-source",datasourceName);

    ModelControllerClient client = ModelControllerClient.Factory.create(
            InetAddress.getByName("127.0.0.1"), 9999);
    client.execute(new OperationBuilder(request).build());
    client.close();
    System.out.println("数据源" + datasourceName + "启用完成!");
}

五、获取jboss已创建的jndi数据源列表

    /**
     * 获取jboss上已创建的所有数据源
     * @throws IOException
     */
    @Test
    public void getJbossDataSource() throws IOException {
        List<ModelNode> dsList = getDataSources();
        for (ModelNode n : dsList) {
            System.out.println(n.asString());
        }
    }

    private List<ModelNode> getDataSources() throws IOException {
        final ModelNode request = new ModelNode();
        request.get(ClientConstants.OP).set("read-resource");
        request.get("recursive").set(true);
        request.get(ClientConstants.OP_ADDR).add("subsystem", "datasources");
        ModelControllerClient client = null;
        try {
            client = ModelControllerClient.Factory.create(InetAddress.getByName("127.0.0.1"), 9999);
            final ModelNode response = client.execute(new OperationBuilder(request).build());

            return response.get(ClientConstants.RESULT).get("data-source").asList();
        } finally {
            safeClose(client);
        }
    }

    private void safeClose(final Closeable closeable) {
        if (closeable != null) try {
            closeable.close();
        } catch (Exception e) {
            // no-op
        }
    }

github上还有一个开源项目jboss-controller-operation-executor,把一些常用操作做了封装,推荐大家也看一看。

  

  

  

目录
相关文章
|
安全 Java 应用服务中间件
JBOSS EAP实战(2)-集群、NGINX集成、队列与安全
JBOSS HTTP的Thread Group概念 JBOSS是一个企业级的J2EE APP Container,因此它和任何一种成熟的企业级中间件一样具有Thread Group的概念。
1639 0
|
关系型数据库 MySQL Java
JBOSS EAP实战(1)
JBOSS的诞生 1998年,在硅谷SUN公司的SAP实验室,一个年轻人正坐在电脑前面思考,然后写着什么东西。不,他没有在写程序,他在写辞呈。他正在做出人生的一个重大决定:他要辞掉在SUN的这份工作,投身到open source的开发。
1714 0
|
Java 应用服务中间件 API
Jboss EAP:native management API学习
上一节已经学习了CLI命令行来控制JBOSS,如果想在程序中以编码方式来控制JBOSS,可以参考下面的代码,实际上在前面的文章,用代码控制Jboss上的DataSource,已经有所接触了,API与CLI是完全等价的,一个是人工敲指令,一个是代码控制,二者最终的效果一致。
1224 0
|
应用服务中间件 数据安全/隐私保护 运维
jboss CLI 命令行接口学习(适用JBOSS EAP 6.2+)
一、确认CLI所使用的端口 以domain模式为例,查看domain controller(也就是master主机)上的host.xml 1 2 3 4 5 6 7 8 其中native.
1409 0
|
Java 应用服务中间件 数据安全/隐私保护
jboss eap 6.2+ 版本中 加密datasource密码等敏感信息
默认情况下,在jboss eap 6.2+ 管理控制台创建datasource后,会在standalone.xml(独立模式)或host.xml(域模式)中以明文保存相关敏感信息。 这会给服务器留下安全隐患,不过官方已经考虑到了这一点,给出了vault机制来进行加密,步骤如下:   1.
1188 0
|
Java 应用服务中间件 Apache
jboss eap 6.3 集群(cluster)-Session 复制(Replication)
本文算是前一篇的后续,java web application中,难免会用到session,集群环境中apache会将http请求智能转发到其中某台jboss server。假设有二个jboss server:Server A,Server B,Session值在Server A上。
1250 0
|
应用服务中间件 安全 网络安全
jboss eap 6.3 域(Domain)模式配置
jboss提供了二种运行模式:standalone(独立运行模式)、domain(域模式),日常开发中,使用standalone模式足已;但生产部署时,一个app,往往是部署在jboss集群环境中的,如果所有jboss server均采用standalone模式,会给运维带来极大的工作量,需要每台jboss server上逐一部署/更新,显然不适合。
1293 0
|
负载均衡 应用服务中间件 Linux
jboss eap 6.3 集群(cluster)配置
接上一篇继续,Domain模式解决了统一管理多台jboss的问题,今天我们来学习如何利用mod_cluster来实现负载均衡、容错。 mod_cluster是jboss的一个开源集群模块(基于apache 2.
1454 0
|
安全 应用服务中间件 Java
需要安全认证的远程EJB调用示例(Jboss EAP 6.2环境)
一,Remote EJB 服务接口定义: 1 package yjmyzz.ejb.server.helloworld; 2 3 public interface HelloWorldService { 4 5 public String sayHello(String name); 6 7 } 实现: 1 package yjmyzz.
1108 0