Tomcat因本机C代码而崩溃 - 可能的解决方法?

时间:2014-11-25 03:45:21

标签: java tomcat crash native rmi

我们在tomcat上托管了一个Web应用程序,它包含对一些遗留C代码的调用。现在,在其中一个场景中,这个C代码在生产环境中崩溃并导致整个JVM崩溃,使应用服务器停机了将近15分钟。

问题 - 有没有更好的方法,基本上我想在自己的JVM中加载本机代码,以便应用服务器不会崩溃。

2 个答案:

答案 0 :(得分:1)

你回答了自己的问题。将其移动到另一个JVM,然后对该JVM进行服务调用。如果服务器崩溃,与JVM的通信将会丢失,但您的应用服务器仍将正在运行,并且可以正常处理失败的通信。

您的选择是,将代码放在另一个应用服务器中,并使用JSON,Web服务等创建服务API,无论您更熟悉。或者,根据C代码的作用,可能只是一个套接字级API。

当然,如果您要编写代码,您的C代码可以处理它自己的套接字。但是将其保存在App服务器中可能是出于管理和监控的最佳原因。在创建API时会更快,更灵活。

您必须根据自己的判断判断哪种解决方案适合您。

答案 1 :(得分:1)

我们最终做了以下事情:

  1. 将C特定代码移动并暴露给URL端点,即RPC样式的Web服务(基本上是远程调用):
  2. @WebService @SOAPBinding(style = Style.RPC)

    随后公开其接口端点:

    @WebService(endpointInterface..
    
    1. 在Web服务器init期间,使用Endpoint.publish(...)在新的java进程中发布此端点ProcessBuilder

    2. 使用此功能时,称为端点并使用javax.xml.ws.Service获取对象本身。

    3. 在服务器停止期间,我们销毁了在步骤2中创建的Process