我们在tomcat上托管了一个Web应用程序,它包含对一些遗留C代码的调用。现在,在其中一个场景中,这个C代码在生产环境中崩溃并导致整个JVM崩溃,使应用服务器停机了将近15分钟。
问题 - 有没有更好的方法,基本上我想在自己的JVM中加载本机代码,以便应用服务器不会崩溃。
答案 0 :(得分:1)
你回答了自己的问题。将其移动到另一个JVM,然后对该JVM进行服务调用。如果服务器崩溃,与JVM的通信将会丢失,但您的应用服务器仍将正在运行,并且可以正常处理失败的通信。
您的选择是,将代码放在另一个应用服务器中,并使用JSON,Web服务等创建服务API,无论您更熟悉。或者,根据C代码的作用,可能只是一个套接字级API。
当然,如果您要编写代码,您的C代码可以处理它自己的套接字。但是将其保存在App服务器中可能是出于管理和监控的最佳原因。在创建API时会更快,更灵活。
您必须根据自己的判断判断哪种解决方案适合您。
答案 1 :(得分:1)
我们最终做了以下事情:
@WebService @SOAPBinding(style = Style.RPC)
随后公开其接口端点:
@WebService(endpointInterface..
在Web服务器init期间,使用Endpoint.publish(...)
在新的java进程中发布此端点ProcessBuilder
。
使用此功能时,称为端点并使用javax.xml.ws.Service
获取对象本身。
在服务器停止期间,我们销毁了在步骤2中创建的Process
。