我们正在使用Glassfish,我们在其中设置Map类型的JNDI资源,我们定义了一些Bean工厂,之后我们可以在代码中访问(JNDI查找)这个地图。
我想对使用Spring Boot的嵌入式Tomcat测试做同样的事情,但我不知道如何。它们到处都是引用如何添加JNDI数据源而不是某些Hashmap。我试过这样的事情,但我的猜测是完全错误的。
public TomcatEmbeddedServletContainerFactory tomcatFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
Tomcat tomcat) {
tomcat.enableNaming();
return super.getTomcatEmbeddedServletContainer(tomcat);
}
@Override
protected void postProcessContext(Context context) {
ContextResource resource = new ContextResource();
resource.setName("jndiname");
resource.setType(Map.class.getName());
// for testing only
resource.setProperty("testproperty", "10");
context.getNamingResources().addResource(resource);
}
};
}
@Bean(destroyMethod="")
public Map jndiDataSource() throws IllegalArgumentException, NamingException {
JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
bean.setJndiName("jndiname");
bean.setProxyInterface(Map.class);
bean.setLookupOnStartup(false);
bean.setResourceRef(true);
bean.afterPropertiesSet();
return (Map)bean.getObject();
}
我不知道在Object工厂中传递的位置。是否可以使用嵌入式Tomcat?
答案 0 :(得分:0)
首先要做的是创建一个可以返回ObjectFactory
的{{1}}实现:
Map
然后使用public class MapObjectFactory implements ObjectFactory {
@Override
public Object getObjectInstance(Object obj, Name name,
javax.naming.Context nameCtx, Hashtable<?, ?> environment)
throws Exception {
Map<String, String> map = new HashMap<String, String>();
// Configure the map as appropriate
return map;
}
}
上的ObjectFactory
属性配置factory
:
ContextResource