20080424 Application Lock ApplicationContext spring
http://www.yippeesoft.com
Application的Lock问题。
原因
嵌入到 Application.Lock 和 Application.UnLock 方法中代码提供多用户环境中保护。 访问 Application 对象时随着是 COM +, 引入 Internet Information Server (IIS) 5.0 利用是线程 Neutral Apartment (NA)。 当您明确调用 Application.Lock 和从 Application.UnLock 组件, 内会因此, 某些情况下您可能遇到死锁情况导致服务器停止响应。 当内部 ASP 函数是整理来回 IIS 服务器和 COM+ 应用程序服务器之间是最常发生此问题。 以下两种方案可能导致服务器到挂起:
• 当您调试 MicrosoftVisualBasic 组件从 VisualBasic 集成开发 Envrionment (IDE)。
• 当您调用组件, 作为在 COM+ 服务器应用程序运行。
解决方案
Application.Lock 和 Application.UnLock 方法不需要分配单个 Application 变量因为内部调用方法。
如果您需要从组件, 分配同一 Application.Lock 和 Application.UnLock 方法中多 Application 变量组件必须与调用方, 在同一进程中运行或必须修改您逻辑以只包含一个赋值。 例如, 以下代码
Application.Lock
Application("myvar1") = "hello"
Application("myvar2") = "world"
Application.UnLock
可能被修改以解决此问题如下:
Dim array(1)
array(0) = "hello"
array(1) = "world"
Application("myvar") = array
Lock 方法阻止其他客户修改存储在 Application 对象中的变量,以确保在同一时刻仅有一个客户可修改和存取 Application 变量。如果用户没有明确调用 Unlock 方法,则服务器将在 .asp 文件结束或超时后即解除对 Application 对象的锁定。
语法
Application.Lock
示例
<%
Application.Lock
Application("NumVisits") = Application("NumVisits") + 1
Application.Unlock
%>
This application page has been visited
<%= Application("NumVisits") %> times!
在前面的示例中,Lock 方法保护变量 NumVisits 在同一时刻不被多个客户所访问。如果应用程序未被锁定,则两个客户就可以同时增加变量 NumVisits 的值。
应用程序需要小心使用复杂对象,例如,集合.集合没有被设计为供多线程同时访问.
利用方法Synchronized()创建集合对象线程安全版本
SortedList ApplicationValue =new SortedList();
ApplicationValue.Add("1","a");
ApplicationValue.Add("2","b");
ApplicationValue.Add("3","c");
ApplicationValue=SortedList.Synchronized(ApplicationValue);
package com.test;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
public class SpringMain &leftsign;
/**
* @param args
*/
public static void main(String[] args) &leftsign;
SpringBean bean = null;
XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
bean = (SpringBean)factory.getBean("test1");
bean.sayHello();
ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
bean = (SpringBean)act.getBean("test1");
bean.sayHello();
factory = new XmlBeanFactory(new FileSystemResource("F:\\\\ccc\\\\workspace_zuhe\\\\Test\\\\src\\\\applicationContext.xml"));
bean = (SpringBean)factory.getBean("test1");
bean.sayHello();
&rightsign;
&rightsign;
历史博文
- mshtml - 2010
- 20070503 史记 刺客列传 诫兄子严敦书 - 2008
- 0807 TortoiseSVN 属性 - 2007
- 1227 push_macro pop_macro #undef - 2006