我用 Java-Servlet 开发了一个 Web 应用程序。它在 GlassFish 服务器(在 Windows 平台上)中运行。现在我需要使用 JNI 加载 DLL。我使用 System.loadLibrary(dll) 来执行此操作。我现在正在寻找在应用程序启动时加载此库的方法,以便它可以用于所有应用程序实例。我现在的问题是:
- 我必须如何定义这样的启动事件以及将其放置在何处以及配置什么以使其执行
- 我必须如何实现此启动事件,WebApp 的所有实例都可以使用加载的库,以及如何从现有的 servlet 中使用它
感谢您的帮助。
托马斯
最佳答案
您可以实现一个 ServletContextListener
,并在收到 contextInitialized
事件后,您可以在此时加载 dll。
如果您使用 Spring(甚至更好),您可以静态加载 dll(在 Spring 启动时),然后使用 Spring 获取 dll 的“处理程序”。
请注意,如果您直接从 Web 应用程序加载 dll,并且 dll 崩溃,您的应用程序也会崩溃。
也许您应该考虑(尽管需要额外的努力)通过另一个进程加载并使用例如RMI 与 dll 交互。因此,即使 dll 崩溃,您的应用程序仍然完好无损。
关于Java Web 应用程序 - 应用程序启动时加载库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7679913/