Dziedziczenie JPA i polimorfizm EJB

Mam aplikację WWW Java EE 6 używającą transakcji zarządzanych przez kontener i kontekstu trwałości propagowanego przez kontener

@PersistenceContext
private EntityManager em;

W warstwie JPA mam strategię dziedziczenia, gdzieMyExtendedClassA iMyEntendedClassB oba rozciągają sięabstract MyClass.

używamstateless facade klasy usług do implementacji dostępu do danych za pomocą metodfind, findAll, merge, persist, remove:

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

Jak na razie dobrze. Teraz muszę zaimplementować polimorfizm nazachowanie rozszerzonych klas. To zachowanie polega na zarządzaniu niektórymi innymi obiektami w bazie danych, więc potrzebuje PersistenceContext (i dlatego muszę użyć innychStateless EJB):

@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);
        }
    }
}

Czy jest jakiś wzór abstrakcji, którego mogę użyć do tego celu?

questionAnswers(1)

yourAnswerToTheQuestion