2014-11-20 4 views
0

클래스 A를 osgi의 클래스 A로 캐스팅 할 수없는 문제가 발생합니다. 포인트는이 클래스 A가 다른 번들뿐만 아니라 생성 된 곳에서도 익스포트되지 않는다는 것입니다. 내 보낸 패키지의 POM에는 "A"가 나와 있으므로 A가 내보내지지 않습니다. 아직도 우리는 문제를 얻는다. 번들을 다시 설치하면 작동합니다. 문제를 재현하고 갑자기 다시 돌아온다. 어떤 아이디어.osgi 동일한 클래스이지만 클래스 캐스팅 예외 코드

클래스는 엔티티 클래스와 내부에 -하지 우리가

받는다는 - 번들 - 플러그인에서

다른 프로젝트에

<Private-Package> 
    com.xxx.yyy.entity.* 
</Private-Package> 
<Export-Package> 
    !com.xxx.yyy.entity.* 
</Export-Package> 
+0

우리는 자바를 사용하여 jboss-fuse에서 실행 중입니다. – Samar

+0

클래스 개체가 == 인 경우에만 동일한 클래스입니다. 즉, object1.getClass() == object2.getClass()입니다. 클래스가 정확하게 동일한 클래스 파일에서로드 된 경우 VM에 문제가되지 않습니다. –

+0

내보내기에 대한 매니페스트 파일을 확인할 수 있습니까? Maven 설정을 기반으로 내 보낸 것이 아니라 실제로 매니페스트에 없다고 가정합니다. –

답변

0

우리는 우리가 문자열 클래스를 가지고 기술을 사용하여 유사한 문제가 있었다 클래스의 묶음에 직접 배선하지 않고 캐시합니다.

번들 A 및 번들 T (기술)이 있다고 가정 해 보겠습니다. 번들 A가 업데이트되었지만 번들 A가 처음 시작될 때로드 된 클래스는 여전히 번들 T의 캐시에 있습니다.

OSGi 컨테이너에 번들을 업데이트하는 기술이 있으면 그들의 재시작. 하나의 전형적인 경우는 기술이 클래스에 대한 바이트 코드 조작을 원할 때입니다. Bundle Weaving Hook을 구현하지만, 클래스 로딩을 잡을 수 있으려면 마법 기술 번들 이전에 시작된 관련 번들을 모두 업데이트해야합니다. 이러한 마법 기술의 예로 Apache Aries Proxy가 있습니다.

Btw : 스택 추적 및 일부 소스 코드는 어떤 기술에서 문제가 발생 하는지를 많이 알 수 있습니다.