Играя с Кваркус, я пытаюсь внедрить ServletContext
в свое приложение:
@Controller
@Path("/greeting/")
@RequestScoped
public class GreetingResource {
@Inject
ServletContext servletContext;
}
Он отлично компилируется, но на этапе упаковки quarkus-maven-plugin дает сбой:
[1] Unsatisfied dependency for type javax.servlet.ServletContext and qualifiers [@Default]
- java member: exampleapp.GreetingResource#servletContext
- declared on CLASS bean [types=[java.lang.Object, exampleapp.GreetingResource], qualifiers=[@Default, @Any], target=exampleapp.GreetingResource]
Мое приложение зависит от io.quarkus:quarkus-отдых, который извлекает io.quarkus: quarkus-отлив, который, в свою очередь, извлекает io.undertow:undertow-сервлет.
Я ожидаю, что любое из расширений Undertow обеспечит инъекцию ServletContext
, но, видимо, мое предположение неверно... Есть идеи?
Небольшая возня показала мне, что для этого типа нет метода производителя... Мне помог следующий фрагмент кода:
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
import javax.inject.Singleton;
import javax.servlet.ServletContext;
import io.undertow.servlet.handlers.ServletRequestContext;
@Singleton
public class ServletContextProducer {
@Produces
@RequestScoped
public ServletContext servletContext() {
return ServletRequestContext.current().getCurrentServletContext();
}
}
@Inject ServletContext работает только в среде Java EE. Quarkus интегрирует JAX-RS, поэтому вы можете получить доступ к экземпляру ServletContext с помощью JAX-RS @Context.
@Controller
@Path("/greeting/")
@RequestScoped
public class GreetingResource {
// javax.ws.rs.core.Context
@Context
ServletContext servletContext;
// OR
@GET
@Path("/test")
@Produces({ MediaType.TEXT_PLAIN })
public Response test(@Context ServletContext servletContext) {
// return ...
}
}
Ваш способ тоже работает, но он явно зависит от Undertow API.
Обновлено:
В Quarkus версии 0.17.0+ добавлена поддержка внедрения ServletContext с использованием аннотации CDI @Inject. См. этот https://github.com/quarkusio/quarkus/pull/2850