首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EJB weblogic.ejb20.cache.CacheFullException

EJB weblogic.ejb20.cache.CacheFullException
EN

Stack Overflow用户
提问于 2012-08-09 11:35:05
回答 1查看 4.5K关注 0票数 7

我正在使用EJB1.2开发一个应用程序。以前运行良好,但从过去的几天开始,我得到了以下异常

代码语言:javascript
运行
复制
Exception in ejbLoad:: weblogic.ejb20.cache.CacheFullException: size=85783, target=5000, incr=1 at weblogic.ejb20.cache.EntityCache$SizeTracker.shrinkNext(JI)Lweblogic.ejb20.cache.EntityCache$MRUElement;(EntityCache.java:438) at weblogic.ejb20.cache.EntityCache.put
(Ljavax.transaction.Transaction;Lweblogic.ejb20.cache.CacheKey;Ljavax.ejb.EntityBean;Lweblogic.ejb20.interfaces.CachingManager;)V(EntityCache.java:141) at weblogic.ejb20.manager.DBManager.getReadyBean(Ljavax.transaction.Transaction;Ljava.lang.Object;)Ljavax.ejb.EntityBean;(DBManager.java:332) at 
    weblogic.ejb20.manager.DBManager.preInvoke(Lweblogic.ejb20.internal.InvocationWrapper;)Ljavax.ejb.EnterpriseBean;(DBManager.java:249) at 
    weblogic.ejb20.internal.BaseEJBLocalObject.preInvoke(Lweblogic.ejb20.internal.InvocationWrapper;)Lweblogic.ejb20.internal.InvocationWrapper;(BaseEJBLocalObject.java:228) at weblogic.ejb20.internal.EntityEJBLocalObject.preInvoke(Lweblogic.ejb20.internal.MethodDescriptor;Lweblogic.security.service.ContextHandler;)Lweblogic.ejb20.internal.InvocationWrapper;(EntityEJBLocalObject.java:72) at com.nextjet.enterprise.locationcode.locationcode.LocationCode_v2epgs_ELOImpl.getLocationCodeData()Lcom.nextjet.enterprise.locationcode.LocationCodeData;(LocationCode_v2epgs_ELOImpl.java:28) at com.nextjet.enterprise.locationcode.locationcodemanager.LocationCodeManagerBean.loadShippingAddress(Ljava.lang.Long;Ljava.lang.String;)Lcom.nextjet.enterprise.locationcode.LocationCodeView;(LocationCodeManagerBean.java:538) at com.nextjet.enterprise.locationcode.locationcodemanager.LocationCodeManagerBean.doSearchShippingAddresses(Ljava.lang.String;)Lcom.nextjet.enterprise.locationcode.LocationCodeSearchResult;(LocationCodeManagerBean.java:514) at com.nextjet.enterprise.locationcode.locationcodemanager.LocationCodeManagerBean.lookupAccountShipping.....

目前,我正在更改<max-beans-in-cache>weblogic-ejb-jar.xml中的值

我正在将上面的值更改为<max-beans-in-cache>100000</max-beans-in-cache>

这是这种异常的唯一解决方案,还是可能存在数据库中与数据相关的问题?

EN

回答 1

Stack Overflow用户

发布于 2012-08-13 08:34:52

对于max-beans-in-cache来说,10000是一个很高的值,从日志来看,应用程序似乎试图调用多达85785个EJB实例。

我建议在您的代码中进行重构。

您的代码正在执行

代码语言:javascript
运行
复制
com.nextjet.enterprise.locationcode.locationcode.LocationCode_v2epgs_ELOImpl
.getLocationCodeData()

这主要是一种读操作吗?或者你在同时写和读?

如果EJB主要执行读操作,您可以用两种方式重构它,以减少EJB开销。

1)阅读Oracle关于为并发性优化EJB设置和数据库选项的建议,特别是读-大部分模式。

01/wls/docs81/ejb/entity.html#ChoosingaConcurrencyStrategy

2)如果您主要是在阅读,那么根本不要使用实体EJB。使用FastLaneReader模式,它使用一个直接的JDBC调用来获取用于SELECT的数据,现在您可以使用EJB进行写入。这样,可以减少缓存中的最大bean数。

在Sun站点上给出了一个非常详细的示例

http://java.sun.com/blueprints/patterns/FastLaneReader.html

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11882509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档