2015-02-16 5 views
1

Я новичок в EJB и CDI. Пожалуйста, помогите мне понять, что я делаю неправильно здесь:EJB - NullpointerException при инъекции bean

Мой код, как показано ниже, и развернут в WAR на JBoss WildFly 8:

@Stateless(name = "application.listDao") 
public class ListDao extends BaseDao { 

    @Inject 
    private SomeOtherDao someOtherDao; 

    // some other methods 

} 

@Stateless 
public abstract class BaseDao { 

    @Inject 
    protected EntityManager entityManager; 

    public List find(long id) { 

     List list = new ArrayList<>(); 

     // JPA stuff to perform operations 

     return list; 
    } 

} 

Теперь я инъекционного этот ListDao в других WAR развернут на такой же экземпляр wildfly:

@RequestScoped 
public class ListReport { 

    @Inject 
    private ListDao listDao; 

    public List getReport(long id) { 

     // Here I am getting NullPointerException 
     List reportList = listDao.find(id); 

     return reportList; 
    } 

} 

Я получаю списокDao как null и, следовательно, получаю исключение NullPointerException. CDI разрешен путем размещения пустого beans.xml в папке WEB-INF.

+0

Попробуйте ввести тип интерфейса вместо типа класса. смотрите здесь http://stackoverflow.com/questions/16056881/null-pointer-exception-while-ejb-injection –

+0

Используйте '@ PersistenceContext' для инъекции' EntityManager' вместо '@ Inject'. – Everv0id

+0

Война в том же ухе? –

ответ

0

Если другая война не в том же EAR (корпоративном архиве), это невозможно. Это два совершенно разных развертывания. Эти два развертывания не могут даже видеть классы друг друга из-за изоляции загрузчика классов. Вам нужно будет упаковать две войны в одно ухо в этом случае.

+0

Можете ли вы дать мне шаги по созданию EAR с двумя существующими войнами? Я не работал над EAR. –

+0

Этот ответ неверен, вы можете добавить зависимости Inter-развертывания. См. Https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly –

2

Как указано в одном из комментариев, вы указали EntityManager, однако вы не указали никаких доказательств того, что у вас есть производитель. Не существует стандартного метода изготовления для EntityManager

+0

ОК, я удаляю материал entitymanager, просто игнорируя операции JPA. Но все же введенный ListDao получает нуль –

+0

Возможно, вы можете предоставить полную трассировку стека. –