어떻게 재정의 EJB3 세션 콩 방법으로 일반적인 주장 가능한 경우에는 모두가?[마감]

StackOverflow https://stackoverflow.com/questions/14801

문제

이 있다고 가정은 다음 EJB3 개의 인터페이스/클래스:

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);
}
//...

그러나,다른 무엇보다 더 중요한 방법을 실행하지 않을 때 삭제 방법 FooRepository 콩 라고 합니다.대신만의 구현을 삭제하는 방법에 정의된 AbstractRepository 이 실행됩니다.

내가 뭘 잘못된 또는 그것은 단순히 제한 Java/EJB3generics 및 상속이라 함께 아직?

도움이 되었습니까?

해결책

나는 그것을 시도한 pojo 및 작동하는 것 같다.나는 코드를 수정하는 비트입니다.나는 생각한 귀하의 인터페이스트,하지만 나는 확실하지 않다.

정"Foo"었다 구체적인 유형,그러나 그렇지 않으면 내가 할 수 있는 몇 가지 더 많은 테스트를 위한 당신.

나는 그냥을 쓴 주요 방법을 이 테스트합니다.이 도움이 되었으면 좋겠습니다!

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

다른 팁

을 작성할 수 있습니 단위 테스트에 대한 FooRepository 클래스로 사용 POJO.는 경우에는 예상대로 작동한 다음 나는 익숙하지 않는 어떤 이유는 다르게 기능 안 컨테이너입니다.

내가 심는 다른 무언가가있에는 것은 아마도 쉽게 디버깅을 테스트하는 경우로 POJO.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top