我面临着一个非常烦人的问题,那就是使服务器Java进程终止,从这段代码(压缩)中删除:

_sesXslProc = new ArrayList<Transformer>();
TransformerFactory tFactory = TransformerFactory.newInstance();
for( String it : lesFichiers )
{
    try
    {
        _sesXslProc.add( tFactory.newTransformer( new StreamSource( it ) ) ); // breaks there
    }
    catch( Exception ex )
    {
        ...
    }
}


此代码由cron在服务器上运行,可以同时运行许多这样的进程(最大5个),并且ex.getMessage显示:

javax.xml.transform.TransformerConfigurationException: Chargement impossible de la classe translet 'cdt17totifv3'

EN : Unable to load Translet class 'cdt17totifv3'


因此,我一直坚持这一点,手动启动流程很好(通常很少失败)。

有谁知道会导致XSL转换初始化失败的原因?

最佳答案

在我看来,这似乎是一个问题,几个不同的线程或进程试图同时使用同一资源并相互干扰。也许他们是根据当前的时钟时间生成一个临时文件名,因此有时多个进程会选择相同的名称。

如果您同时运行多个操作系统级别的进程,请尝试为每个进程的java.io.tmpdir系统属性赋予一个不同的值,以使它们使用不同的临时目录。如果在同一java进程中有多个线程,那么除了将newTransformer调用包装在synchronized块中之外,我不知道是否有太多选择。

10-07 12:06