openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chris Ward (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-324) The MetaDataRepository class is not thread safe. Initialization under heavy load on a multi CPU/Core systems throws exceptions.
Date Mon, 20 Aug 2007 18:23:30 GMT

    [ https://issues.apache.org/jira/browse/OPENJPA-324?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12521185
] 

Chris Ward commented on OPENJPA-324:
------------------------------------

I forgot to include the stack trace:

13:13:10,129 ERROR [QIPImpl] com.symcor.sis.tecp.qip.dao.exception.PersistenceException: Runtime
Exception encountered while querying Header_Record.
com.symcor.sis.tecp.qip.dao.exception.PersistenceException: Runtime Exception encountered
while querying Header_Record.
        at com.symcor.sis.tecp.qip.dao.HeaderDAOImpl.persistIfNotPresent(HeaderDAOImpl.java:45)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:281)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:187)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:210)
        at $Proxy422.persistIfNotPresent(Unknown Source)
        at com.symcor.sis.tecp.qip.delegate.QIPFileItemDelegateImpl.save(QIPFileItemDelegateImpl.java:58)
        at com.symcor.sis.tecp.qip.QIPImpl.save(QIPImpl.java:36)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.sun.xml.ws.api.server.InstanceResolver$1.invoke(InstanceResolver.java:210)
        at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:132)
        at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:241)
        at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:74)
        at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:559)
        at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:518)
        at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:503)
        at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:400)
        at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:226)
        at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:375)
        at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:175)
        at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:134)
        at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:159)
        at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:49)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:615)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
        at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:342)
        at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:31)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: The type "class com.symcor.sis.sisinternal.Header"
has not been enhanced.; nest
ed exception is <4|true|0.9.6-incubating> org.apache.openjpa.persistence.ArgumentException:
The type "class com.symcor.sis.sisinternal.Header" has not
 been enhanced.
        at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:190)
        at org.springframework.orm.jpa.DefaultJpaDialect.translateExceptionIfPossible(DefaultJpaDialect.java:113)
        at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:212)
        at org.springframework.orm.jpa.JpaAccessor.translateIfNecessary(JpaAccessor.java:152)
        at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:196)
        at org.springframework.orm.jpa.JpaTemplate.executeFind(JpaTemplate.java:158)
        at org.springframework.orm.jpa.JpaTemplate.find(JpaTemplate.java:305)
        at com.symcor.sis.tecp.qip.dao.HeaderDAOImpl.persistIfNotPresent(HeaderDAOImpl.java:42)
        ... 51 more
Caused by: <4|true|0.9.6-incubating> org.apache.openjpa.persistence.ArgumentException:
The type "class com.symcor.sis.sisinternal.Header" has not been
 enhanced.
        at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1590)
        at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1564)
        at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:654)
        at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:554)
        at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:479)
        at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:283)
        at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:519)
        at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:479)
        at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:283)
        at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:338)
        at org.apache.openjpa.kernel.QueryImpl.classForName(QueryImpl.java:1540)
        at org.apache.openjpa.kernel.ExpressionStoreQuery$1.classForName(ExpressionStoreQuery.java:104)
        at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getClassMetaData(JPQLExpressionBuilder.java:160)
        at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.resolveClassMetaData(JPQLExpressionBuilder.java:131)
        at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:211)
        at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:181)
        at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateType(JPQLExpressionBuilder.java:174)
        at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.access$500(JPQLExpressionBuilder.java:61)
        at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.populate(JPQLExpressionBuilder.java:1657)
        at org.apache.openjpa.kernel.jpql.JPQLParser.populate(JPQLParser.java:52)
        at org.apache.openjpa.kernel.ExpressionStoreQuery.populateFromCompilation(ExpressionStoreQuery.java:145)
        at org.apache.openjpa.kernel.QueryImpl.newCompilation(QueryImpl.java:642)
        at org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:623)
        at org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:589)
        at org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:651)
        at org.apache.openjpa.kernel.QueryImpl.getOperation(QueryImpl.java:1464)
        at org.apache.openjpa.kernel.DelegatingQuery.getOperation(DelegatingQuery.java:120)
        at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:202)
        at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:251)
        at org.springframework.orm.jpa.JpaTemplate$9.doInJpa(JpaTemplate.java:313)
        at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:191)
        ... 54 more


> The MetaDataRepository class is not thread safe.  Initialization under heavy load on
a multi CPU/Core systems throws exceptions.
> --------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-324
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-324
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 0.9.6, 0.9.7
>         Environment: I have reproduced the problem in Windows and in Solaris.  It only
affects multi core/CPU systems.  I haven't reproduced the problem on single core systems.
> I am using Spring 2.0.2 and OpenJPA 0.9.6 with an Oracle 10g database.
>            Reporter: Chris Ward
>         Attachments: MetaDataRepository.java
>
>
> OpenJPA's MetaDataRepository fails to load metadata for classess when multiple threads
use the same EntityManagerFactory class to resolve the metadata.  The MetaDataRepository implementation
is not thread safe.The problem only occurrs on multi core or multi processor machines that
can concurrently try to initialize meta data for classes.
> To reproduce the problem I have inserted a sleep statement within the code to help reproduce
the problem consistently.  I have commented out the sleep statement in my deployed version
of the class.
> This bug is sort of related to issue 250.  I have cleaned up all of the synchronization
in the class.  There should be less contention, however it could still be better if a ReentrantReadWriteLock
was used.  I noticed that someone had posted a new MetaDataRepository with a ReentrantReadWriteLock,
but too seems to have the same issues.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message