Liferay Portal: модульность OSGI с JSF и EJB-CDI, которые не вводятся и не извлекаются с помощью @Resource - PullRequest
1 голос
/ 28 февраля 2020

В настоящее время я работаю над Liferay 7.1.2.ga3 CE с tomcat и просматривал раздел OSGI руководства в официальной документации. Вот этот: Документы

Я решил дать ему шанс сделать самый простой проект. Я создал Liferay Workspace в своей идее IntelliJ и добавил некоторый компонент, описанный в турориале.

Проблема в том, что он либо не внедряет, либо внедряет, но не получает зависимость, потому что в этом случае в Для потребителя переменная _applicationServices всегда имеет значение NULL.

РЕДАКТИРОВАТЬ: Я задавал тот же вопрос на официальном форуме Liferay здесь: Вопрос в Liferay.org

Вот код :

API:

@ProviderType
public interface ApplicationServices {
    String getSearchFiltersForRegister(String registerCode);
}

Поставщик:

@Component(
    immediate = true,
    property = {
    },
    service = ApplicationServices.class
)
public class ApplicationServicesImpl implements ApplicationServices {
    @Override
    public String getSearchFiltersForRegister(String registerCode) {
        return "OSGI modularity made service";
    }
}

Потребитель:

@ManagedBean(name = "registerSearchBean")
@ViewScoped
@Component(
        immediate = true,
        property = {
                "osgi.command.scope=getSearchFiltersForRegister",
                "osgi.command.function=getSearchFiltersForRegister"
        },
        service = Object.class
)
public class RegisterSearchBean {

        public String message;

        @Reference
        private ApplicationServices _applicationServices;

        @PostConstruct
        public void initBean(){
                getSearchFiltersForRegister();
        }

        public void getSearchFiltersForRegister(){
                ApplicationServices applicationServices=_applicationServices;
                message=applicationServices.getSearchFiltersForRegister("asd");
        }

        public String getMessage() {
                return message;
        }

        public void setMessage(String message) {
                this.message = message;
        }
}

ПРИМЕЧАНИЕ: Я также пытался отделить модуль потребления в другом Класс и использовать его в этом bean-компоненте без успеха.

Дополнительная информация:

  • Проект представляет собой gradle LiferayWorkaspace.
  • API и сервисы модули генерируются с помощью плагина Liferay в папке модулей.
  • Модуль JSF генерируется с помощью архетипа maven с поддержкой gradle в папке «war».
  • Зависимости правильно определены, и все они правильно развернуты на Liferay Server. По крайней мере, это так .... при развертывании не появляются ошибки для отсутствующих классов.

Что я делаю не так и почему службы приложений всегда равны нулю?

...