Prevayler 배포판에 포함 된 데모는 객체를 생성하거나 업데이트하기 위해 몇 개의 문자열 (또는 그와 유사한 간단한 코드)을 명령 생성자로 전달하는 방법을 보여줍니다. 문제는 많은 필드가있는 MyObject라는 개체가 있다는 것입니다. CreateMyObject 명령을 모두 수동으로 전달해야한다면 고통이 될 것입니다.Prevayler 명령으로 복잡한 객체 작업하기
그래서 내가 생각한 대안은 내 비즈니스 객체 자체를 명령에 전달하는 것이지만 복제본에 매달리는 것입니다 (명령에 BO를 직접 저장할 수 없음을 명심하십시오). . 물론이 명령을 실행 한 후, 내가 전달 된 원본 폐기해야합니다 필요가
public class CreateMyObject implements TransactionWithQuery {
private MyObject object;
public CreateMyObject(MyObject business_obj) {
this.object = (MyObject) business_obj.clone();
}
public Object executeAndQuery(...) throws Exception {
...
}
}
을 Prevayler wiki는 말한다 :
거래는 직접 객체 참조를 수행 할 수 없습니다 (포인터) 비즈니스 개체. 이것은 초심자의 함정이기 때문에 침례 문제로 알려졌습니다. 트랜잭션이 저널에 직렬화 된 후 실행을 위해 deserialize되면 객체 참조는 더 이상 의도 한 객체를 참조하지 않기 때문에 - 직접 참조 된 객체는 직렬화에 의해 복사되기 때문에 직접 객체 참조가 작동하지 않습니다 방법! 따라서 트랜잭션은 참조하려는 오브젝트에 대해 일종의 문자열 또는 숫자 식별자를 가져와야하며 실행될 때 오브젝트를 검색해야합니다.
나는 내가 가지고있는 ... 나는 "직접 객체 포인터"문제를 해결 점점됩니다 개체에-통과,하지만 난 여전히 좋은 생각인지 여부를 모르는