2015-09-16 4 views
1

Я пробовал инъекцию CDI и инъекцию EJB без учета состояния в диалоговом окне Rivr. Они не работают. Я также попытался JNDI поиск из EJBs через имя Global JNDI, но я получаю следующее сообщение об ошибке (обратите внимание, я использую Java: глобальный, но я получаю это сообщение):EJB или CDI в Nu Echo Rivr (библиотека Java VoiceXML)

операции по JNDI на Java: комп/имя env не может быть завершено, потому что текущий поток не связан с компонентом приложения Java Enterprise Edition. Это условие может возникнуть, если клиент JNDI, использующий имя java: comp/env, не встречается в потоке запроса на серверный запрос. Убедитесь, что приложение Java EE не запускает JNDI-операции с именами java: comp/env в статических блоках кода или в потоках, созданных этим приложением. Такой код не обязательно запускается в потоке запроса серверного приложения и поэтому не поддерживается операциями JNDI для java: имена comp/env.

Есть ли все-таки я могу вставить или найти CDI @Named или EJB в диалоговом окне Rivr?

благодаря Игнасио

+0

Я не знаком с Ривром, но с [страницы документации] (https://github.com/nuecho/rivr/wiki/Getting-Started) Я не вижу связи библиотеки с платформой Java EE. Чтобы получить доступ к EJB и CDI-компонентам, вам нужно запустить приложение как WAR или EAR на сервере приложений JavaEE. Можете ли вы опубликовать некоторые фрагменты кода о том, как вы используете Rivr и как вы хотите внедрить EJB с помощью JNDI? – OndrejM

+0

Кажется, что более подходящий вопрос заключается в том, как вы развертываете свое приложение на основе rivr? –

+0

Привет, приложение запускается как стандартная война. Проблема не была связана с тем, как я запускаю приложение Rivr, поскольку я использовал сервер приложений JEE7 и Injecting CDI и EJB успешно в других местах моего кода. Проблема заключалась в том, что диалоговые окна по умолчанию Rivr запускаются в потоке из контекста JEE или Servlet, поэтому EJB недоступны даже в дереве JNDI. Я только что опубликовал решение, надеясь, что он может помочь кому-то другому. – icordoba

ответ

1

Я рассмотрел пример Весна в Rivr поваренную книгу и обнаружил, что DialogFactories выполнены в ServletThread. Это позволило мне выполнить стандартный поиск JNDI с использованием имени глобального JNDI и передать EJB в создаваемый диалог.

Команда Rivr подтвердила это по электронной почте, и теперь я успешно получаю доступ к EJB.

Я не мог выполнять стандартные инъекции @Inject или @EJB, но традиционное решение JNDI работало для меня.

Смежные вопросы