我最近继承了一个使用Spring for Net和nHibernate的项目,我已经开始在我们的Live服务器上出现需要紧急修复的重复错误。
我不是Spring或nHibernate专家,我只是开始弄清楚这些技术的作用,以及不同的设置是什么(即我是初学者)。
我将网站从Spring版本1.2升级到1.3,nHibernate从1.2升级到2.1,这个错误已经开始蔓延,现在变得非常规则。
异常信息: 异常类型:ConfigurationErrorsException 异常消息:创建上下文'spring.root'时出错:现有上下文>'[spring.root]:WebApplicationContext(xxxxxxxx)'已在名称'spring.root'下注册。
有关错误和部署的说明:
我们在IIS 6中有20个网站使用不同的代码副本,所有访问差异数据库,都分配了自己的应用程序池。
当用户尝试访问他们最初访问该站点时未访问的页面时(自上次重新启动应用程序池以来),似乎发生了错误。如果我们重新启动应用程序池,则该页面上不再出现此问题,除非我们重新启动池,因为另一个页面存在此问题。
我不确定问题是否正在发生,因为我们有多个站点试图访问相同的弹簧上下文,或者每个站点都有自己的弹簧上下文。我的印象是,当用户试图访问该站点时,如果之前没有访问该站点,则弹簧将为所有对象设置注入(这就是为什么第一页需要一点时间才能加载IIS重新启动或应用程序池重新启动。
我一直在浏览Spring for Net示例代码,并且在web.config,dao.xml,web.xml文件中的设置非常相似......
的Web.config:
<sectionGroup name="spring">
<section name="context" type="Spring.Context.
Support.WebContextHandler, Spring.Web"/>
<section name="parsers" type="Spring.
Context.Support.NamespaceParsersSectionHandler, Spring.Core"/>
</sectionGroup>
<spring>
<parsers>
<parser type="Spring.Data.
Config.DatabaseNamespaceParser, Spring.Data"/>
<parser type="Spring.Transaction.Config.
TxNamespaceParser, Spring.Data"/>
</parsers>
</spring>
<context>
<resource uri="~/conf/Aspects.xml"/>
<resource uri="~/conf/Dao.xml"/>
<resource uri="~/conf/Services.xml"/>
<resource uri="~/conf/Web.xml"/>
</context>
<appSettings>
<add key="Spring.Data.NHibernate.Support.
OpenSessionInViewModule.SessionFactoryObjectName"
value="SessionFactory"/>
</appSettings>
dao.xml中的差异:
<property name="ExposeTransactionAwareSessionFactory" value="true" />
,需要解决这个问题。我会继续阅读Spring for Net文档,试着理解为什么会这样。虽然这是一个常见问题,但我们将不胜感激。