2

我想在我的应用程序自己的 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从该表创建?这就是它的全部吗?!?

4

1 回答 1

0

试试 Spring http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/jdbc.html#jdbc-connections,见 14.3.1 DataSource

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

<context:property-placeholder location="jdbc.properties"/>

如果 Spring 不是一个选项,那么您可以使用 Properties 配置数据源

Properties props = new Properties();

... load from properties file or XML 

BasicDataSource ds = new BasicDataSource();
for(Entry e : props.entrySet()) {
    ds.addConnectionProperty((String)e.getKey(), (String)e.getValue());
}
于 2013-07-09T03:25:49.633 回答