Я знаю, что это обычная проблема, но создание нового потока на всякий случай, если кто-то застрял, как я, даже после того, как попробовал некоторые из параметров, уже описанных в документах.OSGi ClassNotFoundException при загрузке драйвера базы данных
Я развернул пакет osgi (Say Bundle B), у которого есть весь код, связанный с доступом к уровню данных. В основном, когда доступ к сервису из этого пакета, он создает соединение JDBC только в первый раз, загружая драйвер. Драйвер развернут как еще один завернутый пакет sqljdbc 4.0. (Скажите Bundle C)
Теперь у меня есть Bundle TestApp (Say Bundle A), который создает экземпляр вышеупомянутого метода обслуживания из Bundle B. Итак, поток здесь - Bundle. Код создает экземпляр экспортированной службы Bundle B, которая в перейдите в класс Bundle C's Driver.
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)
Отдельный загрузчик классов делает здесь пробку, но как преодолеть ситуацию здесь для меня. Я попробовал добавить DynamicImport-Package к пакетам A, B, попробовал создать пакет фрагментов, как здесь, здесь https://gist.github.com/rotty3000/1291842, но все же такое же исключение. Продолжает.
Если бы кто-нибудь столкнулся с такой проблемой, это было бы большой помощью, если бы вы могли дать мне пошаговый подход, чтобы избавиться от этой проблемы.
Спасибо заранее и с новым годом.
Какой код у вас есть в вашем комплекте (только показать соответствующие строки). Что он делает в том месте, где происходит исключение? –
Из Bundle A, PremiumService service = новый PremiumServiceImpl(); Из Bundle B PremiumServiceImpl dao.getJdbcConnection(), который в свою очередь вызывает Class.forName(), From Bundle C, sqljdbc4-4.jar, который является завернутым пакетом –
Когда я отлаживал приложение в этой строке Class.forName (driverClassName) , загрузчик классов был загрузочным загрузчиком класса с пакетом в виде имени связки A и, хотя эта строка кода находится в проекте Bundle B (DataServices). Значение имени класса драйвера также подтверждается как правильное. –