嗨,也许这是一个愚蠢的问题,但目前我正在测试将扳手与 appengine 一起使用。但是,即使在本地或远程环境中运行一个空事务,我也有问题。我已经尝试过 mvm 和 flex。
我基本上所做的只是运行一个微不足道的事务
System.out.println("HELLO")
TransactionRunner.TransactionCallable callable = new TransactionRunner.TransactionCallable<Void>() {
@Nullable
@Override
public Void run(TransactionContext transaction) throws Exception {
System.out.println("WORLD")
}}
databaseClient.readWriteTransaction().run(callable);
然而,这段代码似乎在最后一行被阻塞,并且需要永远返回。我在 appengine 之外尝试了相同的代码(以及更复杂的事务逻辑),它按预期工作。
同样,这是我尝试遵循的非常简单的示例,但是我无法理解。所以我想知道什么可能会出错。
编辑:
对不起,我的错,我不认为这是交易的问题。我试过只是做一个singeUse读取它也永远阻塞。所以我怀疑我需要为 appengine 上的扳手设置一些权限问题?但是我真的在文档中的任何地方都找不到它...
编辑:
稍等片刻,得到这样的stacktrace
Exception in thread "grpc-default-executor-0" java.lang.NullPointerException
at com.google.appengine.tools.development.RequestEndListenerHelper.getListeners(RequestEndListenerHelper.java:52)
at com.google.appengine.tools.development.RequestEndListenerHelper.register(RequestEndListenerHelper.java:39)
at com.google.appengine.tools.development.RequestThreadFactory$1$1.start(RequestThreadFactory.java:65)
at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:950)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1368)
at io.grpc.auth.GoogleAuthLibraryCallCredentials.applyRequestMetadata(GoogleAuthLibraryCallCredentials.java:100)
at io.grpc.internal.CallCredentialsApplyingTransportFactory$CallCredentialsApplyingTransport.newStream(CallCredentialsApplyingTransportFactory.java:98)
at io.grpc.internal.DelayedClientTransport$PendingStream.createRealStream(DelayedClientTransport.java:392)
at io.grpc.internal.DelayedClientTransport$PendingStream.access$100(DelayedClientTransport.java:379)
at io.grpc.internal.DelayedClientTransport$2.run(DelayedClientTransport.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at com.google.appengine.tools.development.RequestThreadFactory$1$1$2.run(RequestThreadFactory.java:110)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.appengine.tools.development.RequestThreadFactory$1$1.run(RequestThreadFactory.java:107)