users@glassfish.java.net

Re: EJB Transaction error with Named queries

From: Marina Vatkina <Marina.Vatkina_at_Sun.COM>
Date: Wed, 28 Mar 2007 13:03:57 -0700

Hi Glen,

Do you see the same behavior with the latest V2 build?

thanks,
-marina

Drinkwater, GJ (Glen) wrote:
>
> Hi
>
> I have a problem with transactions using glassfish UR1.
>
> I have a web method on a ejb stateless session bean that calls a native
> query and maps it to a entity class and returns the results. The query
> is just a select so i dont need a tranaction and therefore i have used
> @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) on the
> method.
>
> The entity class lookes like
>
>
> @NamedNativeQueries({
> @NamedNativeQuery(name =
> "test", query= "SELECT DISTINCT ID FROM INVESTIGATION where ID = 10",
> resultSetMapping="investigationMapping")
> })
>
> @SqlResultSetMappings({
> @SqlResultSetMapping(name="investigationMapping",entities={_at_EntityResult
> (entityClass=Investigation.class)}),
> })
>
> Now if i put this in my ejb method call the method works fine
>
> Collection<Investigation> investigations =
> manager.createNativeQuery(""SELECT DISTINCT ID FROM INVESTIGATION where
> ID = 11915480",Investigation.class).getResultList();
>
> but if i change it to use the NamedNativeQueries in the entity class
> like this
>
> Collection<Investigation> investigations =
> manager.createNamedQuery("test").getResultList();
>
> I get an exception, see below for full stack trace, saying
>
> Exception Description: Error binding to externally managed transaction
> Internal Exception: java.lang.IllegalStateException: Operation not
> allowed
>
> If i annotate the method with REQUIRES_NEW the method again works.
> Since this method is a select query it does not need a transaction but
> when the entitymanager executes this with createNamedQuery it seems to
> try to use a transaction. Why is this??
>
> What happens differently with createNamedQuery than createNativeQuery
> ????
>
>
> Exception Description: Error binding to externally managed transaction
> Internal Exception: java.lang.IllegalStateException: Operation not
> allowed
> at
> oracle.toplink.essentials.exceptions.TransactionException.errorBeginning
> ExternalTransaction(TransactionException.java:87)
> at
> oracle.toplink.essentials.transaction.AbstractTransactionController.begi
> nTransaction(AbstractTransactionController.java:125)
> at
> oracle.toplink.essentials.internal.sessions.AbstractSession.beginExterna
> lTransaction(AbstractSession.java:334)
> at
> oracle.toplink.essentials.internal.sessions.AbstractSession.beginTransac
> tion(AbstractSession.java:365)
> at
> oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.beginTransact
> ion(UnitOfWorkImpl.java:419)
> at
> oracle.toplink.essentials.queryframework.ResultSetMappingQuery.executeDa
> tabaseQuery(ResultSetMappingQuery.java:173)
> at
> oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQ
> uery.java:609)
> at
> oracle.toplink.essentials.queryframework.DatabaseQuery.executeInUnitOfWo
> rk(DatabaseQuery.java:536)
> at
> oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecu
> teQuery(UnitOfWorkImpl.java:2218)
> at
> oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery
> (AbstractSession.java:937)
> at
> oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery
> (AbstractSession.java:909)
> at
> oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.executeRea
> dQuery(EJBQueryImpl.java:346)
> at
> oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.getResultL
> ist(EJBQueryImpl.java:447)
> at
> com.sun.enterprise.util.QueryWrapper.getResultList(QueryWrapper.java:154
> )
> at uk.icat3.sessionbeans.search.Search.testThisException(Unknown
> Source)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
> a:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
> Impl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJB
> SecurityManager.java:1050)
> at
> com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:165)
> at
> com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java
> :3866)
> at
> com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(Int
> erceptorManager.java:414)
> at com.sun.ejb.Invocation.proceed(Invocation.java:373)
> at uk.icat3.sessionbeans.EJBObject.logMethods(Unknown Source)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
> a:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
> Impl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> com.sun.ejb.containers.interceptors.BeanAroundInvokeInterceptor$1.run(In
> terceptorManager.java:523)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> com.sun.ejb.containers.interceptors.BeanAroundInvokeInterceptor.intercep
> t(InterceptorManager.java:517)
> at
> com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(Int
> erceptorManager.java:414)
> at
> com.sun.ejb.containers.interceptors.InterceptorManager.intercept(Interce
> ptorManager.java:188)
> at
> com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:3839)
> at
> com.sun.ejb.containers.WebServiceInvocationHandler.invoke(WebServiceInvo
> cationHandler.java:147)
> at $Proxy134.testThisException(Unknown Source)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
> a:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
> Impl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at com.sun.xml.ws.server.PeptTie._invoke(PeptTie.java:61)
> at
> com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher.invokeEndpoint
> (SOAPMessageDispatcher.java:280)
> at
> com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher$SoapInvoker.in
> voke(SOAPMessageDispatcher.java:588)
> at
> com.sun.xml.ws.protocol.soap.server.SOAPMessageDispatcher.receive(SOAPMe
> ssageDispatcher.java:147)
> at com.sun.xml.ws.server.Tie.handle(Tie.java:90)
> at
> com.sun.enterprise.webservice.Ejb3MessageDispatcher.handlePost(Ejb3Messa
> geDispatcher.java:160)
> at
> com.sun.enterprise.webservice.Ejb3MessageDispatcher.invoke(Ejb3MessageDi
> spatcher.java:89)
> at
> com.sun.enterprise.webservice.EjbWebServiceServlet.dispatchToEjbEndpoint
> (EjbWebServiceServlet.java:186)
> at
> com.sun.enterprise.webservice.EjbWebServiceServlet.service(EjbWebService
> Servlet.java:117)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
> at
> com.sun.enterprise.web.AdHocContextValve.invoke(AdHocContextValve.java:1
> 01)
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
> :566)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
> 36)
> at
> com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:71)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
> :182)
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
> :566)
> at
> com.sun.enterprise.web.VirtualServerPipeline.invoke(VirtualServerPipelin
> e.java:120)
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
> java:137)
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
> :566)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
> 36)
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)
> at
> org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:239)
> at
> com.sun.enterprise.web.connector.grizzly.ProcessorTask.invokeAdapter(Pro
> cessorTask.java:667)
> at
> com.sun.enterprise.web.connector.grizzly.ProcessorTask.processNonBlocked
> (ProcessorTask.java:574)
> at
> com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(Processor
> Task.java:844)
> at
> com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(R
> eadTask.java:287)
> at
> com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:2
> 12)
> at
> com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:252)
> at
> com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.j
> ava:75)
> Caused by: java.lang.IllegalStateException: Operation not allowed
> at
> com.sun.ejb.containers.PMTransactionManagerImpl.begin(PMTransactionManag
> erImpl.java:80)
> at
> oracle.toplink.essentials.transaction.JTATransactionController.beginTran
> saction_impl(JTATransactionController.java:130)
> at
> oracle.toplink.essentials.transaction.AbstractTransactionController.begi
> nTransaction(AbstractTransactionController.java:121)
> ... 69 more
>
>
> Glen
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_glassfish.dev.java.net
> For additional commands, e-mail: users-help_at_glassfish.dev.java.net
>