我面临一项新任务-我需要针对基于WildFly 9的Tomcat JNDI调整我的JUnit测试。
首先,我在Resource标签的tomcat conf / context.xml中具有PG数据源的JNDI属性。
现在我可以通过tomcatJNDI这样使用它了:
@Before
public void setUp() throws Exception {
String filename = "environment.properties";
Properties properties = new Properties();
InputStream input = this.getClass().getClassLoader().getResourceAsStream(filename);
properties.load(input);
String tomcat_context = properties.getProperty("tomcat.context");
TomcatJNDI tomcatJNDI = new TomcatJNDI();
tomcatJNDI.processContextXml(new File(tomcat_context));
tomcatJNDI.start();
System.setProperty("factory", org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.class.getName());
GenericXmlApplicationContext context = new GenericXmlApplicationContext();
context.load("classpath:spconfig.xml");
context.refresh();
this.objectsDao = (ObjectsDao) context.getBean("ObjectsDao");
}
它对于Tomcat很好用,但是我需要针对wildfly环境的另一种解决方案。
我正尝试使用
进行JUNIT测试@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spconfig.xml"})
但是出现此错误:
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
在那之后,我试图用
制作jndi.propertiesjava.naming.factory.initial=org.springframework.jndi.JndiObjectFactoryBean
但是它也不起作用。那么有可能针对不同的Web服务器/供应商提供一种解决方案吗?!