2013-02-27 3 views
4

Платформа: JBoss AS 7.1.1.@Inject не работает EJB называет свой метод

У меня есть фасонный метод, который должен вызвать другой метод одного и того же компонента, но должен пройти через контейнер EJB.

@Stateless 
public class OrderManager { 
    @Resource 
    SessionContext ctx; 
    @Inject 
    MailUtil mm; 
    Logger logger = Logger.getLogger("Test"); 

    public void method1() { 
     if (mm == null) { 
      logger.info("MailUtil is null"); 
     } 

     ctx.getBusinessObject(OrderManager.class).method2(); 
    } 

    @Asynchronous 
    public void method2() { 
     if (mm == null) { 
      logger.info("MailUtil is null"); 
     } 
    } 
} 

К сожалению, введенная переменная mm равна нулю в методе2(). Хотя внутри метода1() существует правильно введенная переменная mm.

Является ли это дефектом в JBOss, или я делаю что-то неправильно? Благодарю.

+0

Вы пытались впрыснуть объект непосредственно вместо использования SessionContext.getBusinessObject? –

+0

Да, я попробовал инъекцию с помощью @EJB. Тот же результат. – RajV

+0

Май [этот вопрос и его ответы] (http://stackoverflow.com/questions/12198983/ejb-asynchronous-does-not-work-in-same-class) help. –

ответ

0

Согласно Pete Muir, это ошибка, однако мы не уверены, исправлено или нет. Попытка новой версии JBoss (построить ее из источника) будет работать. Если это все еще проблема, создайте bug report.

+0

Я создал простой тестовый пример, который, кажется, работает сейчас в 7.1.1, а также 7.2, странно! Попытка исправить код с ошибкой в ​​7.2 займет немного больше времени. – RajV

1

То же самое произошло для меня, используя WebSphere 8.5.5.5. Сам инъецируемый компонент был нулевым в его впрыснутых бобов.

Решение состоит в том, чтобы изменить второй метод от private до public.