Как JUNIT даос слоя без зависимости от текущего поставщика JNDI - PullRequest
0 голосов
/ 05 декабря 2018

Я столкнулся с новой задачей - мне нужно адаптировать свои тесты JUnit, основанные на Tomcat JNDI для WildFly 9.

Прежде всего, у меня есть свойства JNDI для источников данных PG в tomcat conf / context.xml вТег ресурса.

Теперь я могу использовать его через 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.свойства с

java.naming.factory.initial=org.springframework.jndi.JndiObjectFactoryBean

, но это также не работает.Так можно ли сделать одно решение для разных веб-серверов / поставщиков?!

...