与TransformerFactory.newTransformer的Java不可预测的错误

时间:2013-02-28 09:37:57

标签: java xslt

我正面临一个令人讨厌的问题,使服务器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 maxi),ex.getMessage显示:

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

EN : Unable to load Translet class 'cdt17totifv3'

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

有没有人知道 会导致XSL转换初始化失败?

1 个答案:

答案 0 :(得分:1)

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

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