【发布时间】:2013-07-06 12:24:57
【问题描述】:
我想在我的应用程序自己的 XML 配置文件中定义 JNDI 查找(有点类似于 Tomcat 的context.xml),然后在我的应用程序中引用它们。然后,在后台,应用程序使用 JNDI 来查找对象以及存储在 XML 文件中的信息。
例如,给定我应用的 XML 配置文件中的以下 sn-p:
<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 对象。如何从DataSourceVO 实例配置InitialContext 实例,以便我们可以执行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?这就是它的全部吗?!?
【问题讨论】:
-
您的应用是网络应用吗?如果是,为什么不在 context.xml 中使用 JNDI?如果没有,您是否考虑过使用spring并简单地使用依赖注入?
-
谢谢@YoriKusanagi - 不,Spring 不是一个选项,不,这是一个可重用的 JAR,而不是 WAR。
-
...(所以没有
context.xml可用)。
标签: java configuration datasource jndi context.xml