0

我面临一个非常烦人的问题,使服务器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 转换初始化失败?

4

1 回答 1

1

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

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

于 2013-02-28T09:47:35.437 回答