1:在JBoss中配置一个名为“FirstDS”的数据源。
2:在JBoss中部署一个Web项目,在项目中通过JNDI查找FirstDS数据源,可以查找到数据源并
能成功访问数据库。
3:但是在Java Project中却无法查找FirstDS数据源。
代码如下:
public static void main(String[] args) {
Context ctx = null;
DataSource ds = null;
Connection con = null;
Statement stmt = null;
ResultSet result = null;
Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
props.setProperty(Context.PROVIDER_URL, "127.0.0.1:1099");
try {
ctx = new InitialContext(props);
ds = (DataSource) ctx.lookup("FirstDS");
con = ds.getConnection();
stmt = con.createStatement();
result = stmt.executeQuery("select * from student");
while (result.next()) {
System.out.println(result.getInt(1) + " "
+ result.getString(2) + " " + result.getString(3));
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (result != null)
result.close();
if (stmt != null)
stmt.close();
if (con != null)
con.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
异常信息如下:
Exception in thread "main" javax.naming.NameNotFoundException: FirstDS not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:542)
at org.jnp.server.NamingServer.getBinding(NamingServer.java:550)
at org.jnp.server.NamingServer.getObject(NamingServer.java:556)
at org.jnp.server.NamingServer.lookup(NamingServer.java:296)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
解决方法:
<use-java-context> - A boolean indicating if the jndi-name should be prefixed with java: which causes the DataSource to only be accessible from within the jboss server vm. The default is true.
Configuring a DataSource for remote usage
As of jboss-4.0.0 there is support for accessing a DataSource from a remote client. The one change that is necessary for the client to be able to lookup the DataSource from JNDI is to specify use-java-context=false as shown here:
<datasources> <local-tx-datasource> <jndi-name>GenericDS</jndi-name> <use-java-context>false</use-java-context> <connection-url>...</connection-url>...
This results in the DataSource being bound under the JNDI name "GenericDS" instead of the default of "java:/GenericDS" which restricts the lookup to the same VM as the jboss server.
它说的大概意思就是:(该参数在数据源的配置文件中)
当你指定<use-java-context>的值为false时,你就可以在jboss运行的VM外的VM上查找到这个DataSource.
这个属性默认.为true
即,默认情况下你是不可以在JBOSS的VM外来查找这个数据源.