我想在我的应用程序自己的 XML 配置文件(有点类似于 Tomcat 的context.xml
)中定义 JNDI 查找,然后在我的应用程序中引用它们。然后,在后台,该应用程序使用 JNDI 使用存储在 XML 文件中的信息来查找对象。
例如,给定我应用的 XML 配置文件中的以下片段:
<app>
<!-- lots of stuff -->
<dataSource name="jdbc/myDB"
maxActive="50" maxIdle="30" maxWait="10000"
username="mysqluser" password="mysqlpassword"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/myDB"/>
<!-- lots of stuff -->
</app>
然后,在我的应用程序中:
public class DataSourceProvider {
public DataSource lookupDataSource(String name) {
DataSource dataSource = null;
try {
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("Database");
} catch (NamingException e) {
// Handle...
}
return dataSource;
}
}
DataSourceProvider dsp = new DataSourceProvider();
DataSource myDB = dsp.lookupDataSource("myDB");
我如何将这两个概念联系在一起?假设<dataSource/>
XML 元素被读入一个DataSourceVO
对象。如何InitialContext
从实例配置DataSourceVO
实例,以便我们可以执行 JNDI 查找?提前致谢!
更新:我发现了这个例子:
try{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
String securityPrincipal = domain + "\\" + user;
env.put(Context.SECURITY_PRINCIPAL, securityPrincipal);
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.PROVIDER_URL, "ldap://" + domainController);
ctx = new InitialDirContext(env);
} catch (AuthenticationException ex) {
ex.printStackTrace();
} catch(NamingException nex){
nex.printStackTrace();
}
这就是我要找的吗?这样,我可以将我的 XML 读入一个Hashtable
(或类似的),然后InitialContext
从该表创建?这就是它的全部吗?!?