2011-10-06 173 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

相关问题