2013-07-03 3 views
-3

OSGi의 다양한 백엔드 시스템 번들을 통해 패킷의 데이터 흐름을 점검해야합니다.OSGi에서 번들 사이의 데이터 흐름을 추적하는 방법

패킷은 '게이트웨이 번들'을 통해 들어온 다음 처리되는 여러 번들을 거칩니다. 내가해야할 일은이 다른 번들을 통해 데이터 흐름을 "모니터"하는 다른 번들을 만드는 것입니다. 다른 묶음들이 없다는 것을 정말로 알고 있다면.

어떻게 접근합니까?

+0

Camel과 일부 대기열을 사용하여 구성 요소간에 메시지를 라우팅 할 수 있습니까? – blank

답변

0

공용 API 경계에서 호출을 차단해야합니까?

하나의 접근법은 interceptor pattern입니다. Java에서이 작업을 수행하는 일반적인 방법은 AOP를 사용하는 것입니다.

이미 스프링을 사용하고 있습니까? 그렇다면 조사 할 수있는 다양한 AOP 맛이 있습니다.

코드가 직접 메서드 호출을하고 있다고 가정합니다. 그렇다면 대기열을 사용하라는 123x의 제안은 코드의 주요 리팩토링을 필요로하므로 좋은 단기 해결책은 아닐 것입니다.

+0

나는 팀의 일부분 일뿐입니다. 실제 구현은 아직까지 진행되지 않았습니다. 먼저 더미 시스템에서 데이터 모니터링을 수행하고 점진적으로 더미 번들을 실제 시스템으로 대체해야합니다. 나는 또한 봄이 무엇인지 알지 못하고 오직 OSGi가 실제로 무엇인지를 배웠다. 또한 AOP는 내가 오늘 들었던 새로운 개념이었다. – Spyral

+0

어떤 OSGi 컨테이너를 사용하고 있습니까? 어떤 Java 라이브러리를 사용합니까? 현재 솔루션을 구축 할 도구가 이미있을 수 있습니다. – SteveD

1

바이트 코드 수준에서 일부 주요 재 작성을 제외하고는 가능하지 않습니다. OSGi에서 서비스를 얻거나 다른 번들에서 객체를 직접 인스턴스화하면 해당 객체에 자유롭게 액세스 할 수있다. 번들 사이에는 프록시가 없으며, OSGi 자체는 메소드 호출이 번들 경계를 넘을 때 전혀 모른다.

어쩌면 처음부터이 단계로 돌아가고 싶은지 물어보십시오. 달성하고자하는 것이 무엇입니까?

+0

나는 이것을하고 싶지 않다. 나는 이것을해야만한다. 제가 주어진 과제입니다. 나는 '관찰자'번들을 만들고 다른 번들은 관찰자 번들에게 메모를 할 때마다 알리도록하고 싶다. 이것은 구현하기가 훨씬 쉬울 것입니다. 그러나 그들은 "아니오, 우리는 백엔드가 당신이 만들어야 할 모듈에 대한 지식을 갖기를 원하지 않습니다.".. 내가 생각할 수있는 유일한 해결책은 AOP와 비슷한 것이었지만 나는 그렇지 않다. AOP에 익숙하고 OSGi에 익숙하지 않은 사람도 있습니다 .. 그리고 AOP를 이해하면 올바른 솔루션이라고 생각하지 않습니다. – Spyral

+0

좋아요, 고객이하려고하는 것에 대한 문제를 이해하도록 도와야합니다. , 그들의 근본적인 필요가 인 무슨을 운동하십시오 .... –

0

다른 번들로 등록 된 OSGi 서비스를 통해 데이터 흐름이 진행되는 경우 모든 서비스에 대해 java.lang.reflect.Proxy 개체를 만들고이 개체를 최대 SERVICE_RANKING 인 OSGi 서비스 (동일한 OBJECTCLASS 및 원래 속성과 동일한 속성)로 등록 할 수 있습니다. 이 경우 모든 통화는 먼저 서비스로 이동 한 다음 원래 서비스로 전달할 수 있습니다.

관련 문제