我有一個DLL提供對Window的LoadLibrary和FreeLibrary的訪問(以避免Java無法卸載它)。我需要這個DLL在每個webapp之間保持,因爲它不能被加載兩次。Tomcat DLL已經加載到另一個類加載器
我已經按照下列步驟操作:
,並在$ {} TOMCAT/lib目錄與static { System.loadLibrary() }
呼叫放在一個單獨的類(如一個jar)。當我的Tomcat Web應用程序訪問此Singleton,它仍然拋出的錯誤
UnsatisfiedLinkError: Native Library ${TOMCAT}\lib\Native.dll already loaded in another classloader
這是錯誤的認爲Tomcat的普通類加載器加載這個類,實例化它(按:http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html),然後使參考webapp因此繞過了webapp classloader?
有沒有辦法告訴Tomcat實例化我的單例(迫使普通的類加載器做到這一點),然後提供該實例來滿足我的webapp的依賴性?
任何討論非常讚賞。
如果您嘗試在鏈接提及中創建'$ CATALINA_HOME/shared/lib'並將dll放在那裏,您是否也遇到同樣的問題?您的類也只有靜態初始化器,對不對? – Cratylus 2013-02-21 18:29:31
因此,在那個鏈接中,他們描述了Tomcat6及以下的共享/ lib。目前,在Tomcat7中,這只是簡單地移動到$ CATALINA_HOME/lib。在配置中你可以看到common.loader屬性包含了這個。不,該類具有單一訪問函數實例()以及定義JNI本機函數。 – 2013-02-26 15:52:38