나는 이것이 일반적인 문제라는 것을 알고 있지만 이미 문서에서 설명한 옵션 중 일부를 시도한 후에도 나처럼 멈춘 경우를 대비하여 새 스레드를 만듭니다.
데이터 레이어 액세스와 관련된 모든 코드가 포함 된 osgi 번들 (Say Bundle B)을 배포했습니다. 기본적으로이 번들의 서비스 메소드에 액세스하면 드라이버를로드하여 처음으로 만 JDBC 연결을 작성합니다. 드라이버는 sqljdbc 4.0의 다른 래핑 된 번들로 배포됩니다. (Say Bundle C)
이제 Bundle B에서 위에서 언급 한 서비스 메서드의 인스턴스를 생성하는 Bundle TestApp (Say Bundle A)가 있습니다. 따라서 여기 흐름은 Bundle A 코드가 Bundle C의 Driver 클래스에 차례로 액세스하는 Bundle B의 내 보낸 서비스 인스턴스를 생성합니다.
Caused by: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver not found by DataServices [417]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1556)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:77)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1993)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
개별 클래스 로더가 여기서 probelm을 만들고 있지만 극복하는 방법은 여기에있는 상황입니다. 여기 expained으로 조각 번들 만드는 시도, A, B 번들로 DynamicImport-패키지를 추가하는 시도 https://gist.github.com/rotty3000/1291842 하지만 여전히 같은 예외를. 계속합니다.
누군가가 그러한 문제를 발견했다면이 문제를 제거하기 위해 단계별 접근 방식을 제공 할 수 있다면 큰 도움이 될 것입니다.
미리 감사 드리며 모두의 새해 복 많이 받으세요.
드라이버 접근 방식은 OSGi에서 제대로 작동하지 않습니다. 대신 DataSource를 사용하십시오. msdn의 예를 참조하십시오 . new를 사용하여 데이터 소스를 간단히 만들 수 있습니다. 이렇게하면 클래스 로딩 문제를 방지 할 수 있습니다.
실제 DB 공급자와 분리하려면 DB 공급자가 DataSource를 생성 할 수있는 DataSourceFactory를 노출해야 함을 정의하는 OSGi jdbc 사양을 사용할 수 있습니다.
Pax-jdbc는 광범위한 db 공급자에 대해이 사양을 지원합니다. 설정 만 사용하여 데이터 소스를 OSGi 서비스로 만들 수 있는 pax-jdbc-config 모듈이 있습니다. 따라서 코드에서 서비스를 주입하면 완료됩니다. 또한 pax-jdbc-config는 풀링을 처리하고 DataSource XA를 인식하도록 할 수 있습니다. 따라서 완전히 생산 가능한 DataSource를 생성합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다