I would put the DataNucleus classes onto debug.  This will then let
you know where you're accidentally modifying your objects in the
background which causes the objects to be flagged as dirty - that will
be the cause of your unexpected writes.

On May 5, 4:13 pm, temrad <[email protected]> wrote:
> I've a strange issue ...
> My application is a JSF one using primefaces. Access to the Datastore
> is protected by a DAO (sort of) layer. JPA is used.
> A page showing a quite great number of entites (just showing, not
> enabling to modify them) ends with the following exception:
>
> Uncaught exception from servlet
> com.google.apphosting.api.ApiProxy$RequestTooLargeException: The
> request to API call datastore_v3.Put() was too large.
>         at com.google.apphosting.runtime.ApiProxyImpl
> $AsyncApiFuture.rpcFinished(ApiProxyImpl.java:270)
>         at com.google.net.rpc.RpcStub$RpcCallbackDispatcher
> $1.runInContext(RpcStub.java:1025)
>         at com.google.tracing.TraceContext$TraceContextRunnable
> $1.run(TraceContext.java:444)
>         at com.google.tracing.TraceContext.runInContext(TraceContext.java:
> 684)
>         at com.google.tracing.TraceContext
> $AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:
> 322)
>         at com.google.tracing.TraceContext
> $AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:
> 314)
>         at com.google.tracing.TraceContext
> $TraceContextRunnable.run(TraceContext.java:442)
>         at com.google.net.rpc.RpcStub
> $RpcCallbackDispatcher.rpcFinished(RpcStub.java:1046)
>         at com.google.net.rpc.RPC.internalFinish(RPC.java:2047)
>         at com.google.net.rpc.impl.RpcNetChannel.finishRpc(RpcNetChannel.java:
> 2338)
>         at
> com.google.net.rpc.impl.RpcNetChannel.messageReceived(RpcNetChannel.java:
> 1265)
>         at
> com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java:
> 319)
>         at
> com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java:
> 290)
>         at com.google.net.async.Connection.handleReadEvent(Connection.java:
> 474)
>         at
> com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java:
> 831)
>         at
> com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java:
> 207)
>         at com.google.net.async.EventDispatcher.loop(EventDispatcher.java:
> 103)
>         at com.google.net.async.GlobalEventRegistry
> $2.runLoop(GlobalEventRegistry.java:95)
>         at com.google.net.async.LoopingEventDispatcher
> $EventDispatcherThread.run(LoopingEventDispatcher.java:378)
>
> I cannot understand how a read only list can fail on a "write error"
> operation.
> The snippet of the method that causes the eror is the following:
>
>         public List<AlarmDTO> getAlarmsByUser(final String uId) {
>                 final List<AlarmDTO> result = new ArrayList<AlarmDTO>();
>                 execute(new Runnable() {
>                         public void run(EntityManager em) {
>                                 User user = em.find(User.class, uId);
>                                 List<Alarm> alarms = 
> (List<Alarm>)user.getAlarms();
>                                 em.clear();
>                                 for (Alarm alarm : alarms) {
>                                         AlarmDTO alarmDTO = new AlarmDTO();
>                                         hydrateDTO(alarmDTO, alarm);
>                                         result.add(alarmDTO);
>                                 }
>                         }
>                 });
>                 return result;
>         }
>
> The "execute" method just creates an entityManager, open a transaction
> before calling the run method and then, call commit or rollback at the
> end.
>
> hydrateDTO copies values from the JPA entity alarm to the AlarmDTO.
>
> I've tried to execute this method outside any transaction. The result
> is the same ...
>
> Can someone can explain me why GAE try to write something and what it
> tries to write ...
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Google App Engine for Java" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group 
> athttp://groups.google.com/group/google-appengine-java?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to