Class ReferralException
Class ReferralException
public abstract class ReferralException
extends NamingException
이 추상 클래스는 referral(참조) 예외를 나타내는 데 사용돼요. referral 예외는 LDAP v3 서버 등이 반환하는 referral에 대한 응답으로 생성돼요. 서비스 공급자는 getReferralInfo()와 getReferralContext()(및 적절한 생성자와/또는 대응하는 "set" 메서드)에 대한 구현을 제공함으로써 ReferralException의 하위 클래스를 제공해요. 다음 코드 샘플은 ReferralException을 어떻게 사용하는지 보여줘요.
while (true) {
try {
bindings = ctx.listBindings(name);
while (bindings.hasMore()) {
b = bindings.next();
...
}
break;
} catch (ReferralException e) {
ctx = e.getReferralContext();
}
}
ReferralException은 추상 클래스예요. 구체적 구현이 동기화·직렬화 속성을 결정해요. getReferralContext() 메서드에 전달되는 환경 매개변수는 호출자가 소유해요. 서비스 공급자는 그 객체를 수정하거나 참조를 유지하지 않지만, 그 클론에 대한 참조를 유지할 수 있어요.
ReferralException
protected ReferralException(String explanation)
제공된 설명(explanation)을 사용해 ReferralException의 새 인스턴스를 생성해요. 다른 모든 필드는 null로 설정돼요.
- Parameters: explanation - 이 예외에 대한 추가 세부 정보. null일 수 있음
- See Also: Throwable.getMessage()
ReferralException
protected ReferralException()
ReferralException의 새 인스턴스를 생성해요. 모든 필드는 null로 설정돼요.
getReferralInfo
public abstract Object getReferralInfo()
이 referral과 관련된 정보(예: URL)를 가져와요. 프로그램은 이 정보를 사용자에게 보여주거나 검사해 referral을 계속할지, 아니면 referral을 계속하려면 추가 정보를 제공해야 하는지 결정할 수 있어요.
- Returns: 이 referral과 관련된, null이 아닌 referral 정보
getReferralContext
public abstract Context getReferralContext()
throws NamingException
메서드를 계속할 컨텍스트를 가져와요. referral이 컨텍스트 연산 중에 직접 만나든, 검색 열거 중에 간접적으로 만나든, referral 예외는 연산을 계속할 컨텍스트를 제공해야 해요. referral 컨텍스트는 ReferralException을 던진 컨텍스트의 환경 속성을 사용해 만들어져요. 연산을 계속하려면 클라이언트 프로그램은 원래 호출과 같은 인자로 메서드를 다시 호출해야 해요.
- Returns: 메서드를 계속할, null이 아닌 컨텍스트
- Throws: NamingException - 네이밍 예외가 발생했을 때. referral 처리를 계속하려면
retryReferral()또는skipReferral()을 호출하세요
getReferralContext
public abstract Context getReferralContext(Hashtable<?,?> env)
throws NamingException
환경 속성을 사용해 메서드를 계속할 컨텍스트를 가져와요. referral이 컨텍스트 연산 중에 직접 만나든, 검색 열거 중에 간접적으로 만나든, referral 예외는 연산을 계속할 컨텍스트를 제공해야 해요. referral 컨텍스트는 env를 환경 속성으로 사용해 만들어져요. 호출자가 referral 컨텍스트에 다른 환경 속성을 사용해야 할 때는 인자가 없는 오버로드 형태 대신 이 메서드가 사용되어야 해요. 예를 들어 referral 컨텍스트를 만들기 위해 참조된 서버에 다른 인증 정보를 공급해야 할 때 그렇게 해야 할 수 있어요. 연산을 계속하려면 클라이언트 프로그램은 원래 호출과 같은 인자로 메서드를 다시 호출해야 해요.
- Parameters: env - referral 컨텍스트를 가져올 때 사용할, null일 수 있는 환경. null이면 어떤 환경 속성도 사용되지 않아요
- Returns: 메서드를 계속할, null이 아닌 컨텍스트
- Throws: NamingException - 네이밍 예외가 발생했을 때. referral 처리를 계속하려면
retryReferral()또는skipReferral()을 호출하세요
skipReferral
public abstract boolean skipReferral()
처리하려고 하는 referral을 버려요. 이 메서드에 대한 호출 뒤에는 다른 referral의 처리를 계속할 수 있도록 getReferralContext 호출이 따라와야 해요. 다음 코드 조각은 전형적인 사용 패턴을 보여줍니다.
} catch (ReferralException e) {
if (!shallIFollow(e.getReferralInfo())) {
if (!e.skipReferral()) {
return;
}
}
ctx = e.getReferralContext();
}
- Returns: 더 처리할 referral이 남아 있으면 true, 그렇지 않으면 false
retryReferral
public abstract void retryReferral()
현재 처리 중인 referral을 재시도해요. 이 메서드에 대한 호출 뒤에는 현재 referral을 재시도할 수 있도록 getReferralContext 호출이 따라와야 해요. 다음 코드 조각은 전형적인 사용 패턴을 보여줍니다.
} catch (ReferralException e) {
while (true) {
try {
ctx = e.getReferralContext(env);
break;
} catch (NamingException ne) {
if (! shallIRetry()) {
return;
}
// modify environment properties (env), if necessary
e.retryReferral();
}
}
}