2015-12-24 5 views
0

В проекте весной я могу использовать аннотацию @Autowired.Как использовать аналоговую @Автоматизированную аннотацию в JavaEE (@Inject)?

@Service 
public class DefaultUserService implements UserService { 
... 
     @Autowired 
     private UserDao userDao; 

Но я не понимаю, как это делается в проекте JavaEE. Я нашел:

@ Inject частный AvayaDao avayaDao;

Но мой avayaDao является NULL. Я пробовал добавить аннотацию

@Default 
public class AvayaService { 
... 
@Inject 
private AvayaDao avayaDao; 

но не помогло. Это идентификатор мой Dao:

public interface AvayaDao extends BaseDao<AvayaSdr> { 

    List<AvayaSdr> getAll(); 
    void insertCdr(AvayaSdr avayaSdr); 
} 

Это Моя_служба:

@Default 
public class AvayaService { 
    private static AvayaService instance; 

    @Inject 
    private AvayaDao avayaDao; 

    public synchronized static AvayaService me() { 
     if (instance == null) { 
      instance = new AvayaService(); 
     } 
     return instance; 
    } 

    public Set<String> selectAllLoadedAVAYAcmCDRFiles() { 
     Set<String> result = new HashSet<>(); 
     List<AvayaSdr> resultList = avayaDao.getAll(); 
     for (AvayaSdr avayaSdr : resultList) { 
      result.add(avayaSdr.getHashValue()); 
     } 
     return result; 
    } 

    public void insertCdr(String fileHash) { 
     AvayaSdr avayaCmCdr = new AvayaSdr("", fileHash, 0); 
     avayaDao.insertCdr(avayaCmCdr); 
    } 

java.lang.NullPointerException 

ответ

1

Либо AvayaDao должен быть EJB и аннотированный с @Stateless или @Singleton или использовать CDI инъекции и пустой beans.xml файл (http://docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html), если вы используете Java EE 6. В Java EE 7 должен быть установлен атрибут bean-discovery-mode = "all" (https://docs.oracle.com/javaee/7/tutorial/cdi-adv001.htm).

ОБНОВЛЕНИЕ 1:

Enterprise Java Beans является POJOs аннотированным с @Stateless, @Statefull или @Singleton, которые управляются с помощью EJB контейнера внутри сервера приложений. Они могут получить доступ к конкретным конкретным службам, таким как TimerService, контексту безопасности и таким аспектам, как поддержка транзакций и мониторинг. Сервер Java без состояния также объединяется сервером приложений.

UPDATE 2:

@Tiny Ваше право, но если AvayaDao не EJB и приложение содержит beans.xml файл, где перехватчики или другие специфические КДИ Pojos регистрируются в боб-открытие-режим по умолчанию является " аннотированный ", и инъекция не будет работать с не аннотированным POJOS и явно задает значение« все »(http://www.adam-bien.com/roller/abien/entry/when_your_di_breaks_bean). Другим вариантом будет использование beans.xml, если вы явно знаете, что ваше приложение развертывается только в средах JAVA EE 7.

+0

AvayaDao должен быть EJB. КАКИЕ??????????? – user5620472

+0

"* В Java EE 7 должен быть установлен атрибут' bean-discovery-mode = "all" '. *" "* Must *"? Java EE 7 даже не задает файл 'beans.xml'. – Tiny

+0

@Tiny Если обновил мой ответ во второй раз :) –

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

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