Отстраняване на грешки BIRT ODA драйвер в Eclipse SDK - NoClassDefFoundError

Всичко,

Не съм много сигурен дали това е проблем на BIRT/Eclipse SDK/разработчик...

Ние сме в процес на разглеждане на BIRT за Eclipse SDK (Indigo). Ние инвестирахме в книгата Integrating and Extending BIRT от Jason Weathersby et al. Той ви превежда през процеса на създаване на вашия първи драйвер за ODA, който по същество представлява 2 проекта за добавки: драйвер за ODA и потребителски интерфейс на драйвер за ODA. За съжаление никога не се говори за отстраняване на грешки в подробности.

Идеята е ODA драйверът да се свързва с нашето приложение, за да извлича данните. Добавих външна JAR справка за JAR файла на нашите приложения към проекта ODA Driver от Properties->Java Build Path. Това се появява под Reference Libraries в работното пространство на Eclipse. Всички референтни JAR файлове, които нашето приложение използва, също се показват под референтните библиотеки.

Тъй като нещата не работят, което ще обясня скоро, създадох също HelloWorldX Java проект в работното пространство на Eclipse SDK, който има един клас, наречен HelloThere, с един статичен метод, който е:

public static String getIt() 
{
    return "Ding Dong";
}

Добавих това като препратка към проекта на ODA Driver от Properties->Java Build Path.

И така, това, което направих...

Създаване на проекти

Създадох 2 проекта в моята IDE на Eclipse SDK. ODA драйверът съдържа препратка към JAR файла на нашето наследено приложение, който извикваме в код.

Това вече също извиква проекта HelloWorldX.

Започнете сесия за отстраняване на грешки

Добавих точка на прекъсване в Connection#open. Тази точка на прекъсване е на първия ред.

Стартирам сесията за отстраняване на грешки, като щракна върху елемента от лентата с инструменти за отстраняване на грешки. Първият път, когато ме подкани, избрах изпълнение като Eclipse Application. Това задейства нова сесия на Eclipse SDK, която мога да заредя файла на дизайнера на отчети от File->Open...

Докладът се зарежда в IDE на Eclipse SDK, както следва:

BIRT Report Eclipse

Създавам нов източник на данни, като щраквам с десния бутон върху Източници на данни и избирам Нов източник на данни. От диалоговия прозорец Нов източник на данни избирам името на моя ODA драйвер и щраквам върху Напред. Това показва диалогов прозорец с бутон Тестване на връзката.

Щраквам върху бутона Test Connection, който достига точката на прекъсване в Connection#open.

Когато прекрача следния код, получавам NoClassDefFoundError.

System.out.println(HelloThere.getIt());

Изключението също се хвърля, когато направя повикване към който и да е от наследените ни кодове във външния JAR файл, който споменах. Eclipse показва прозорец в работното пространство за ред OdaConnection.open(Properties): 267, който има Източник не е намерен и бутон с Редактиране на пътя за търсене на източник... Опитах различни комбинации за задаване на пътя на източника за нашето приложение. Щракването върху бутона ще изведе следния диалогов прозорец:

Редактиране на пътя за търсене на източник

Накратко проследяването на стека е както следва:

org.eclipse.datatools.connectivity.oda.OdaException ;
    java.lang.NoClassDefFoundError: HelloWorld/HelloThere
        at org.eclipse.datatools.connectivity.oda.profile.OdaConnectionWrapper.open(OdaConnectionWrapper.java:215)
        at org.eclipse.datatools.connectivity.oda.profile.OdaConnectionWrapper.<init>(OdaConnectionWrapper.java:59)

... (some trace omitted as big!)

Caused by: java.lang.ClassNotFoundException: HelloWorld.HelloThere
      at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
      at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
      at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
      at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
      at java.lang.ClassLoader.loadClass(Unknown Source)
      ... 49 more

Аз съм нов в Eclipse, така че, моля, бъдете нежни. Може ли някой да ми каже къде да търся или друга информация, която трябва да публикувам. Може да правя нещата напълно погрешно, но със сигурност не съм първият човек, който би искал да отстранява грешки в BIRT ODA драйвер. Прегледах целия интернет, за да намеря решение за това. Единствената публикация, която намерих за подходяща, беше във форумите на Eclipse, които така и не получиха отговор през 2007 г.!!! Вижте форумите на общността на Eclipse

РЕДАКТИРАНЕ

Поставих някакъв код за извеждане на classpath от моя ODA драйвер с помощта на System.getProperty("java.class.path",".");

D:\Software\Eclipse\eclipse-SDK-3.7-win32\eclipse\plugins\org.eclipse.equinox.launcher_1.2.0.v20110502.jar

КРАЙ НА РЕДАКТИРАНЕ

Благодаря

Андез


person Andez    schedule 20.07.2011    source източник


Отговори (1)


След като опитах всякакви решения, най-накрая го разбих.

След като проследих примера за интегриране и разширяване на BIRT CSV ODA драйвер, забелязах, че има драйвер за хибернация. Можете да изтеглите източника от сайта на Actuate.

Този драйвер беше сглобен по различен начин. Имаше настройки за манипулиране на пътя на класа, когато го създаваше чрез съветника. За съжаление пътят на класа не можа да бъде зададен във версията на Eclipse SDK, която изтеглих - Indigo. Така че реших да премина ръчно и да видя разликите.

За да направите това, трябва само да отворите MANIFEST.MF в Eclipse IDE.

раздела build.properties

Включете всички jar файлове, които искате да препратите/включите, както следва:

source.odasentinel.jar = src/
output.odasentinel.jar = bin/
bin.includes = plugin.xml,\
           META-INF/,\
           odasentinel.jar,\
           lib/activation.jar\

...

Раздел MANIFEST.MF

Задайте настройката Bundle-ClassPath да включва всички jar файлове, които искате да препратите/включите, както следва:

Bundle-ClassPath: odasentinel.jar,
 lib/activation.jar,
 lib/bsh-2.0b2.jar,
 lib/comm.jar,

Вече можете да стартирате и дебъгвате вашия ODA драйвер с Eclipse.

person Andez    schedule 20.07.2011