Я пишу контрольные примеры для Jersey WS и застрял при инициализации JNDI.Получение исключения «javax.naming.NameNotFoundException: имя jdbc не связано в этом контексте».
public class LoginServicesTest extends JerseyTest {
@Override
protected Application configure() {
return new ResourceConfig(LoginServices.class);
}
@BeforeClass
public static void setUpClass() throws Exception {
try {
// Create initial context
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.naming.java.javaURLContextFactory");
System.setProperty(Context.URL_PKG_PREFIXES,
"org.apache.naming");
InitialContext ic = new InitialContext();
ic.createSubcontext("java:");
ic.createSubcontext("java:comp");
ic.createSubcontext("java:comp/env");
// Construct DataSource
OracleConnectionPoolDataSource ds = new OracleConnectionPoolDataSource();
ds.setURL("jdbc:oracle:thin:@dbs-host.comp.com:1525:USRDEV");
ds.setUser("DBName");
ds.setPassword("password");
ic.bind("java:comp/env", ds);
} catch (NamingException ex) {ex.printStackTrace();}
}
@Test
public void acceptAgreementTest() {
Response response = target("/user/acceptAgreement").request().get();
System.out.println(response);
}
}
Код создания источника данных:
public DataSource getDataSource() {
DataSource dataSource = null;
String jndiName = null;
try {
jndiName = "jdbc/usrdb";
Context env = (Context) initialContext.lookup("java:comp/env");
dataSource = (DataSource) env.lookup(jndiName);
}catch(Exception e) {
LOGGER.error("ServiceLocator", e);
e.printStackTrace();
}
return dataSource;
}
Пожалуйста, предложите, как я могу выполнить тестовое покрытие для Jersey WS, имеющего подключение к БД через JNDI.Цените любые указатели, чтобы решить проблему.Застрял плохо.