Hi,

JPA makes me mad these days ;-) I have a simple DAO which might produce invalid 
JPAQL.

@Repository
@Transactional
public class MetaDataDaoImpl implements MetaDataDao {

public Object getClientMetaDataByObjName(String objname, long client) {
        Query query = em.createQuery("select x from " + objname + " x where 
x.client =  " + client);
        Object o;
        try {
            o = query.getSingleResult();
        } catch (Exception e) {
           return null;
        }
        return o;
    }
}

There are cases where "objname" is an invalid identifier and i cant prevent 
this. So i thought i just return null in this case. Of course i am getting the 
expected org.apache.openjpa.persistence.ArgumentException in the try block.

So i get into the catch block and the CALLER should proceed, but in fact, when 
leaving this method, the CALLER never gets the chance to proceed because of the 
exception below.

First of all i dont know why he want to commit() something in a method where i 
dont modify any object. In fact i dont even get an object back which i could 
change. I also tried "read only" with a seperate Transaction attribute on the 
method and i also tried a REQUIRES_NEW, just to be sure that i am not wihin a 
larger transaction block, which i am not.

When i move the try catch block to the caller and throwing the exeption from 
the DAO, i can proceed and ignore the stuff in the caller. But why doesnt it 
work the way i ve done it?


---

javax.servlet.ServletException: org.springframework.orm.jpa.JpaSystemException: 
The transaction cannot be committed, because it was already marked for rollback 
only. The transaction will be rolled back instead. The cause of the 
rollback-only status is reported in the embedded stack.; nested exception is 
org.apache.openjpa.persistence.PersistenceException: The transaction cannot be 
committed, because it was already marked for rollback only. The transaction 
will be rolled back instead. The cause of the rollback-only status is reported 
in the embedded stack. at 
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:520)
 at 
com.cc.framework.adapter.struts.FWRequestProcessor.processActionPerform(Unknown 
Source) at 
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228) at 
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) at 
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at 
de.netversys.util.filter.CheckSessionFilter.doFilter(CheckSessionFilter.java:50)
 at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at 
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
 at 
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) 
at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
 at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at 
java.lang.Thread.run(Thread.java:619) Caused by: 
org.springframework.orm.jpa.JpaSystemException: The transaction cannot be 
committed, because it was already marked for rollback only. The transaction 
will be rolled back instead. The cause of the rollback-only status is reported 
in the embedded stack.; nested exception is 
org.apache.openjpa.persistence.PersistenceException: The transaction cannot be 
committed, because it was already marked for rollback only. The transaction 
will be rolled back instead. The cause of the rollback-only status is reported 
in the embedded stack. at 
org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:296)
 at 
org.springframework.orm.jpa.DefaultJpaDialect.translateExceptionIfPossible(DefaultJpaDialect.java:120)
 at 
org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:460)
 at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
 at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)
 at 
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
 at 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
 at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
 at $Proxy12.getClientMetaDataByObjName(Unknown Source) at 
de.netversys.process.AbstractProductEvaluator.getBasicClientMetaData(AbstractProductEvaluator.java:108)
 at 
de.netversys.process.PossibleProductsEvaluator.getPossibleProducts(PossibleProductsEvaluator.java:119)
 at 
de.netversys.action.frontend.DoWeightingAction.doExecute(DoWeightingAction.java:183)
 at de.netversys.action.frontend.FrontendAction.execute(FrontendAction.java:63) 
at 
de.logentis.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:105)
 at com.cc.framework.adapter.struts.RequestProcessorUtil.processAction(Unknown 
Source) ... 25 more Caused by: 
org.apache.openjpa.persistence.PersistenceException: The transaction cannot be 
committed, because it was already marked for rollback only. The transaction 
will be rolled back instead. The cause of the rollback-only status is reported 
in the embedded stack. at 
org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:89)
 at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1350) at 
org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:877) at 
org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:512)
 at 
org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:456)
 ... 38 more Caused by: org.apache.openjpa.persistence.ArgumentException: An 
error occurred while parsing the query filter "select x from 
MdExekutiveTransport x where x.client = 50". Error message: The name 
"MdExekutiveTransport" is not a recognized entity or identifier. Perhaps you 
meant MdSeurDefault, which is a close match. Known entity names: [User, 
CarrierMapping,] at 
org.apache.openjpa.kernel.exps.AbstractExpressionBuilder.parseException(AbstractExpressionBuilder.java:118)
 at 
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getClassMetaData(JPQLExpressionBuilder.java:177)
 at 
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.resolveClassMetaData(JPQLExpressionBuilder.java:150)
 at 
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:225)
 at 
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:195)
 at 
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateType(JPQLExpressionBuilder.java:188)
 at 
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.access$600(JPQLExpressionBuilder.java:69)
 at 
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.populate(JPQLExpressionBuilder.java:1756)
 at org.apache.openjpa.kernel.jpql.JPQLParser.populate(JPQLParser.java:56) at 
org.apache.openjpa.kernel.ExpressionStoreQuery.populateFromCompilation(ExpressionStoreQuery.java:153)
 at org.apache.openjpa.kernel.QueryImpl.newCompilation(QueryImpl.java:658) at 
org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:639) at 
org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:605) 
at org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:667) 
at org.apache.openjpa.kernel.QueryImpl.getOperation(QueryImpl.java:1492) at 
org.apache.openjpa.kernel.DelegatingQuery.getOperation(DelegatingQuery.java:123)
 at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:243) at 
org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:316) at 
de.netversys.dao.impl.MetaDataDaoImpl.getClientMetaDataByObjName(MetaDataDaoImpl.java:74)
 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:597) at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
 at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
 at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
 at 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
 ... 34 more

-- 
Marc Logemann - LOGENTIS GmbH
geschäftsführender Gesellschafter
Westerbreite 7 - 49084 Osnabrück
Tel. +49 (0)541 - 80049791
Fax  +49 (0)541 - 9778172
Mob. +49 (0)177 - 8220182
http://www.logentis.de
m...@logentis.de

*** Enterprise Versandlogistik: http://www.netversys.de

Sitz der Gesellschaft: Osnabrück | Geschäftsführer: Marc Logemann | 
Handelsregisternummer: Amtsgericht Osnabrück, HRB 201057 | UstIdNr: DE 814858920

Reply via email to