2011-10-06 170 views
1

我開發了一個帶有Java-Servlets的WebApplication。它運行在GlassFish服務器上(在Windows平臺上)。現在我需要用JNI加載一個DLL。我使用System.loadLibrary(dll)來執行此操作。我現在正在尋找方法,在Application-Startup中加載這個庫,以便它可以用於所有應用程序實例。我的問題現在是:Java Web應用程序 - 應用程序啓動時的LoadLibrary

  • 如何我一定要定義這樣的啓動,事件並把它放在哪裏和什麼配置,它會被執行
  • 我如何要實現這個啓動,事件,WebApp的所有實例都可以在使用加載的庫之後,我如何從現有的servlets中使用它

感謝您的幫助。

托馬斯

回答

2

你可以實現一個ServletContextListener並且在接收到contextInitialized事件,你可以在這一點上加載DLL。

如果您使用的是Spring(甚至更好),您可以靜態加載dll(在Spring啓動時),然後使用Spring來獲取dll的「處理程序」。

但請注意,如果您直接從您的Web應用程序加載DLL並且DLL崩潰,您的應用程序也會崩潰。也許你應該考慮(雖然它需要額外的努力),通過另一個過程加載並使用,例如, RMI與dll進行交互。所以,如果該DLL崩潰你的應用程序仍然保持完好。

+0

感謝您的回答。我還有一個關於ServletContextListener的問題。我現在已經在我的應用程序中實現了它。我認爲,這是錯誤的,因爲它會在glassFish-Startup和我的WebApp啓動時執行。但我不知道,在哪裏必須介紹它,它只會在啓動glassFish時調用 - 以及如何實現從所有WebApp實例訪問的DLL的加載。 – BennoDual

+0

當web應用程序準備好爲請求提供服務時,將調用contextInitialized,並在容器自己的初始化完成時由容器自動調用。因此,通常在應用程序啓動時需要執行的代碼放置在那裏。您是什麼意思通過所有的Web應用程序實例嗎?你想加載的DLL將被多個Web應用程序運行在同一個容器中? – Cratylus

相關問題