2014-05-15 13 views
0

엔티티 "MyUser"가 있고 거기에 내 논리를 모두 저장하고 싶지 않다고 가정 해 봅시다. 내가 문서를 이해함에 따라 서비스 로케이터에 로직을 추가 할 수 있습니다. 내 요청 컨텍스트에서 서비스 로케이터를 연결 :GWT RequerstFactory - 엔티티에서 서비스 위치 지정자로 코드 추출

@Service(value = MyUser.class, locator = MyServiceLocator.class) 
public interface MyUser extends RequestContext { 

    InstanceRequest<MyUserProxy, Void> setName(String name); 

    Request<Void> changePasswordAndSendMail(String password); 

} 

그리고이 같은 로케이터 정의 :

public class MyServiceLocator implements ServiceLocator { 
    @Override 
    public Object getInstance(Class<?> clazz) { 
     try { 
      return clazz.newInstance(); 
     } catch (InstantiationException e) { 
      throw new RuntimeException(e); 
     } catch (IllegalAccessException e) { 
      throw new RuntimeException(e); 
     } 
    } 

    public static void changePasswordAndSendMail(String password){ 

     // Do something 
    } 


} 

을하지만 컴파일러와 불평 :

Could not find domain method similar to myPackage.MyUser changePasswordAndSendMail(java.util.String) 

추출 할 수있는 방법이 있나요 엔티티의 논리?

답변

1

로직을 MyUser 외부에 두려면 해당 로직이있는 클래스로 @Service의 값을 변경하면됩니다 (이 질문에서 @ProxyFor은 사용자 실수입니다).

해당 클래스의 메소드가 static이 아닌 경우 해당 클래스의 인스턴스를 반환하려면 ServiceLocator이 필요합니다. 서비스 로케이터 자체는 이외의 다른 작업을 수행하며 서비스 메서드가 포함 된 서비스을 찾습니다. 방법 staticMyUser에, 그냥 다른 클래스를 만들고 (물론 findMyUser 방법을 제외하고) 거기 static 방법을 이동하고 새 클래스를 가리 키도록 @Service을 변경 한 상태에서 마이그레이션

.

InstanceRequest 메서드는 여전히 InstanceRequest의 첫 번째 형식 인수로 참조 된 프록시의 @ProxyFor 주석이 가리키는 클래스에서 인스턴스 메서드를 호출합니다. 당신의 예에서, setName (@ProxyFor(MyUser.class)의 주석을 붙일 수 있고 가정 MyUserProxy) MyUser에서 인스턴스 메서드

+0

좋아, 내가 만든 새로운 클래스가 될 필요가있다, (거기에 내'changePasswordAndSendMail()'방식을 이동 @Service'내 RequestContext를 연결 value = NewClass.class'를 입력 한 다음 유효성 검사가이 메소드를 찾았지만 IDE는'MyUser'에'setName()'이 없다는 것을 경고합니다. – jan