2014-06-05 1 views

답변

1

개체가 생기면 해당 개체에 대한 기능을 호출 할 수 있습니다. 그러나 개체가 여전히 올바른 상태인지 확인할 수는 없습니다. 서비스 제공 업체가 해당 기능에 필요한 일부 리소스를 제대로 종료하면 어떻게됩니까?

이런 식으로 서비스를 사용하지 마십시오. 을 호출하지 않아도 서비스를 호출 할 때 서비스가 올바른 상태인지 확신 할 수 없습니다. unget(). Felix Felix SCR과 같은 기술을 사용해야합니다. 이 경우 참조가 더 이상 사용할 수 없으면 객체가 비활성화되거나 동적으로 참조가 지정되면 객체에 바인딩 해제 메소드가 호출됩니다. 그로부터 언제 서비스가 진정으로 유용한 지 알 수 있습니다.

대안 : Apache Felix iPojo, Apache Aries Blueprint 또는 ServiceTracker을 사용하여 사용하는 서비스의 이벤트를 잡으십시오.

업데이트 :

은 즉 그래서

이 서비스를 ungetting 또는 정말 서비스 사용 카운터 올바른 권리를 사용하지 않으려면하지, 전혀 차이를 할 것?

서비스를 삭제하는 것이 중요한 경우가 있습니다. 예를 들어 공급자가 서비스 개체 대신 ServiceFactory을 등록한 경우 Provider 측에서 unget 이벤트를 catch 할 수 있습니다. 이 경우 서비스에서 unget이 호출 되 자마자 자원이 해제 될 수 있습니다.

소비자 번들이 중지되었을 때 소비자 번들의 모든 서비스 참조가 검색됩니다 (unget이 호출 됨). 그러나 확실하지 않습니다.

+0

나는 Balazs가 말한 것에 동의하며 그것에 대한 방법을 호출 할 때 서비스를 계속 사용할 수 있다는 것을 확신 할 수 없다고 덧붙이고 싶습니다. 원격 메소드를 호출 할 때처럼 런타임 예외를 항상 기대해야합니다. 프레임 워크를 사용하면이 사실을 숨길 수 있습니다 (좋은 일이 아닐 수도 있음). –

+0

고마워! 나는이 SCR을 깊이 조사해야한다. 이해하기 쉬운 개념으로 보이지 않습니다. 즉, 실제로 서비스 사용 카운터를 올바르게 유지하고 싶지 않으면 서비스를 종료했는지 여부를 전혀 고려하지 않습니다. OSGi 프레임 워크가 증가 및 감소 책임을 우리에게 밀도록 대신이 카운터를 처리해야합니까? – PedroD

+0

대답을 –

관련 문제