我有一个旧的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
答案 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
,而不必将其作为输入参数,