Angenommen, Sie die folgende EJB 3 Schnittstellen/Klassen:Wie kann ich eine EJB 3-Session-Bean-Methode mit einem allgemeinen Argument überschreiben - wenn überhaupt?
public interface Repository<E>
{
public void delete(E entity);
}
public abstract class AbstractRepository<E> implements Repository<E>
{
public void delete(E entity){
//...
}
}
public interface FooRepository<Foo>
{
//other methods
}
@Local(FooRepository.class)
@Stateless
public class FooRepositoryImpl extends
AbstractRepository<Foo> implements FooRepository
{
@Override
public void delete(Foo entity){
//do something before deleting the entity
super.delete(entity);
}
//other methods
}
Und dann noch eine Bohne, die die FooRepository
Bean greift:
//...
@EJB
private FooRepository fooRepository;
public void someMethod(Foo foo)
{
fooRepository.delete(foo);
}
//...
jedoch die übergeordnete Methode nie ausgeführt wird, wenn die Löschmethode Die FooRepository
Bean wird aufgerufen. Stattdessen wird nur die Implementierung der Delete-Methode ausgeführt, die in AbstractRepository
definiert ist.
Was mache ich falsch oder ist es einfach eine Einschränkung von Java/EJB 3, dass Generika und Vererbung nicht gut zusammenspielen?
Heute funktionierte es, ohne irgendeine Linie des Codes zu ändern. Also etwas anderes muss schief gelaufen sein mit der Laufzeitumgebung, dem Debugger oder sowas ... Danke für deine Antworten! –