我面临着一个非常烦人的问题,那就是使服务器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
块中之外,我不知道是否有太多选择。