如何在Websphere环境中将<jee:jndi-lookup>转换为Spring JavaConfig

时间:2016-05-04 15:17:42

标签: java spring websphere jndi

我有一个旧的Spring xml配置。

<jee:jndi-lookup jndi-name="ree/configuration" cache="true" id="re-properties-config" />

在WebSphere 8中,我有一个&#34;资源环境提供商&#34;和#34;资源环境条目&#34;在JNDI名下&#34; ree / configuration&#34;。 Referenceables类是java.util.Properties。

使用xml配置一切正常。 &#34;资源环境条目&#34;来自WebSphere在Properties对象中的映射。

现在我想迁移到Spring JavaConfig。 什么是最好的解决方案?

我试试这个:

private static Properties jndiProperties() {
    Properties properties = null;
    JndiTemplate jndi = new JndiTemplate();
    try {
        properties = (Properties)jndi.lookup("ree/configuration");
        LOG.info("JNDI Properties loaded: " + properties);
    } catch (NamingException e) {
        LOG.error("NamingException for ree/configuration", e);
    }
    return properties;
}

但它因ClassCastException而失败。 javax.naming.Reference无法强制转换为java.util.Properties

2 个答案:

答案 0 :(得分:1)

您可以尝试使用此代码从返回的Reference中获取Properties:

            Reference ref = jndi.lookup("ree/configuration");
            Enumeration e = ref.getAll();
            while( e.hasMoreElements() )
            {
               RefAddr ra = (RefAddr) e.nextElement();
               properties.put( ra.getType().toLowerCase(), ra.getContent() );
            }

有关如何使用参考的更多示例,请尝试以下链接:http://www.programcreek.com/java-api-examples/javax.naming.Reference

答案 1 :(得分:0)

see有关。

您可以定义一个@Configuration类并创建一个像这样的bean。

@Bean(name = "dbDataSource")
public DataSource dataSource(@Value("${db.jndi}" String jndiName) {
    JndiDataSourceLookup lookup = new JndiDataSourceLookup();
    return lookup.getDataSource(jndiName);
}

您也可以从属性中插入JNDI,而不必将其作为输入参数,