Разрешение не должно происходить из-за ошибки в контейнере для инъекций - PullRequest
2 голосов
/ 02 октября 2010

У меня есть проект EJB3 для развертывания на JBoss 5.1.0 GA. У меня есть EJB-объекты без гражданства, которые вводятся в другие бобы и сервлеты без состояния.

Я использую аннотацию @EJB без каких-либо параметров для внедрения EJB-компонентов (у меня есть тестовый проект только для имитации внедрения, который работает).

Когда я пытаюсь выполнить развертывание, я получаю сообщение об ошибке ниже.

"Caused by: java.lang.RuntimeException: java.lang.IllegalStateException: Resolution should not happen via injection container"

Я искал, но не могу найти / определить причину ошибки.

Обновление: 1

И EJB jar, и WAR развернуты в одном EAR. Я использую JEE5 archtype, http://code.google.com/p/javaee5-maven-archetype/, чтобы создать основной проект и тест. Код по умолчанию, сгенерированный типом архива, работает, и нет необходимости указывать имя JNDI в инъекции @EJB.

Обновление: 2 Полная трассировка стека развертывания, http://pastebin.com/CknXie13

Ответы [ 4 ]

4 голосов
/ 28 октября 2012

Вот часто упускаемый вопрос: убедитесь, что вы используете имя локального интерфейса, а не реализацию при объявлении типа класса EJB в сервлете или веб-службе. Таким образом, mappedName в JBOSS будет указывать на привязку jndi для реализации, а тип класса в объявлении будет указывать на интерфейс. Например:

@EJB(mappedName="Foo/EmployeeManagerBean/local")
EmployeeManagerLocal manager;

Поправка № 2: убедитесь, что вы компилируете с Java 1.6 или выше. Это может быть сложно в Eclipse. Вы должны проверить три места в Project-> Properties, чтобы убедиться: аспекты проекта, параметры соответствия компилятора и путь сборки.

1 голос
/ 22 апреля 2011

Используйте атрибут mappedName аннотации @EJB при внедрении в сервлет

Атрибут должен содержать имя jndi для ejb.

1 голос
/ 06 марта 2012

Пожалуйста, проверьте вашу web.xml версию. Версия 2.4 или более ранняя не поддерживает внедрение зависимостей.

Вот примерный отрывок версия = "2,5"

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

Вы кладете свой сервлет в файл .WAR? Поместите ваш сервлет в файл .WAR, а ваш бин в файл .JAR. Создайте файл ear и разверните его

0 голосов
/ 01 ноября 2010
...