动态配置 JBOSS ( eap 6.2 ) 数据源

时间:2022-03-06 06:26:02

 

操作环境 



windows + jboss eap 6.2 + MyEclipse 10.0 


      项目用的是jboss eap 6.2,作为Red公司升级后的eap稳定版。相比之前的 AS 系列,无论是安全性和集群的稳定性,加上天然的出厂配置上都好了很多。 对于开发者来讲,省去了很多工作。



配置远程接口


 

  <interface name="management">

            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>

  </interface>

 

<socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>

 

 

 

在jboss企业版的jboss-eap-6.2\standalone\configuration的目录中standalone.xml 用于配置NativeManagement Client接口配置文件,默认如上。也可以自定义配置,

如下**系统配置。

 

 

  <interface name="management">

            <inet-address value="${jboss.bind.address.management:192.168.24.125}"/>

  </interface>

 

<socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>

 


注入数据




DataSourceEntity dsEntity = new DataSourceEntity();

        // 连接字符串

        dsEntity.setConnURL("java:jboss/datasources/KsMysqlDS");

        // 数据源名称

        dsEntity.setDsName("KSDScfltest");

        dsEntity.setDriver("mysql");

        dsEntity.setEnabled(true);

        dsEntity.setJdniName("java:jboss/datasources/" + dsEntity.getDsName());

        dsEntity.setMaxPoolSize(20);

        dsEntity.setMinPoolSize(5);

        dsEntity.setUseJTA(true);

        dsEntity.setUsername("root");

        dsEntity.setPassword("root");

        dsEntity.setTimeout(3600);

        try {

            createDateSource(dsEntity);

        } catch (Exception e) {

            System.out.println(e.toString());

        }

 

 

 

 

public class DataSourceEntity {

    /*

     * DATASOURCES.Attribute 属性设置

     */

    //数据源名称

    private String dsName;

    //jndi名称

    private String jdniName;

    //是否启用

    private boolean isEnabled;

    //驱动名称,如:mysql\oracle

    private String driver;

   

    /*

     * DATASOURCES.Conection 连接设置

     */

    //连接字符串

    private String connURL;

    //是否使用JTA

    private boolean useJTA;

   

    /*

     * DATASOURCES.Security 安全设置

     */

    //连接ds用户名及密码

    private String username;

    private String password;

   

    /*

     * DATASOURCES.Pool 连接池设置

     */   

    //最小最大连接池

    private int minPoolSize;   

    private int maxPoolSize;

    //空闲时间

    private int timeout;

   

    public int getTimeout() {

        return timeout;

    }

    public void setTimeout(int timeout) {

        this.timeout = timeout;

    }

    public DataSourceEntity(){

       

    }

    public DataSourceEntity(String dsName,String jdniName,boolean isEnabled,String connURL,boolean

            useJTA,String username,String password,int minPoolSize,int maxPoolSize){

       

    }

    public String getDsName() {

        return dsName;

    }

    public void setDsName(String dsName) {

        this.dsName = dsName;

    }

    public String getJdniName() {

        return jdniName;

    }

    public void setJdniName(String jdniName) {

        this.jdniName = jdniName;

    }

    public boolean isEnabled() {

        return isEnabled;

    }

    public void setEnabled(boolean isEnabled) {

        this.isEnabled = isEnabled;

    }

    public String getDriver() {

        return driver;

    }

    public void setDriver(String driver) {

        this.driver = driver;

    }

    public String getConnURL() {

        return connURL;

    }

    public void setConnURL(String connURL) {

        this.connURL = connURL;

    }

    public boolean isUseJTA() {

        return useJTA;

    }

    public void setUseJTA(boolean useJTA) {

        this.useJTA = useJTA;

    }

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

    public int getMinPoolSize() {

        return minPoolSize;

    }

    public void setMinPoolSize(int minPoolSize) {

        this.minPoolSize = minPoolSize;

    }

    public int getMaxPoolSize() {

        return maxPoolSize;

    }

    public void setMaxPoolSize(int maxPoolSize) {

        this.maxPoolSize = maxPoolSize;

    }

   

   

}

 

 


简单的pojo配置数据,这些从JBoss Mananager 可以看到一些默认的配置


动态添加



/**

     *

     * @Title: createDateSource

     * @Description: TODO(动态添加数据源)

     * @param @param dsEntity 设定文件 数据源实体

     * @return void 返回类型 void

     * @throws IOException

     * @throws

     * @author cfl

     * @date 2015年3月13日

     */

    public static void createDateSource(DataSourceEntity dsEntity) throws IOException {

       

        //连接jboss进程的客户端

        ModelControllerClient client =  ModelControllerClient.Factory

                                        .create(InetAddress.getByName("127.0.0.1"), 9999);

        //操作数据源节点

        ModelNode op = new ModelNode();

     

       

        try {

            

            op.get("operation").set("add");

           

            // 数据源名称

            String dsname = dsEntity.getDsName();   

            // 在datasources下面添加数据源名称为dsname的子节点data-source

            op.get("address").add("subsystem", "datasources").add("data-source", dsEntity.getDsName());

            // 设置jndi查找名称

            op.get("jndi-name").set(dsEntity.getJdniName() + dsEntity.getDsName());

            // 设置数据源类

            //op.get("datasource-class").set("com.mysql.jdbc.jdbc2.optional.MysqlXADataSource");

            // 设置驱动名称

            op.get("driver-name").set(dsEntity.getDriver());           

            op.get("use-java-context").set("true");

            // 数据源连接池名称

            op.get("pool-name").set(dsEntity.getDsName());

            // 连接池timeout

            op.get("Idle Timeout").set(dsEntity.getTimeout());

            op.get("jta").set(true);

            op.get("connection-url").set(dsEntity.getConnURL());

            // 连接数据源名称

            op.get("user-name").set(dsEntity.getUsername());

            // 连接数据源密码

            op.get("password").set(dsEntity.getPassword());

            // 连接池大小

            op.get("max-pool-size").set(dsEntity.getMaxPoolSize());

            op.get("min-pool-size").set(dsEntity.getMinPoolSize());

           

         

      //启用该数据源,默认关闭
            op.get("enabled").set(true);

            // 执行设置

            ModelNode result = client.execute(op);

 

            System.out.println("----------" + result.toString() + "---------");

           

        } finally {

           

            client.close();

           

        }

    }

 

 

 

 

 



































































效果图



动态配置 JBOSS ( eap 6.2 ) 数据源


动态配置 JBOSS ( eap 6.2 ) 数据源

动态配置 JBOSS ( eap 6.2 ) 数据源

实际上改变的是来自jboss的配置文件,standalone.xml 。查看standalone.xml内部可以看到在datasources的子节点中多出了一个子节点KSDScfltest。归根结低其实我们操纵的还是xml文件,也可能是在dom4j上层的包装。这里暂时还没有看到jboss官方给出的源码,所以暂时也不可得知准确性。在datasources同级的节点上,还有一个xa-datasources。查阅了一些外文的资料。大体的意思就是说,对于datasource来讲,xa-datasource能够在不同数据源支持事务;而datasource仅仅是单数据源事务可控。



* [1] API地址:  https://docs.jboss.org/author/display/AS71/The+native+management+API