我正面临一个令人讨厌的问题,使服务器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转换初始化失败?
答案 0 :(得分:1)
这看起来像是一个问题,有几个不同的线程或进程试图同时使用相同的资源并相互干扰。也许他们根据当前的时钟时间生成一个临时文件名,因此有时不止一个进程会选择相同的名称。
如果您同时运行多个操作系统级进程,请尝试为每个进程提供其java.io.tmpdir
系统属性的不同值,以使它们使用不同的临时目录。如果它是同一个java进程中的几个线程,那么除了将newTransformer
调用包装在synchronized
块中之外,我不知道是否还有很多选项。