IFX_LOCK_MODE_WAIT参数在context.xml中不起作用



我正在使用Spring开发一个与Informix数据库一起工作的应用程序,该应用程序正在Tomcat上运行。数据源的配置在应用程序中完成,如下所示:

/MyApp/META-INF/context.xml

<Context path="/MyApp"
reloadable="false"
cachingAllowed="false"  >
<Resource name="jdbc/MyAppDS"
auth="Container" type="javax.sql.DataSource"
driverClassName="com.informix.jdbc.IfxDriver"
url="jdbc:informix-sqli://app.prod.com:22222/prod:informixserver=prodshm;IFX_LOCK_MODE_WAIT=20;IFX_XASPEC=Y;" 
username="user" password="password"
maxActive="100" maxIdle="25" maxWait="10000"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
</Context> 

/MyApp/WEB-INF/WEB.xml

… 
<resource-ref>    
<res-ref-name>jdbc/MyAppDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/applicationContext.xml
/WEB-INF/config/dataAccessContext.xml
</param-value>
</context-param>
…

/MyApp/config/dataAccessContext.xml

<beans>
<import resource="dataSource-def.xml"/>

<bean id="scriptDao" parent="txProxyTemplate">
<property name="target">
<bean class="com.myapp.script.ScriptDaoJdbc">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
</property>
</bean>
…
</beans>

/MyApp/config/dataSource def.xml

<beans>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>java:/comp/env/jdbc/MyAppDS</value></property>
</bean>


<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>

</beans>

context.xml中的参数IFX_LOCK_MODE_WAIT似乎不起作用,因为我有很多锁定错误,例如:

error code [-244]; Could not do a physical-order read to fetch next row.; ISAM error: record is locked.
error code [-245]; Could not position within a file via an index.; ISAM error: key value locked

为了检查我的假设是否正确,我开始发送";将锁定模式设置为等待20";在每个有问题的查询之前显式显示,并且可以看到它工作了——不再有错误消息了。

下面列出了context.xml以前的配置,但也不起作用:

/MyApp/META-INF/context.xml(以前的版本(

<Context path="/MyApp"
reloadable="false"
cachingAllowed="false"  >
<Resource name="jdbc/MyAppDS"
auth="Container" type="javax.sql.DataSource"
driverClassName="com.informix.jdbc.IfxDriver"
url="jdbc:informix-sqli://app.prod.com:22222/prod:informixserver=prodshm" 
username="user" password="password"
maxActive="100" maxIdle="25" maxWait="10000"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
connectionProperties="ifxIFX_LOCK_MODE_WAIT=20;ifxIFX_XASPEC=Y;" />
</Context> 

为什么context.xml中的语句IFX_LOCK_MODE_WAIT=20可能不起作用?实现这一目标的更好方法是什么?

谢谢!

如果可以,请尝试更改隔离级别;IFX_ISOLATION_LEVEL=1以查看是否存在差异。

也许可以在属性文件中定义informix资源,而不是在xml上下文中定义

最新更新