jboss下配置jndi利用spring的IOC来获得
时间:2011-06-22 csdn博客 畅所宇言
来项目内用的是普通数据源.考虑没有分布式的数据访问.就使用了apache-commons-dbcp.但是后来项目内要加一个第三方的报表制作工具.该工具强制要求使用JNDI来获得连接(该死的)没办法.只有加了.显将配置步骤和一个错误做笔记如下:
1. 环境: windowsXp系统.使用的是jbossGA-4.2.2 sqlserver2000.
项目架构是 Spring+ibatis+struts.
2. 配置步骤1 . 由于jboss会自动查找server\default\deploy目录下的 **-ds.xml文件.并读取其中内容.来得到相应的DataSource,我的文件具体内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/DataSource</jndi-name>
<connection-url>jdbc:jtds:sqlserver://localhost:1433/fnx</connection-url>
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<user-name>sa</user-name>
<password>1234</password>
<metadata>
<type-mapping>MS SQLSERVER2000</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
配置步骤2 . (有部分内容来自网上) 由于使用spring来获取jndi.所以实现了FactoryBean, InitializingBean
get/set方法没加
public class DataSourceFactoryBean implements FactoryBean, InitializingBean {
/** 缓存数据源对象 */
private DataSource dataSource;
/** 是否jndi数据源 */
private boolean jndi;
/** 数据源的名字(如果是jndi数据源) */
private String jndiName;
/** jdbc驱动类(非jndi的情况) */
private String driverClassName;
/** 数据库的url(非jndi的情况) */
private String url;
/** 用户名(非jndi的情况) */
private String username;
/** 密码(非jndi的情况) */
private String password;
public void afterPropertiesSet() throws Exception {
if (this.isJndi()) {
if (!org.springframework.util.StringUtils.hasText(this.jndiName)) {
throw new IllegalArgumentException("jndiName is required");
}
} else {
if (!org.springframework.util.StringUtils
.hasText(this.driverClassName)) {
throw new IllegalArgumentException(
"driverClassName is required");
}
if (!org.springframework.util.StringUtils.hasText(this.url)) {
throw new IllegalArgumentException("url is required");
}
if (!org.springframework.util.StringUtils.hasText(this.username)) {
throw new IllegalArgumentException("username is required");
}
if (!org.springframework.util.StringUtils.hasText(this.password)) {
throw new IllegalArgumentException("password is required");
}
}
// 在初始化时就创建数据源
this.createDataSource();
}
public Object getObject() throws Exception {
DataSource ds = this.createDataSource();
return ds;
}
public Class getObjectType() {
return javax.sql.DataSource.class;
}
public boolean isSingleton() {
return true;
}
protected DataSource createDataSource() {
DataSource ds = this.dataSource;
if (ds == nu
|