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

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

  

  

  

时间: 2024-07-28 15:17:19

jboss EAP 6.2+ 通过代码控制JNDI数据源的相关文章

JMS + jboss EAP 6.2 示例

.Net中如果需要消息队列功能,可以很方便的使用微软自带的MSMQ,对应到Java中,这个功能就是JMS(Java Message Service). 下面以Jboss EAP 6.2环境,介绍一下基本的用法: JMS有二种基本的使用模式, 一种是点对点模式(即"一条"消息只能从"一个"发送方传输到"一个"接收方) - 这种模式下,发送方.接收方不必同时在线,消息在未取回走,一直存放在队列中. 另一种是发布/订阅模式,即一条消息(该模式下,称为&

Jboss EAP:native management API学习

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

如何让jboss eap 6.2+ 的多个war应用共享 jar 包?

weblogic有一个很贴心的功能,允许把多个war应用共同依赖的jar包,打包一个单独的war,以libary方式部署,然后各应用在weblogic.xml里声明引用该libary即可,这样可大大减少打包后的war文件尺寸,可以加快部署的上传进度,对web server而言,这类共用jar包只加载一次,也节省资源. 但是jboss下想达到类似的功能就要复杂很多了,先来一个简单的示例: 一.基础篇 1.1 假如我们先开发了一个工具库,打包后生成的mylib.jar ,为了减少各种依赖项的干扰,这

jboss EAP 6.2 + Message Drive Bean(MDB) 整合IBM Webshpere MQ 7.5

上一篇我们知道了消息驱动Bean的基本用法,实际大型分布式企业应用中,往往会采用高性能的商业Queue产品,比如IBM Webshpere MQ(目前最新版本是7.5 ),下面讲解下如何在Jboss EAP 6.2 版本上整合Webshpere MQ 7.5   一.修改jboss的standalone-full.xml a) 添加IBM的resource-adapters 找到<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1

jboss eap 6.3 域(Domain)模式配置

jboss提供了二种运行模式:standalone(独立运行模式).domain(域模式),日常开发中,使用standalone模式足已:但生产部署时,一个app,往往是部署在jboss集群环境中的,如果所有jboss server均采用standalone模式,会给运维带来极大的工作量,需要每台jboss server上逐一部署/更新,显然不适合. domain模式正是为了解决这一问题,该模式下,所有jboss server可以划分成不同的group(注:这里的jboss server并不一定

jboss CLI 命令行接口学习(适用JBOSS EAP 6.2+)

一.确认CLI所使用的端口 以domain模式为例,查看domain controller(也就是master主机)上的host.xml 1 <management-interfaces> 2 <native-interface security-realm="ManagementRealm"> 3 <socket interface="management" port="${jboss.management.native.p

网页设计师:用JS代码控制Retina图像

文章描述:Web设计师如何制作Retina图像. 苹果公司发布了更多的产品适应Retina屏幕.到目前为止,我们知道苹果设备中支持Retina屏幕技术的有"iPhone"."iPod"."iPad"和"Macbook Pro",这些设备能为用户呈现更细腻.平滑和高质量的图片效果,提高了用户的视觉体验.做为一名Web设计师如何为你的网站创建这些适合Retina显屏设备的图片呢?这就是我们今天要学的一个东东. 为什么要支持Reti

关于unity用代码控制动画的问题

问题描述 关于unity用代码控制动画的问题 我想要实现这样的效果:一个物体绕自己的y轴旋转180度,在转到一半的时候改变它的贴图.直接做成animation的话是很方便的,但是我想通过代码选择贴图资源的名称.换句话说,有没有可能在播放动画的同时(或之前)传入一个参数,这个参数即贴图资源的名称? 以下办法我已经尝试过并且觉得不适合:(1)为每张贴图做一个动画,用AnimatorContoller控制.因为贴图数量很多,每个都要做动画效率太低了.(2)全部用代码实现动画效果.这样会在后续的开发中出

滚动条-Scrollviewer如何实现代码控制滚动(平滑滚动)?

问题描述 Scrollviewer如何实现代码控制滚动(平滑滚动)? Scrollviewer.ScrollToVerticalOffset(x)函数可使滚动条立刻滚动到x像素位置,但滚动效果是直接切过去. 请问如何实现平滑滚动的效果,即像鼠标拖动滚动条一样,慢慢滚动到x位置? 解决方案 可以用动画的来实现,Animation 的double类型的. 设置好滚动条的起始值和结束值.在设置好时间,最后在触发的时候启动 就可以了