Итак, мы создали webapp, используя Grizzly/Jersey. Вы запускаете созданный файл jar, а затем предоставляете конечные точки REST, которые позволяют извлекать данные из базы данных и создавать новые записи и т. Д. По той или иной причине мы теперь хотим перейти на веб-сервер, например Payara или Glassfish или что-то еще. У меня проблемы с работой. Сейчас он собирается на войну и отправляется в Пайару. Следуя Deploying jersey web services on Payara 4 doesn´t expose methods, я получил хотя бы признание, что есть конечные точки. Однако они полагаются на внедренный EntityManager, который мы определяем/связываем (вместе с его зависимостями) в подклассе ResourceConfig, который не загружается, поэтому он сбой. Кто-нибудь знает, как загрузить ResourceConfig? Кроме того, что-нибудь еще, что нужно сделать, чтобы заставить это работать?Convert Grizzly/Jersey to Payara
ответ
Если вы собираетесь ответ от вашего связанного поста
@javax.ws.rs.ApplicationPath("API_PATH_FOR_JAXRS")
public class SampleApplication extends Application {
}
Это могло бы объяснить поведение, которое вы видите. Пустой Application
, аннотированный @ApplicationPath
, заставит бутстрап Джерси сканировать путь класса для классов @Path
и @Provider
и зарегистрировать эти классы.
Но вы используете ResourceConfig
, чтобы сделать всю свою регистрацию самостоятельно. Просто бывает, что ResourceConfig
на самом деле является подклассом Application
. Поэтому вместо создания нового подкласса Application
, чтобы разместить аннотацию @ApplicationPath
, просто наденьте свой подкласс ResourceConfig
.
Если вы не были подклассифицированы ResourceConfig
ранее, т.е.
ResourceConfig config = new ResourceConfig()
.packages("...")
.register(...);
Тогда просто подкласс сейчас
@ApplicationPath("...")
public class AppConfig extends ResourceConfig {
public AppConfig() {
packages("...");
register(...);
}
}
Спасибо! Я не понял, что ResourceConfig является подклассом приложения. К сожалению, это все еще говорит мне, что есть неудовлетворенные зависимости. В конструкторе ResourceConfig мы регистрируем AbstractBinder, в функции 'configure()' мы вызываем 'bindFactory()' несколько раз, чтобы настроить фабрики для создания 'EntityManager'. Он работает в Grizzly/Jersey, но в настоящее время не работает в Payara; любая идея почему? Код запускается при развертывании, но после регистрации AbstractBinder он все еще говорит, что «deploy is failing» ... «Неудовлетворенные зависимости для типа EntityManager» .... – Erhannis
Добавьте журнал в конструктор ResourceConfig. Он регистрируется? –
ли вы, что ответ в связанном посте говорит? (Подсказка: ResourceConfig расширяет приложение). –
Вам также необходимо убедиться, что у вас есть зависимость 'jersey-container-servlet'. –