操作环境
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的配置文件,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