JPA Наследование и EJB полиморфизм

У меня есть веб-приложение Java EE 6, использующее управляемые контейнером транзакции и распространяемый контейнером контекст сохраняемости через

@PersistenceContext
private EntityManager em;

На уровне JPA у меня есть стратегия наследования, гдеMyExtendedClassA а такжеMyEntendedClassB оба расширяютсяabstract MyClass.

я используюstateless facade классы обслуживания для реализации доступа к данным через методыfind, findAll, merge, persist, remove:

@Stateless
public class MyExtendedClassAFacade {
    @PersistenceContext
    private EntityManager em;
    public void persist(MyExtendedClassA a) {
        // ...
    }
    // other methods
}

Все идет нормально. Теперь я должен реализовать полиморфизм наbehavior расширенных классов. Это поведение заключается в управлении некоторыми другими объектами в базе данных, поэтому требуется PersistenceContext (и, следовательно, мне нужно использовать другиеStateless EJBs):

@Stateful
public class MyBean {

    @EJB
    private MyClassFacade myClassFacade;   // stateless facade service class

    public void doSomething() {
        for (MyClass c : myClassFacade.findAll()) {
            // here I need to perform operations on the db. 
            // The implementation differs on each extended class.
            // I want to avoid a brute-force coding like:
            if (c.getClass().equals(MyExtendedClassA.class)) {
                @EJB MyExtendedClassAFacade myClassFacadeA;
                myClassFacadeA.doSomething((MyExtendedClassA) c);
            } else if (c.getClass().equals(MyExtendedClassB.class))
                @EJB MyExtendedClassBFacade myClassFacadeB;
                myClassFacadeB.doSomething((MyExtendedClassB) c);
            }
            // Instead, I would like to write something like:
            @EJB AnotherStatelessBean asb;
            asb.doSomething(c);
        }
    }
}

Есть ли какой-либо шаблон абстракции, который я могу использовать для этой цели?

Ответы на вопрос(1)

Ваш ответ на вопрос