代码之家  ›  专栏  ›  技术社区  ›  Martin Klinke

如果可能的话,我如何用一个泛型参数覆盖EJB3会话bean方法?[闭门]

  •  5
  • Martin Klinke  · 技术社区  · 18 年前

    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
    }
    

    然后是另一个访问 FooRepository 豆子:

    //...
    @EJB
    private FooRepository fooRepository;
    
    public void someMethod(Foo foo)
    {
        fooRepository.delete(foo);
    }
    //...
    

    但是,当 食品库 豆子叫豆子。相反,只有在中定义的delete方法的实现 AbstractRepository 被执行。

    我做错了什么,或者只是Java/EJB3的一个局限性,泛型和继承还不能很好地结合在一起?

    2 回复  |  直到 10 年前
        1
  •  2
  •   ScArcher2    18 年前

    我用pojo试过了,似乎很管用。我不得不稍微修改一下你的代码。 我觉得你的界面有点不对劲,但我不确定。

    我刚刚写了一个主要方法来测试这个。 我希望这有帮助!

    public static void main(String[] args){
            FooRepository fooRepository = new FooRepositoryImpl();
            fooRepository.delete(new Foo("Bar"));
    }
    
    public class Foo
    {
        private String value;
    
        public Foo(String inValue){
            super();
            value = inValue;
        }
        public String toString(){
            return value;
        }
    }
    
    public interface Repository<E>
    {
        public void delete(E entity);
    }
    
    public interface FooRepository extends Repository<Foo>
    {
        //other methods
    }
    
    public class AbstractRespository<E> implements Repository<E>
    {
        public void delete(E entity){
            System.out.println("Delete-" + entity.toString());
        }
    }
    
    public class FooRepositoryImpl extends AbstractRespository<Foo> implements FooRepository
    {
         @Override
           public void delete(Foo entity){
              //do something before deleting the entity
                System.out.println("something before");
              super.delete(entity);
           }
    }
    
        2
  •  1
  •   Mike Deck    18 年前

    我怀疑还存在其他问题,如果您将其作为POJO进行测试,那么调试可能会更容易。