osdir.com
mailing list archive
Mozy Online Backup: 2GB Free. Automatic. Secure.

Subject: Re: UnsatisfiedLinkError, dll already loaded - msg#00195

List: java.czech

Date: Prev Next Index Thread: Prev Next Index
On Thursday 24 of November 2005 14:31,
jnejedly-lGykP6lMTpSlVyrhU4qvOw@xxxxxxxxxxxxxxxx wrote:
> Má knihovnu DLL kterou volám z Javy (JNI). Např. takto
>
> public class MYDll {
> public static void main(String [ ] args) {
> MYDl dll = new MYDll();
> }
> ...
> public static native String Hello();
> static {
> System.loadLibrary("mydll");
> }
> }
>
> a někde v kódu pak zavolám
>
> MYDll.Hello();
>
> Pokusy a omyly jsem zjistil, že DLL musí být někde v Library Path , mám ji
> ve C:\Windows\System32
>
> Ve vývojovém prostředí (JDeveloper) vše funguje, Problém v deployi na
> aplikační server Oracle AS 10g. První deploy aplikace je v pořádku, jakmile
> ale chci nahrát novější verzi naší aplikace (undeploy staré + deploy nové)
> obdržím po spuštění výjimku:
>
> java.lang.UnsatisfiedLinkError: Native Library C:
> \WINDOWS\system32\MYDll.dll already loaded in another classloader
> at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1525)
> at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1485)
> at java.lang.Runtime.loadLibrary0(Runtime.java:788)
> at java.lang.System.loadLibrary(System.java:834)
> at MYDll.<clinit>(MYDll.java:19)
> ...
> ...
> at java.lang.Thread.run(Thread.java:534)
>
> Z téhle výjimky se nedokážu zotavit jinak než restarem celého OC4J na
> aplikačním serveru.

No nejdřív musím říct, že cpát JNI na aplikační server je IMHO pěkná prasárna
a appserver to IMHO pěkně degraduje, ale to jen tak na okraj. Asi mate dobrý
důvod takovouto prasárnu udělat.

Přiznám se, že nevím, jak se zachová Wokenní aplikace při upgradu knihovny.
IMHO si bude stále držet tu stávající, takže se na tu novou nedostane. Takže
pro načtení knihovny stejně potřebujete restartovat proces, což JDeveloper
určitě dělá taky, neboť aplikace v něm neběží přímo, ale běží v nové instanci
JVM.

Potom by stálo za pokus načíst tuto knihovnu ve dvou odlišných EARech. Pokud
se to nepovede, můžete zkusit vnutit DLLko nějak přímo AppServeru. Pokud se
to povede (pokud ne, jste v kyblu nebo se musite vic snazit vnutit knihovnu
defaultnimu classloaderu), zkuste nahodit v jednom serveru nejprve první app
se starší verzí DLL a poté s novější. Pokud i toto, projde, pak je to záhada.
Pokud neprojde, je jasné, že se vám to nepodaří.

Jinak tato vyjimka tvrdi, ze se snazite nacist jiz jednou nactenou knihovnu,
jenomze byla nactena jiz neexistujicim classloaderem. Jestli je toto chovani
spravne ci nikoli, buh sud, protoze kdyz se juknete do ClassLoader.java,
doctete se:
synchronized (loadedLibraryNames) {
if (loadedLibraryNames.contains(name)) {
throw new UnsatisfiedLinkError
("Native Library " +
name +
" already loaded in another classloader");
}


Takže už je to doufám jasnější. Nepomůže-li ani google, nepomůže ani
svěcená :-)
--
Oto 'tapik' Buchta, tapik-aiBFbcymABNWk0Htik3J/w@xxxxxxxxxxxxxxxx
Senior Engineer, Systinet Corp,
http://www.systinet.com



Was this page helpful?
Yes No
Thread at a glance:

Previous Message by Date: click to view message preview

Re: UnsatisfiedLinkError, dll already loaded

jnejedly-lGykP6lMTpSlVyrhU4qvOw@xxxxxxxxxxxxxxxx wrote: Pokusy a omyly jsem zjistil, že DLL musí být někde v Library Path , mám ji ve C:\Windows\System32 Tohlke se da i nekde docist, tuism v on-line dokumentaci od SUNu. Ve vývojovém prostředí (JDeveloper) vše funguje, Problém v deployi na aplikační server Oracle AS 10g. První deploy aplikace je v pořádku, jakmile ale chci nahrát novější verzi naší aplikace (undeploy staré + deploy nové) obdržím po spuštění výjimku: java.lang.UnsatisfiedLinkError: Native Library C: \WINDOWS\system32\MYDll.dll already loaded in another classloader at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1525) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1485) at java.lang.Runtime.loadLibrary0(Runtime.java:788) at java.lang.System.loadLibrary(System.java:834) at MYDll.<clinit>(MYDll.java:19) ... ... at java.lang.Thread.run(Thread.java:534) Uplne stejny problem mam u TomCatu. Ten ma primo v RELEASE-NOTES napsano: ======================= JNI Based Applications: ======================= Applications that require native libraries must ensure that the libraries have been loaded prior to use. Typically, this is done with a call like: static { System.loadLibrary("path-to-library-file"); } in some class. However, the application must also ensure that the library is not loaded more than once. If the above code were placed in a class inside the web application (i.e. under /WEB-INF/classes or /WEB-INF/lib), and the application were reloaded, the loadLibrary() call would be attempted a second time. To avoid this problem, place classes that load native libraries outside of the web application, and ensure that the loadLibrary() call is executed only once during the lifetime of a particular JVM. Tohle je samozrejme v primem rozporu s tvrzenim v JavaDocu pro Runtime.loadLibrary() volany ze System.loadLibrary(): http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Runtime.html#loadLibrary(java.lang.String) If this method is called more than once with the same library name, the second and subsequent calls are ignored. Bohuzel pravdu ma dokumentace TomCatu, druhe zavolani se neignoruje, a vyprodukuje UnsatisfiedLinkError. Jedine reseni je dat tridy, ktere pouzivaji nativni knihovny, do specialniho jaru, ktery se da do nejakeho classloaderu, ktery je nebude znovu nacitat. V pripade Tomcatu do $CATALINA_BASE/shared/lib, u Oracle budete muset najit neco podobneho. Makub -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Supercomputing Center Brno Martin Kuba Institute of Computer Science email: makub-8qz54MUs51PtwjQa/ONI9g@xxxxxxxxxxxxxxxx Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -------------------------------------------------------------- smime.p7s Description: S/MIME Cryptographic Signature

Next Message by Date: click to view message preview

UnknownHostException

Dobry den, najednou mne Netbeans zacaly hlasit nasledujici chybu a nemuzu se z nich a ani z jinych Java programu (a nefunguje ani JavaWebStart) dostat na internet. java.net.UnknownHostException: mystation.mydomain.cz: mystation.mydomain.cz at java.net.InetAddress.getLocalHost(InetAddress.java:1292) at org.netbeans.CLIHandler.initialize(CLIHandler.java:480) at org.netbeans.CLIHandler.initialize(CLIHandler.java:284) at org.netbeans.Main.execute(Main.java:159) at org.netbeans.Main.main(Main.java:39) Zajimave je, ze kdyz se prihlasim pod rootem, tak to jde. Spis si myslim, ze se stalo neso v systemu (Mdk10.1), ale vubec si nemuzu vzpomenout na nic, co by to mohlo zpusobit. Nesetkal jste se s tim nekdo? Dekuji za pripadne nasmerovani Karel

Previous Message by Thread: click to view message preview

Re: UnsatisfiedLinkError, dll already loaded

Zdravim Este 2 zaujimave pikosky bokom od hlavneho problemu povodneho tazatela ohladom JNI: - nativnu kniznicu musite loadovat v triede v ktorej sa nachadzaju nativne metody v nej definovane... Skoda, stacilo by S tim nesouhlasim. V jedne webove aplikaci jsme nativni knihovnu nahravali uplne jinou tridou nez ve ktere byly nativni metody. Ta trida a tedy i nativni knihovna byla nahravana uplne jinym classloaderem (shared classloader tomcatu, prave proto aby slo delat redeploy webove aplikace, samozrejme bez redeploye nativni knihovny). Musite ale samozrejme zajistit aby se inicializacni kod v te jine tride nahravajici knihovnu spustil predtim nez volate nativni metody (nahravani tridy do classloaderu a jeji staticky inicializator se spousti az pri prvem pozadavku na danou tridu, ne pri startu JVM). Provozovano na Sun JDK 1.3 i 1.4 a bez problemu to bezelo na Linuxu i Windows (s patricnou verzi so nebo dll samozrejme). No a unload nativni knihovny pryc z bezici JVM je asi dost platformove zavisly, umim si predstavit platformy ktere to nedokazou (i kdyz nevim zda takove opravdu existuji/neexistuji, nejak jsem to nikdy nestudoval). A preto... kodujte cisto.. 100% pure java... :-))) Zkuste najit nebo napsat 100% pure Java knihovnu pro lemmatizaci ceskych slov ;-) Vlastik -- Ing. Vlastimil Elias Qbizm technologies, a.s. vedouci analytik ... the art of software. ____________________________________________________________________ www.qbizm-technologies.cz www.qbizm.cz www.qbizm-services.cz

Next Message by Thread: click to view message preview

UnknownHostException

Dobry den, najednou mne Netbeans zacaly hlasit nasledujici chybu a nemuzu se z nich a ani z jinych Java programu (a nefunguje ani JavaWebStart) dostat na internet. java.net.UnknownHostException: mystation.mydomain.cz: mystation.mydomain.cz at java.net.InetAddress.getLocalHost(InetAddress.java:1292) at org.netbeans.CLIHandler.initialize(CLIHandler.java:480) at org.netbeans.CLIHandler.initialize(CLIHandler.java:284) at org.netbeans.Main.execute(Main.java:159) at org.netbeans.Main.main(Main.java:39) Zajimave je, ze kdyz se prihlasim pod rootem, tak to jde. Spis si myslim, ze se stalo neso v systemu (Mdk10.1), ale vubec si nemuzu vzpomenout na nic, co by to mohlo zpusobit. Nesetkal jste se s tim nekdo? Dekuji za pripadne nasmerovani Karel
Sign up for updates to this mailing list. email:
Loading Comments...
Home | News | Patents | Sitemap | FAQ | advertise

Advertising by