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


     

    操作环境 



    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.2standaloneconfiguration的文件夹中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;

        //驱动名称。如:mysqloracle

        private String driver;

       

        /*

         * DATASOURCES.Conection 连接设置

         */

        //连接字符串

        private String connURL;

        //是否使用JTA

        private boolean useJTA;

       

        /*

         * DATASOURCES.Security 安全设置

         */

        //连接dsusername及password

        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进程的client

            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());

                // 连接数据源password

                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的配置文件。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


     

     

  • 相关阅读:
    mac PHP安装imageMagic扩展
    使用AWS Lambda,API Gateway和S3 Storage快速调整图片大小
    composer Changed current directory to没反应
    mongodb批量update更新数据
    php 判断图片文件的真实类型
    C#选择文件、选择文件夹、打开文件(或者文件夹)
    C#连接数据库
    湿寒阳虚体质如何艾灸
    女人艾灸穴位
    四个穴位掌控全身健康
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6906816.html
Copyright © 2020-2023  润新知