Supposons que vous ayez l'EJB après 3 interfaces/classes:Comment remplacer une méthode de bean session EJB 3 par un argument générique, si possible?
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
}
Et puis un autre haricot qui accède à la fève FooRepository
:
//...
@EJB
private FooRepository fooRepository;
public void someMethod(Foo foo)
{
fooRepository.delete(foo);
}
//...
Cependant, la méthode redéfinie est jamais exécuté lorsque la méthode de suppression de le bean FooRepository
est appelé. Au lieu de cela, seule l'implémentation de la méthode de suppression définie dans AbstractRepository
est exécutée.
Qu'est-ce que je fais de mal ou est-ce simplement une limitation de Java/EJB 3 que les génériques et l'héritage ne jouent pas encore bien ensemble?
Aujourd'hui, cela a fonctionné sans changer de ligne de code. Donc, quelque chose d'autre doit avoir mal tourné avec l'environnement d'exécution, le débogueur ou quelque chose ... Merci pour vos réponses! –