|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
而学习JAVA我觉得最应该避免的就是:只学习,不思考,只记忆,不实践!比来帮忙一些BEA客户做调优,他们利用了Spring,呈现了林林总总的功能成绩,这些成绩实在都是不简单重现的,个中,我本人捕捉了一些ThreadDump,并report了给SpringJIRA。这个Case的情形是:Spring会偶尔呈现CPU100%的情形,WebLogicServer溃散,我厥后剖析了线程Dump,以为是一种LockContention的情况,幸亏,JuergenHoeller很快给我Fixed了这个Bug:
http://jira.springframework.org/browse/SPR-4664
利用Java编程的同砚都倡议Review一下,呵呵:
这是2.5.4之前的代码:
/**
*CacheofTransactionAttributes,keyedbyDefaultCacheKey(Method+targetClass).
*<p>AsthisbaseclassisnotmarkedSerializable,thecachewillberecreated
*afterserialization-providedthattheconcretesubclassisSerializable.
*/
finalMapattributeCache=newHashMap();
/**
*Determinethetransactionattributeforthismethodinvocation.
*<p>Defaultstotheclass"stransactionattributeifnomethodattributeisfound.
*@parammethodthemethodforthecurrentinvocation(never<code>null</code>)
*@paramtargetClassthetargetclassforthisinvocation(maybe<code>null</code>)
*@returnTransactionAttributeforthismethod,or<code>null</code>ifthemethod
*isnottransactional
*/
publicTransactionAttributegetTransactionAttribute(Methodmethod,ClasstargetClass){
//First,seeifwehaveacachedvalue.
ObjectcacheKey=getCacheKey(method,targetClass);
synchronized(this.attributeCache){
Objectcached=this.attributeCache.get(cacheKey);
if(cached!=null){
//Valuewilleitherbecanonicalvalueindicatingthereisnotransactionattribute,
//oranactualtransactionattribute.
if(cached==NULL_TRANSACTION_ATTRIBUTE){
returnnull;
}
else{
return(TransactionAttribute)cached;
}
}
else{
//Weneedtoworkitout.
TransactionAttributetxAtt=computeTransactionAttribute(method,targetClass);
//Putitinthecache.
if(txAtt==null){
this.attributeCache.put(cacheKey,NULL_TRANSACTION_ATTRIBUTE);
}
else{
if(logger.isDebugEnabled()){
logger.debug("Addingtransactionalmethod["+method.getName()+"]withattribute["+txAtt+"]");
}
this.attributeCache.put(cacheKey,txAtt);
}
returntxAtt;
}
}
}
这是2.5.4Fixed后的代码:
/**
*CacheofTransactionAttributes,keyedbyDefaultCacheKey(Method+targetClass).
*<p>AsthisbaseclassisnotmarkedSerializable,thecachewillberecreated
*afterserialization-providedthattheconcretesubclassisSerializable.
*/
finalMapattributeCache=CollectionFactory.createConcurrentMapIfPossible(16);
/**
*Determinethetransactionattributeforthismethodinvocation.
*<p>Defaultstotheclass"stransactionattributeifnomethodattributeisfound.
*@parammethodthemethodforthecurrentinvocation(never<code>null</code>)
*@paramtargetClassthetargetclassforthisinvocation(maybe<code>null</code>)
*@returnTransactionAttributeforthismethod,or<code>null</code>ifthemethod
*isnottransactional
*/
publicTransactionAttributegetTransactionAttribute(Methodmethod,ClasstargetClass){
//First,seeifwehaveacachedvalue.
ObjectcacheKey=getCacheKey(method,targetClass);
Objectcached=this.attributeCache.get(cacheKey);
if(cached!=null){
//Valuewilleitherbecanonicalvalueindicatingthereisnotransactionattribute,
//oranactualtransactionattribute.
if(cached==NULL_TRANSACTION_ATTRIBUTE){
returnnull;
}
else{
return(TransactionAttribute)cached;
}
}
else{
//Weneedtoworkitout.
TransactionAttributetxAtt=computeTransactionAttribute(method,targetClass);
//Putitinthecache.
if(txAtt==null){
this.attributeCache.put(cacheKey,NULL_TRANSACTION_ATTRIBUTE);
}
else{
if(logger.isDebugEnabled()){
logger.debug("Addingtransactionalmethod["+method.getName()+"]withattribute["+txAtt+"]");
}
this.attributeCache.put(cacheKey,txAtt);
}
returntxAtt;
}
}
可是2.5.4snapshot是未经很好测试的版本,客户一样平常不太敢用。我不晓得实在有几客户真正地把Spring投进到高并发性情况下利用,假如有,他们应当会能碰着我所碰着的情况。
批评
- #re:将Spring用于高并发情况的隐忧[未登录]BeanSoftPosted@2008-04-1910:03
没错,我们之前的公司也是Weblogic+Hibernate,出了功能成绩了,固然调剂办理了,但不论怎样说,由于这些开源软件之前开辟的时分并没有思索高并发和集群的情形,仍是对照简单呈现成绩的,特别是没有经由严厉的压力测试。我团体以为,今朝做的对照好的软件,仍然是贸易的。
- #re:将Spring用于高并发情况的隐忧flyislandPosted@2008-04-1910:56
1.切实其实,很多开源软件在版本公布之前是不是有才能往做高并发压力测试,值得嫌疑
2.我想,看到david此次发明的成绩,用户更应当小心的是下次假如某个开源产物出了成绩怎样办。
3.不外今朝来讲是,不是“用不必开源的成绩”(能够是必定要用),而是“用了开源怎样办”的成绩。以是这是开源贸易形式的一个时机,好比david就能够往做开源调优的服务撑持了,哈
4.这篇blog在我的firefox3.0b5下排版凌乱,不能不到IE上面来留言
- #re:将Spring用于高并发情况的隐忧[未登录]afPosted@2008-04-1917:43
我一向以为开源代码是用来进修的,实践项目中仍是不要用的好。
- #re:将Spring用于高并发情况的隐忧[未登录]ljPosted@2008-04-1921:08
我很想晓得在spring1.2.9或spring2.0.8有无这个成绩
- #re:将Spring用于高并发情况的隐忧GoGoPosted@2008-04-2013:24
@flyisland
FireFox不单单3.0乱,2.0也乱,因而IE留言之。
来自:http://www.blogjava.net/security/archive/2008/04/19/spring_bug.html
到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。 |
|