EJB вызывает метод, который позже вызывает другой EJB -> return null - PullRequest
1 голос
/ 21 июня 2011

У меня есть такая структура

@Stateless
public class CoreMainEJB implements CoreMainEJBRemote, CoreMainEJBLocal {

    @Override
    public void process(String configFileName) throws Exception {
         ...
         PackageProcessor p = new PackageProcessor();
         p.processPackage(Object something); 
    }
}

, затем в PackageProcesor.java -> не аннотируется @Stateless

public class PackageProcessor(){
    @EJB
    private GenericEJB genericEJB;

    public void processPackage(Object something){
        genericEJB.create(something);

    }
    ...
}

Внедрение GenericEJB возвращает нольВот содержимое GenericEJB

@Stateless
@LocalBean
public class GenericEJB{
     @PersistenceContext(unitName = "someWebPUnit")
     private EntityManager em;

     public void create(Object t){
         em.persist(t);
     }
}

Есть идеи, почему инъекция GenericEJB возвращает ноль?

1 Ответ

3 голосов
/ 21 июня 2011

Когда вы создаете объект, подобный этому:

PackageProcessor p = new PackageProcessor()

контейнер EJB ничего о нем не знает, контейнер не управляет жизненным циклом этого объекта, он также не может ничего внедрить, обернуть его васпекты, применять поведение транзакций.Проще говоря: для вашего сервера приложений этот объект не существует.

Конечно, если вы аннотируете PackageProcessor с помощью @Stateless и внедряете его как обычный EJB, он будет работать.Есть ли причины, по которым вы не хотите этого делать?

...