URLClassLoader

0

Witam

Czy ktoś wie jak w dynamicznie ładowanym pliku .jar (za pomocą URLClassLoader'a) znaleźć klasę, która implementuje określony interfejs, np w sterowniku JDBC znaleźć klasę która implementuje interfejs java.sql.Driver.

Z góry dzięki

pozdrawiam

0

Chyba nie jest latwo. Musisz leciec URL po URL, i dla kazdego z nich listowac sobie wszystkie klasy (jesli dany url to katalog, jest latwo, jesli to jar, to musialbys za pomoca JarFile i JarEntry to robic; musisz umiec sprawdzic czy dany url to katalog, string, czy costam jeszcze, np cos z neta - tu z listowaniem moze byc gorzej, i pewnie by trzeba sciagnac lokalnie?), i sprawdzac reflekcja czy implementuja dany interfejs (za pomoca getSuperclass, getInterfaces i powownywania z np. javax.sql.Driver.class).
Nie znam innego sposobu, jesli jest z checia sie naucze.

0

Dzięki za info, jak uda mi się rozwiązać ten problem to wrzuce kod tutaj

pozdrawiam

0

Witam

Znalazłem częściowe rozwiązanie problemu, dla sterownika JDBC. Otóż w tym pliku .jar w folderze META-INF znajduje się folder 'services', w którym z kolei znajduje się plik 'java.sql.Driver'. W tym pliku jest nazwa klasy, która implementuje interfejs java.sql.Driver dla danego sterownika. Sprawdzałem tylko dla trzech sterowników (MySQL, postgreSQL i MSSQL) ale myśle że tak jest ze wszystkimi. Jak ktoś zna lepszy sposób będe wdzięczny jeśli zechce sie podzielić swoją wiedzą na ten temat.

Pozdrawiam

0

No to jest wykorzystanie odkrywania uslug w javie, zdaje sie od javy 5 to istnieje. Aby tak zadzialalo dla jdbc, musi to byc sterownik zgodny z jdbc4, i runtime takze jdbc4 (jdk5). Nie jest to do konca dynamiczne bo wpisujesz ta klase jednak, myslalm ze o takie cos Ci chodzi, bo robisz jakas architekture pluginowa czy cos, i chcesz je naprawde dynamicznie odkrywac. Ale w sumie mozesz to zaadoptowac dla swoich potrzeb, i w sumie mysle ze jest duzo latwiejsze i lepsze niz to co ja wymyslilem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1