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 google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to