Ticket #14 (closed defect: fixed)

Opened 15 years ago

Last modified 15 years ago

ArgumentException 和 InvalidStateException 异常

Reported by: chenchongqi Owned by:
Priority: major Milestone:
Component: 商家后台 Version: 5.0
Keywords: ArgumentException,InvalidStateException Cc:
Due Date:

Description (last modified by chenchongqi) (diff)

1.在应用被监控重启或者死锁重启后出现,有时候能自己恢复但是有时候不能自己恢复,必须手动重启应用才能解决。

2.曾经怀疑ArgumentException 是由于spring注入引起,修改entityManagerFactory bean配置为预加载
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean?" p:persistenceUnitManager-ref="persistenceUnitManager" lazy-init="false">
但是ArgumentException 仍有出现。
还有人判断是因为访问时某些实体还没有enhance建议把openjpa.RuntimeUnenhancedClasses设为support,不过官方不建议在生产环境中设置。

3.排除使用非法em导致找不到上下文情况。

4.网上的信息不多,比较相近的是这条,和我们这某条日志比较吻合,据说是bug跟runtime enhancement有关,1.2.1后修正,而我们是1.2.0版。
 http://openjpa.208410.n2.nabble.com/Problem-with-detaching-embedded-class-in-OpenJPA-1-2-using-compile-time-enhancement-td1117628.html

结论:升级jpa版本后再观察。

附:
[04-10 12:15:41.500] <openjpa-1.2.0-r422266:683325 nonfatal user error> org.apache.openjpa.persistence.ArgumentException?: An error o
ccurred while parsing the query filter "SELECT o FROM PriceArea? o ORDER BY o.dispSeq". Error message: The name "PriceArea?" is not a
recognized entity or identifier. Perhaps you meant Syslog, which is a close match. Known entity names: [RefundEvidence?, LicenseAnnua?
lLog, ShopTag?, CompanyProductCounter?, RecommendVipnews?, Syslog, RequestReview?, ShopHomepageType?, CompanyCount?, NewsSubscibe?]
[04-10 12:15:41.500] at org.apache.openjpa.kernel.exps.AbstractExpressionBuilder?.parseException(AbstractExpressionBuilder?.java:11
8)
[04-10 12:15:41.500] at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getClassMetaData(JPQLExpressionBuilder.java:177)
[04-10 12:15:41.500] at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.resolveClassMetaData(JPQLExpressionBuilder.java:150)
[04-10 12:15:41.501] at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:225)
[04-10 12:15:41.501] at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:195)
[04-10 12:15:41.501] at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateType(JPQLExpressionBuilder.java:188)
[04-10 12:15:41.501] at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.access$600(JPQLExpressionBuilder.java:69)
[04-10 12:15:41.501] at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.populate(JPQLExpressionBuilder.java:1756)
[04-10 12:15:41.501] at org.apache.openjpa.kernel.jpql.JPQLParser.populate(JPQLParser.java:56)
[04-10 12:15:41.501] at org.apache.openjpa.kernel.ExpressionStoreQuery?.populateFromCompilation(ExpressionStoreQuery?.java:153)
[04-10 12:15:41.502] at org.apache.openjpa.datacache.QueryCacheStoreQuery?.populateFromCompilation(QueryCacheStoreQuery?.java:245)
[04-10 12:15:41.502] at org.apache.openjpa.kernel.QueryImpl?.newCompilation(QueryImpl?.java:658)
[04-10 12:15:41.502] at org.apache.openjpa.kernel.QueryImpl?.compilationFromCache(QueryImpl?.java:639)
[04-10 12:15:41.504] at org.apache.openjpa.kernel.QueryImpl?.compileForCompilation(QueryImpl?.java:605)
[04-10 12:15:41.504] at org.apache.openjpa.kernel.QueryImpl?.compileForExecutor(QueryImpl?.java:667)
[04-10 12:15:41.504] at org.apache.openjpa.kernel.QueryImpl?.getOperation(QueryImpl?.java:1492)
[04-10 12:15:41.504] at org.apache.openjpa.kernel.DelegatingQuery?.getOperation(DelegatingQuery?.java:123)
[04-10 12:15:41.505] at org.apache.openjpa.persistence.QueryImpl?.execute(QueryImpl?.java:243)
[04-10 12:15:41.505] at org.apache.openjpa.persistence.QueryImpl?.getResultList(QueryImpl?.java:293)
[04-10 12:15:41.505] at cn.com.pconline.enterprise.query.CompanyQuery?.getPriceAreas(CompanyQuery?.java:1154)
[04-10 12:15:41.505] at cn.com.pconline.enterprise.query.CompanyQuery?.listMapProductPromoteAds(CompanyQuery?.java:1192)
[04-10 12:15:41.505] at cn.com.pconline.enterprise.query.CompanyQuery?$$FastClassByCGLIB$$4b21b206.invoke(<generated>)
[04-10 12:15:41.505] at net.sf.cglib.proxy.MethodProxy?.invoke(MethodProxy?.java:149)
[04-10 12:15:41.506] at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor?.intercept(Cglib2AopProxy.java:
628)
[04-10 12:15:41.506] at cn.com.pconline.enterprise.query.CompanyQuery?$$EnhancerByCGLIB$$289a4850.listMapProductPromoteAds(<genera
ted>)
[04-10 12:15:41.506] at _jsp._yp._company_0dealer_0brand_0adjsp._jspService(_company_0dealer_0brand_0ad__jsp.java:320)
[04-10 12:15:41.506] at com.caucho.jsp.JavaPage?.service(JavaPage?.java:61)
[04-10 12:15:41.506] at com.caucho.jsp.Page.pageservice(Page.java:578)
[04-10 12:15:41.506] at com.caucho.server.dispatch.PageFilterChain?.doFilter(PageFilterChain?.java:192)
[04-10 12:15:41.507] at cn.com.pconline.enterprise.util.UrlRewriteFilter?.doFilter(UrlRewriteFilter?.java:145)
[04-10 12:15:41.507] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-10 12:15:41.507] at cn.pconline.common.monitor.MonitorFilter?.doFilter(MonitorFilter?.java:88)
[04-10 12:15:41.507] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-10 12:15:41.507] at cn.com.pconline.enterprise.util.InputFilter?.doFilter(InputFilter?.java:106)
[04-10 12:15:41.507] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-10 12:15:41.507] at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter?.doFilterInternal(OpenEntityManagerInVie?
wFilter.java:112)
[04-10 12:15:41.508] at org.springframework.web.filter.OncePerRequestFilter?.doFilter(OncePerRequestFilter?.java:76)
[04-10 12:15:41.508] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-10 12:15:41.508] at cn.com.pconline.enterprise.util.EnvFilter?.doFilter(EnvFilter?.java:34)
[04-10 12:15:41.509] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-10 12:15:41.509] at org.springframework.web.filter.CharacterEncodingFilter?.doFilterInternal(CharacterEncodingFilter?.java:96)
[04-10 12:15:41.509] at org.springframework.web.filter.OncePerRequestFilter?.doFilter(OncePerRequestFilter?.java:76)
[04-10 12:15:41.509] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-10 12:15:41.509] at com.caucho.server.cache.CacheFilterChain?.doFilter(CacheFilterChain?.java:175)
[04-10 12:15:41.509] at com.caucho.server.webapp.WebAppFilterChain?.doFilter(WebAppFilterChain?.java:181)
[04-10 12:15:41.510] at com.caucho.server.dispatch.ServletInvocation?.service(ServletInvocation?.java:266)
[04-10 12:15:41.510] at com.caucho.server.http.HttpRequest?.handleRequest(HttpRequest?.java:268)
[04-10 12:15:41.510] at com.caucho.server.port.TcpConnection?.run(TcpConnection?.java:602)
[04-10 12:15:41.510] at com.caucho.util.ThreadPool?$Item.runTasks(ThreadPool?.java:690)
[04-10 12:15:41.510] at com.caucho.util.ThreadPool?$Item.run(ThreadPool?.java:612)
[04-10 12:15:41.511] at java.lang.Thread.run(Thread.java:619)

[04-02 16:07:04.114] <openjpa-1.2.0-r422266:683325 fatal user error> org.apache.openjpa.util.InvalidStateException?: The context has
been closed. The stack trace at which the context was closed is available if Runtime=TRACE logging is enabled.
[04-02 16:07:04.114] at org.apache.openjpa.kernel.BrokerImpl?.assertOpen(BrokerImpl?.java:4367)
[04-02 16:07:04.114] at org.apache.openjpa.kernel.BrokerImpl?.beginOperation(BrokerImpl?.java:1766)
[04-02 16:07:04.114] at org.apache.openjpa.kernel.BrokerImpl?.isActive(BrokerImpl?.java:1736)
[04-02 16:07:04.114] at org.apache.openjpa.kernel.StateManagerImpl?.beforeRead(StateManagerImpl?.java:941)
[04-02 16:07:04.114] at org.apache.openjpa.kernel.StateManagerImpl?.accessingField(StateManagerImpl?.java:1476)
[04-02 16:07:04.114] at cn.com.pconline.enterprise.domain.User.pcGetcompany(User.java)
[04-02 16:07:04.114] at cn.com.pconline.enterprise.domain.User.getCompany(User.java:809)
[04-02 16:07:04.114] at cn.com.pconline.enterprise.domain.CompanyProduct?.getCompany(CompanyProduct?.java:747)
[04-02 16:07:04.114] at cn.com.pconline.enterprise.domain.CompanyProduct?.getCompanyProductUri4BackEnd(CompanyProduct?.java:739)
[04-02 16:07:04.115] at sun.reflect.GeneratedMethodAccessor227.invoke(Unknown Source)
[04-02 16:07:04.115] at sun.reflect.DelegatingMethodAccessorImpl?.invoke(DelegatingMethodAccessorImpl?.java:25)
[04-02 16:07:04.115] at java.lang.reflect.Method.invoke(Method.java:597)
[04-02 16:07:04.115] at javax.el.BeanELResolver.getValue(BeanELResolver.java:159)
[04-02 16:07:04.115] at com.caucho.jsp.el.PageContextELResolver.getValue(PageContextELResolver.java:172)
[04-02 16:07:04.115] at com.caucho.el.ArrayResolverExpr?.getValue(ArrayResolverExpr?.java:121)
[04-02 16:07:04.115] at com.caucho.el.PathExpr?.getValue(PathExpr?.java:122)
[04-02 16:07:04.115] at com.caucho.el.Marshall$10.marshall(Marshall.java:137)
[04-02 16:07:04.115] at com.caucho.el.StaticMethodExpr?.evalMethod(StaticMethodExpr?.java:128)
[04-02 16:07:04.115] at com.caucho.el.FunctionExpr?.getValue(FunctionExpr?.java:69)
[04-02 16:07:04.115] at com.caucho.el.GtExpr?.evalBoolean(GtExpr?.java:78)
[04-02 16:07:04.115] at com.caucho.el.ConditionalExpr?.getValue(ConditionalExpr?.java:82)
[04-02 16:07:04.115] at com.caucho.el.Expr.print(Expr.java:416)
[04-02 16:07:04.115] at _jsp._WEB_22dINF._jsp._member._product._products_0boughtjsp._jspService(_products_0bought__jsp.java:232
)
[04-02 16:07:04.115] at com.caucho.jsp.JavaPage?.service(JavaPage?.java:61)
[04-02 16:07:04.115] at com.caucho.jsp.Page.pageservice(Page.java:578)
[04-02 16:07:04.115] at com.caucho.server.dispatch.PageFilterChain?.doFilter(PageFilterChain?.java:192)
[04-02 16:07:04.115] at com.caucho.server.webapp.DispatchFilterChain?.doFilter(DispatchFilterChain?.java:97)
[04-02 16:07:04.116] at com.caucho.server.dispatch.ServletInvocation?.service(ServletInvocation?.java:266)
[04-02 16:07:04.116] at com.caucho.server.webapp.RequestDispatcherImpl?.forward(RequestDispatcherImpl?.java:280)
[04-02 16:07:04.116] at com.caucho.server.webapp.RequestDispatcherImpl?.forward(RequestDispatcherImpl?.java:108)
[04-02 16:07:04.116] at org.springframework.web.servlet.view.InternalResourceView?.renderMergedOutputModel(InternalResourceView?.ja
va:236)
[04-02 16:07:04.116] at org.springframework.web.servlet.view.AbstractView?.render(AbstractView?.java:257)
[04-02 16:07:04.116] at org.springframework.web.servlet.DispatcherServlet?.render(DispatcherServlet?.java:1183)
[04-02 16:07:04.116] at org.springframework.web.servlet.DispatcherServlet?.doDispatch(DispatcherServlet?.java:902)
[04-02 16:07:04.116] at org.springframework.web.servlet.DispatcherServlet?.doService(DispatcherServlet?.java:807)
[04-02 16:07:04.116] at org.springframework.web.servlet.FrameworkServlet?.processRequest(FrameworkServlet?.java:571)
[04-02 16:07:04.116] at org.springframework.web.servlet.FrameworkServlet?.doGet(FrameworkServlet?.java:501)
[04-02 16:07:04.116] at javax.servlet.http.HttpServlet?.service(HttpServlet?.java:114)
[04-02 16:07:04.116] at javax.servlet.http.HttpServlet?.service(HttpServlet?.java:91)
[04-02 16:07:04.116] at com.caucho.server.dispatch.ServletFilterChain?.doFilter(ServletFilterChain?.java:103)
[04-02 16:07:04.116] at cn.com.pconline.enterprise.util.UrlRewriteFilter?.doFilter(UrlRewriteFilter?.java:145)
[04-02 16:07:04.116] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-02 16:07:04.116] at com.caucho.filters.GzipFilter?.doFilter(GzipFilter?.java:155)
[04-02 16:07:04.116] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-02 16:07:04.116] at cn.pconline.common.monitor.MonitorFilter?.doFilter(MonitorFilter?.java:88)
[04-02 16:07:04.117] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-02 16:07:04.117] at cn.com.pconline.enterprise.util.InputFilter?.doFilter(InputFilter?.java:106)
[04-02 16:07:04.117] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-02 16:07:04.117] at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter?.doFilterInternal(OpenEntityManagerInVie?
wFilter.java:112)
[04-02 16:07:04.117] at org.springframework.web.filter.OncePerRequestFilter?.doFilter(OncePerRequestFilter?.java:76)
[04-02 16:07:04.117] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-02 16:07:04.117] at cn.com.pconline.enterprise.util.EnvFilter?.doFilter(EnvFilter?.java:34)
[04-02 16:07:04.117] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-02 16:07:04.117] at org.springframework.web.filter.CharacterEncodingFilter?.doFilterInternal(CharacterEncodingFilter?.java:96)
[04-02 16:07:04.117] at org.springframework.web.filter.OncePerRequestFilter?.doFilter(OncePerRequestFilter?.java:76)
[04-02 16:07:04.117] at com.caucho.server.dispatch.FilterFilterChain?.doFilter(FilterFilterChain?.java:87)
[04-02 16:07:04.117] at com.caucho.server.cache.CacheFilterChain?.doFilter(CacheFilterChain?.java:175)
[04-02 16:07:04.117] at com.caucho.server.webapp.WebAppFilterChain?.doFilter(WebAppFilterChain?.java:181)
[04-02 16:07:04.117] at com.caucho.server.dispatch.ServletInvocation?.service(ServletInvocation?.java:266)
[04-02 16:07:04.117] at com.caucho.server.http.HttpRequest?.handleRequest(HttpRequest?.java:268)
[04-02 16:07:04.117] at com.caucho.server.port.TcpConnection?.run(TcpConnection?.java:602)
[04-02 16:07:04.117] at com.caucho.util.ThreadPool?$Item.runTasks(ThreadPool?.java:690)
[04-02 16:07:04.117] at com.caucho.util.ThreadPool?$Item.run(ThreadPool?.java:612)
[04-02 16:07:04.118] at java.lang.Thread.run(Thread.java:619)

Attachments

stderr_m.pconline.log.rar Download (2.4 MB) - added by chenchongqi 15 years ago.

Change History

comment:1 Changed 15 years ago by chenchongqi

  • Description modified (diff)

Changed 15 years ago by chenchongqi

comment:2 Changed 15 years ago by chenyinle

InvalidStateException? 异常,据发现的三个地方均有缓存了实体对象的特征,估计跟实体对象直接缓存在内存中有关,已经做了处理,把数据copy出来再放到内存中,这几天可以观察一下看还会不会出现InvalidStateException就知道了

comment:3 Changed 15 years ago by chenchongqi

观察这的结果显示InvalidStateException还有出现,不过跟以前的有些差别:

[05-14 11:25:32.463] Caused by: <openjpa-1.2.0-r422266:683325 nonfatal user error> org.apache.openjpa.persistence.InvalidStateExcept?
ion: The generated value processing detected an existing value assigned to this field: cn.com.pconline.enterprise.domain.CompanyProd?
uct.id. This existing value was either provided via an initializer or by calling the setter method. You either need to remove the
@GeneratedValue? annotation or modify the code to remove the initializer processing.
[05-14 11:25:32.463] at org.apache.openjpa.util.ApplicationIds?.assign(ApplicationIds?.java:483)
[05-14 11:25:32.463] at org.apache.openjpa.util.ApplicationIds?.assign(ApplicationIds?.java:463)
[05-14 11:25:32.463] at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:682)
[05-14 11:25:32.463] at org.apache.openjpa.kernel.DelegatingStoreManager?.assignObjectId(DelegatingStoreManager?.java:134)
[05-14 11:25:32.463] at org.apache.openjpa.kernel.DelegatingStoreManager?.assignObjectId(DelegatingStoreManager?.java:134)
[05-14 11:25:32.463] at org.apache.openjpa.kernel.StateManagerImpl?.assignObjectId(StateManagerImpl?.java:519)
[05-14 11:25:32.463] at org.apache.openjpa.kernel.StateManagerImpl?.assignObjectId(StateManagerImpl?.java:505)
[05-14 11:25:32.463] at org.apache.openjpa.kernel.StateManagerImpl?.fetchObjectId(StateManagerImpl?.java:1433)
[05-14 11:25:32.463] at cn.com.pconline.enterprise.domain.CompanyProduct?.pcFetchObjectId(CompanyProduct?.java)
[05-14 11:25:32.463] at cn.com.pconline.enterprise.domain.CompanyProductCounter?.pcNewObjectIdInstance(CompanyProductCounter?.java)
[05-14 11:25:32.463] at org.apache.openjpa.util.ApplicationIds?.create(ApplicationIds?.java:421)
[05-14 11:25:32.463] at org.apache.openjpa.kernel.BrokerImpl?.persist(BrokerImpl?.java:2433)
[05-14 11:25:32.463] at org.apache.openjpa.kernel.BrokerImpl?.persist(BrokerImpl?.java:2362)
[05-14 11:25:32.463] at org.apache.openjpa.kernel.SingleFieldManager?.persist(SingleFieldManager?.java:259)
[05-14 11:25:32.463] at org.apache.openjpa.kernel.StateManagerImpl?.cascadePersist(StateManagerImpl?.java:2893)
[05-14 11:25:32.464] at org.apache.openjpa.kernel.BrokerImpl?.persist(BrokerImpl?.java:2457)
[05-14 11:25:32.464] at org.apache.openjpa.kernel.BrokerImpl?.persist(BrokerImpl?.java:2280)
[05-14 11:25:32.464] at org.apache.openjpa.kernel.DelegatingBroker?.persist(DelegatingBroker?.java:1021)
[05-14 11:25:32.464] at org.apache.openjpa.persistence.EntityManagerImpl?.persist(EntityManagerImpl?.java:645)
[05-14 11:25:32.464] at sun.reflect.GeneratedMethodAccessor353.invoke(Unknown Source)
[05-14 11:25:32.464] at sun.reflect.DelegatingMethodAccessorImpl?.invoke(DelegatingMethodAccessorImpl?.java:25)
[05-14 11:25:32.464] at java.lang.reflect.Method.invoke(Method.java:597)
[05-14 11:25:32.464] at org.springframework.orm.jpa.ExtendedEntityManagerCreator?$ExtendedEntityManagerInvocationHandler?.invoke(Ex
tendedEntityManagerCreator.java:358)
[05-14 11:25:32.464] at $Proxy43.persist(Unknown Source)
[05-14 11:25:32.464] at sun.reflect.GeneratedMethodAccessor353.invoke(Unknown Source)
[05-14 11:25:32.464] at sun.reflect.DelegatingMethodAccessorImpl?.invoke(DelegatingMethodAccessorImpl?.java:25)
[05-14 11:25:32.464] at java.lang.reflect.Method.invoke(Method.java:597)
[05-14 11:25:32.464] at org.springframework.orm.jpa.SharedEntityManagerCreator?$SharedEntityManagerInvocationHandler?.invoke(Shared
EntityManagerCreator?.java:198)
[05-14 11:25:32.464] at $Proxy43.persist(Unknown Source)
[05-14 11:25:32.464] at cn.com.pconline.enterprise.service.CompanyProductService?.create(CompanyProductService?.java:115)
[05-14 11:25:32.464] at cn.com.pconline.enterprise.service.CompanyProductService?.insertComProduct(CompanyProductService?.java:1348
)
[05-14 11:25:32.464] at cn.com.pconline.enterprise.service.CompanyProductService?$$FastClassByCGLIB$$819482b5.invoke(<generated>)
[05-14 11:25:32.464] at net.sf.cglib.proxy.MethodProxy?.invoke(MethodProxy?.java:149)
[05-14 11:25:32.464] at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation?.invokeJoinpoint(Cglib2AopProxy.jav
a:700)

Last edited 15 years ago by chenchongqi (previous) (diff)

comment:4 Changed 15 years ago by chenyinle

这种情况跟之前改的三个地方的情况不一样,但有个共同特征,都是缓存了实体对象造成的,这个地方没改到。

这里是批量发布的时候,缓存了new的CompanyProduct对象,前一次发布的时候某个new的CompanyProduct对象创建不成功,但id却成功生成了,而过一段时间再次创建这个CompanyProduct对象的时候,由于此id被占用了,就会一起冲突

try catch的时候应该把缓存的new的CompanyProduct对象的id清0,就应该可以解决问题

comment:5 Changed 15 years ago by chenchongqi

  • Status changed from new to closed
  • Resolution set to fixed
Note: See TracTickets for help on using tickets.