次の EJB 3 インターフェイス/クラスがあるとします。
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
}
そして、Bean にアクセスする別のFooRepository
Bean :
//...
@EJB
private FooRepository fooRepository;
public void someMethod(Foo foo)
{
fooRepository.delete(foo);
}
//...
ただし、FooRepository
Bean の delete メソッドが呼び出されたときにオーバーライド メソッドが実行されることはありません。代わりに、で定義されている削除メソッドの実装のみAbstractRepository
が実行されます。
私は何を間違っていますか、それともジェネリックと継承がまだうまく連携していないというのは、単に Java/EJB 3 の制限ですか?