我有一个带有线程静态会话的多线程应用程序,它可以处理文件。它使用 NH 从服务中消费并在 oracle db 上运行,到目前为止一切都很好。
每个线程都有一个详细的日志,使用无状态会话更轻量级。顺便说一句,当处理某些文件时,我可以看到在 oracle 中为日志会话管理了许多游标。
例如日志:
- 第324章
- 第310章
- 第121章
和应用程序本身:
- 31 SPC_PRODUCTION_LINE_TEST
- 27 SPC_PRODUCTION_LINE_TEST
- 21 SPC_PRODUCTION_LINE_TEST
这驱使我用完 Oracle 游标 ORA-01000。
有人知道可能导致这种情况的原因吗?游标与插入有关还是仅与更新有关?我想每个线程在它生命的尽头都会关闭所有会话,常规的和无状态的。
仅供参考,我正在这样写日志:
在会话工厂
public IStatelessSession GetUserStatelessContext(ConnectionStringSettings connection) { lock (Padlock) { string key = GetConnectionKey(connection); if (StatelessSessions == null) { StatelessSessions = new Dictionary<string, IStatelessSession>(); } if (!StatelessSessions.ContainsKey(key)) { StatelessSessions.Add(key, Factories[connection.ConnectionString].OpenStatelessSession()); } return StatelessSessions[key]; } }
并在日志中写入:
using (ITransaction tx = this.LogProcessErrorRepository.BeginTransaction()) { this.LogProcessErrorRepository.Add(log); if (log.Informations != null) { foreach (AdditionalInformation info in log.Informations) { info.Text = this.OracleCLOBHack(info.Text); this.AdditionalInformationRepository.Add(info); } } tx.Commit(); }