2010-10-02 1 views
2

У меня есть проект 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-банку и WAR развернуты в том же EAR. Я использую архитектор JEE5, http://code.google.com/p/javaee5-maven-archetype/, чтобы создать как основной проект, так и тест. Код по умолчанию, созданный архивом, работает, и нет необходимости указывать имя JNDI в инъекции @EJB.

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

+0

'Код по умолчанию, сгенерированный файлом типа archtype, и нет необходимости указывать имя JNDI в @ EJB' Что вы добавили? Можете ли вы опубликовать полный стек? –

+0

У меня есть абстрактный DAO, в котором я вставляю контекст persistence с помощью '@ PersistenceContext'. База DAO расширена за счет всей реализации DAO.Интересно, я могу ввести '@ PersistenceContext' в неуправляемый компонент? – n002213f

+0

'Интересно ли я вставлять @PersistenceContext в неуправляемый компонент? Нет, инъекция не может произойти, так как класс неуправляем. –

ответ

1

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

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

1

Пожалуйста, проверьте ваш 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-файл и ваш bean-компонент в файл .JAR. Создайте и ушной файл, а затем разверните его.

4

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

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

Gotcha # 2: Обязательно выполняйте компиляцию с использованием Java 1.6 или выше. Это может быть сложно в Eclipse. Вы должны проверить три места в Project-> Properties, чтобы убедиться, что: Границы проекта, параметры соответствия компилятора и путь сборки.

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

  • Нет связанных вопросов^_^