유지 관리가 쉽고 새로운 번들을 더 빨리 구현하기 위해 사용자 정의 OSGI 플랫폼에서 Glassfish로 이동하려고합니다.OSGI GlassFish의 번들 간 통신
마이그레이션하는 동안 문제가 발생했습니다. 따라서 BundleA와 BundleB는 서비스 참조를 통해 통신해야합니다. 참조 용 인터페이스는 사용자 정의 플랫폼의 기본 번들 인 BundleC에 있습니다. BundleC 없이는 플랫폼 자체를 포함하여 아무 것도 시작되지 않습니다. 그래서 BundleC에 인터페이스를 넣었습니다. BundleB는 인터페이스를 구현하고 시작할 때 서비스로 등록하는 클래스를 가지고 있으며 BundleA는 해당 서비스를 사용합니다.
글래스 피쉬 (Glassfish)로 이동하면서 이미 적절한 OSGI 플랫폼을 제공하고 있기 때문에 이전 BundleC가 필요하지 않습니다. BundleC를 제거한 후에 클래스를 내보내고 가져 오거나 시작을 위해 하나의 번들을 포함하는 것 이외에 적절한 번들 통신을 제공하는 방법은 무엇입니까? BundleA와 BundleB를 결합하지 않고 "거의"독립적으로 만들고 싶습니다.
이 사건에 대한 해결책이 있습니까? 또는 BundleC가 여전히 중간웨어로 필요합니까? 이 2 수명주기가 의미
Service
+-------+ +-------+
| A |---get------|>---register-------| B |
+-------+ . +-------+
! . !
! [service package] !
! . !
! +-------+ !
\----import-->| C |<---import-------/
+-------+
:
어쨌든 그 번들 C를 제거 할 수 있습니까? 이 구현 이외의 다른 것들을 의미합니까? – stephanruhl
물론 원하는 경우 번들 C를 제거 할 수 있습니다. 번들 B에서 인터페이스를 정의해야합니다. B가이를 정의하고 구현하기 때문에 C를 제거 할 수 있습니다. 그러나 인터페이스의 구현 (또는 버전)이 여러 개있을 것으로 예상되는 경우 C의 인터페이스 정의를 그대로 두는 것이 합리적입니다.이 패턴은 모듈화를 용이하게하고 묶음 의존성 그래프를 깨끗하게 유지합니다. – axiopisty
귀하의 의견과 답변을 주셔서 감사합니다, 나는 세 번째 번들을 제거하고 또한 두 번들 사이의 커플을 제거합니다 glassfish에 jms와 함께하기로 결정했습니다 :) – stephanruhl