首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jboss EAP 6.2+ 通过代码控制JNDI数据源

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

作者头像
菩提树下的杨过
发布2018-01-18 17:39:25
7310
发布2018-01-18 17:39:25
举报

通过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,把一些常用操作做了封装,推荐大家也看一看。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-08-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档