Jboss的数据源配置如下:
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>oracleDS</jndi-name>
<use-java-context>false</use-java-context>
<connection-url>jdbc:oracle:thin:@xxx.xxxx.xxx.xxx:1521:xxxx</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>dpd</user-name>
<password>dpd</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>Oracle10g</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>oracleDS</jndi-name>
<use-java-context>false</use-java-context>
<connection-url>jdbc:oracle:thin:@xxx.xxxx.xxx.xxx:1521:xxxx</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>dpd</user-name>
<password>dpd</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>Oracle10g</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
关键处在于添加use-java-context元素,其它的与普通的连接池配置没有区别; 但是要注意, 加了这个选项后,在jboss内部就不能使用这个jndi对象了
测试代码:
view plaincopy to clipboardprint?
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class TestJNDI {
private Context getInitialContext() throws NamingException {
Hashtable<String, String> environment = new Hashtable<String, String>();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
//environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming.client ");
environment.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");
return new InitialContext(environment);
}
public Connection getConnection(String dataSourceName) {
try {
Context ctx = getInitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(dataSourceName);
if(ds == null){
return null;
}
return ds.getConnection();
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestJNDI test = new TestJNDI();
Connection conn = test.getConnection("java:oracleDS");
if(conn != null){
System.out.println("success");
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from dtc_insurance_order where biz_order_id=1693");
String result;
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next()){
for(int i = 1; i <= rsmd.getColumnCount(); i++)
System.out.println("column " + i + "=" + rs.getObject(i));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("closed");
}else{
System.out.println("failed");
}
}
}
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class TestJNDI {
private Context getInitialContext() throws NamingException {
Hashtable<String, String> environment = new Hashtable<String, String>();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
//environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming.client ");
environment.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");
return new InitialContext(environment);
}
public Connection getConnection(String dataSourceName) {
try {
Context ctx = getInitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(dataSourceName);
if(ds == null){
return null;
}
return ds.getConnection();
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestJNDI test = new TestJNDI();
Connection conn = test.getConnection("java:oracleDS");
if(conn != null){
System.out.println("success");
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from dtc_insurance_order where biz_order_id=1693");
String result;
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next()){
for(int i = 1; i <= rsmd.getColumnCount(); i++)
System.out.println("column " + i + "=" + rs.getObject(i));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("closed");
}else{
System.out.println("failed");
}
}
}
上面的代码需要加上jboss的客户端库,我也不知道具体是哪些,就把%JBOSS_HOME%/lib目录和%JBOSS_HOME%/server/default/lib目录下所有的包都加到工程里了, 如果这个代码跑在jboss里面当然就更加方便了。