Привет, Виктор, без каких-либо подробностей о вашем приложении. Я предполагаю, что вы работаете в контейнере сервлетов. Невозможно сделать это с помощью «чистого» приложения JAX-RS.
Однако я бы рекомендовал вам использовать CDI (Weld или OpenWebBeans). Затем вы можете использовать Deltaspike, чтобы включить контекст запроса внутри вашего задания Quartz, чтобы получить ссылку на bean-компонент с областью запроса.
Включение Weld в контейнере сервлета довольно просто
Руководство по включению контекста запроса вне HTTP-запроса доступно здесь
По умолчанию вы не можете внедрить bean-компоненты @RequestScoped в свою кварцевую работу (нет HTTP-запроса, следовательно, нет контекста запроса). Чтобы обойти это, вы можете либо включить контекст запроса, перейдя по ссылке выше, ИЛИ (и, возможно, мой подход) внедрить компоненты @Dependent с областью видимости (которые выполняют работу) в ваши компоненты JAX RS (по сути, обертки), затем вы можете легко получить ссылки к @Dependent bean-компонентам внутри вашего кварцевого задания.
Вот мой web.xml и pom.xml для запуска Weld и Jersey внутри причала вам потребуются зависимости jetty-plus, jetty-jndi и Weld.
Вот некоторая информация о настройке JNDI в причале, однако я не использую этот метод, поскольку Я запускаю причал как встроенный контейнер в приложении SE, вот фрагмент кода того, что я делаю:
String[] configurationClasses =
{
"org.eclipse.jetty.webapp.WebInfConfiguration",
"org.eclipse.jetty.webapp.WebXmlConfiguration",
"org.eclipse.jetty.webapp.MetaInfConfiguration",
"org.eclipse.jetty.webapp.FragmentConfiguration",
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration"
};
WebAppContext webapp = new WebAppContext();
webapp.setConfigurationClasses(configurationClasses);
webapp.setDescriptor("/path/to/webapp/WEB-INF/web.xml");
webapp.setContextPath("/");
webapp.setResourceBase("/path/to/webapp");
webapp.setClassLoader(Thread.currentThread().getContextClassLoader());
person
Justin
schedule
22.05.2012