Я пытаюсь внедрить DataSource в ContainerRequestFilter в TomEE [Apache Tomcat (TomEE)/9.0.20 (8.0.0-M3]. Однако независимо от того, что я делаю, возникают ошибки. .
Я вижу, что имя JNDI регистрируется в TomEE через:
org.apache.openejb.assembler.classic.Assembler.createRecipe Creating Resource(id=jdbc/auth/ReadDataSource)
Но даже когда я вручную ищу DataSource через InitialContext, я получаю ошибки при поиске. Например, вот мой образец фильтра:
@Provider
@PreMatching
public class MyFilter implements ContainerRequestFilter {
DataSource dataSource;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
try {
InitialContext initialContext = new InitialContext();
dataSource = (DataSource)initialContext.lookup("jdbc/auth/ReadDataSource");
} catch (NullPointerException | NamingException e) {
Response response = Response
.status(Status.INTERNAL_SERVER_ERROR)
.entity(e.getMessage())
.build();
requestContext.abortWith(response);
}
}
}
К сожалению, я получаю следующую ошибку:
Name [jdbc/auth/ReadDataSource] is not bound in this Context. Unable to find [jdbc]
Что я могу сделать? Я исследовал, как решить мою проблему, и многое из того, что я вижу, - это решения, специфичные для Джерси. Однако я использую TomEE, а его реализация JAX-RS — это Apache CXF1. Таким образом, трикотажное решение не сработает, если я не изменю реализацию JAX-RS, но это кажется излишним для чего-то пустякового.
Любая помощь будет принята с благодарностью.
Спасибо.