[英]AppEngine ClassNotFoundException: com.google.appengine.api.datastore.DatastoreServiceFactory
[英]com.google.appengine.api.datastore.DatastoreFailureException: Unexpected failure
我遇到異常com.google.appengine.api.datastore.DatastoreFailureException: Unexpected failure
嘗試通過Google App Engine實現jBehave時com.google.appengine.api.datastore.DatastoreFailureException: Unexpected failure
。 jBehave本質上是在junit之上運行的,所以我認為jBehave本身不是問題。
在測試的每3次運行中,大約有1次拋出此異常。 我認為這可能是與LocalServiceTestHelper的一致性問題,所以我嘗試了各種配置LocalServiceTestHelper的方法,這些方法應該通過確保數據到達數據庫並可以出於測試目的而讀取的方式來簡化測試。
嘗試#1:
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper((new LocalDatastoreServiceTestConfig()));
嘗試#2:
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper((new LocalDatastoreServiceTestConfig())
.setDefaultHighRepJobPolicyUnappliedJobPercentage(0));
嘗試#3:
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper((new LocalDatastoreServiceTestConfig())
.setApplyAllHighRepJobPolicy());
但是,所有這些嘗試都導致了相同的問題,即測試的每3次運行中大約有1次發生了DatastoreFailureException。
這是完整的堆棧跟蹤:
Processing system properties {}
Using controls EmbedderControls[batch=false,skip=false,generateViewAfterStories=true,ignoreFailureInStories=false,ignoreFailureInView=false,verboseFailures=false,verboseFiltering=false,storyTimeoutInSecs=300,failOnStoryTimeout=false,threads=1]
(BeforeStories)
Running story com/uluvit/backend/acceptance/user_can_log_in_using_email.story
User can send assumption what its partner think
(com/uluvit/backend/acceptance/user_can_log_in_using_email.story)
Narrative:
As a user
I want to log in using my email account which was registered before
So that I can start playing
Scenario:
(AfterStories)
Generating reports view to '/Users/mosofsky/Developer/UluvitServer/uluvit-backend-war/target/jbehave' using formats '[stats, console, txt]' and view properties '{navigator=ftl/jbehave-navigator.ftl, views=ftl/jbehave-views.ftl, reports=ftl/jbehave-reports-with-totals.ftl, nonDecorated=ftl/jbehave-report-non-decorated.ftl, decorated=ftl/jbehave-report-decorated.ftl, maps=ftl/jbehave-maps.ftl}'
Given A user John Test with email john@test.com and password test123 (FAILED)
(com.google.appengine.api.datastore.DatastoreFailureException: Unexpected failure)
Nov 11, 2014 3:38:08 AM com.google.appengine.api.datastore.dev.LocalDatastoreService init
INFO: Local Datastore initialized:
Type: Master/Slave
Storage: In-memory
When I log in using email john@test.com and password test123 (NOT PERFORMED)
Then I should see main screen (NOT PERFORMED)
org.jbehave.core.failures.UUIDExceptionWrapper: Given A user John Test with email john@test.com and password test123
at org.jbehave.core.steps.StepCreator$ParametrisedStep.perform(StepCreator.java:609)
at org.jbehave.core.embedder.StoryRunner$FineSoFar.run(StoryRunner.java:535)
at org.jbehave.core.embedder.StoryRunner.runStepsWhileKeepingState(StoryRunner.java:515)
at org.jbehave.core.embedder.StoryRunner.runScenarioSteps(StoryRunner.java:479)
at org.jbehave.core.embedder.StoryRunner.runStepsWithLifecycle(StoryRunner.java:445)
at org.jbehave.core.embedder.StoryRunner.runCancellable(StoryRunner.java:305)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:220)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:181)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:255)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.google.appengine.api.datastore.DatastoreFailureException: Unexpected failure
at com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java:74)
at com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:32)
at com.google.appengine.api.datastore.QueryResultsSourceImpl.peekQueryResultAndIfFirstRecordIndexList(QueryResultsSourceImpl.java:161)
at com.google.appengine.api.datastore.QueryResultsSourceImpl.loadMoreEntities(QueryResultsSourceImpl.java:104)
at com.google.appengine.api.datastore.QueryResultsSourceImpl.loadMoreEntities(QueryResultsSourceImpl.java:91)
at com.google.appengine.api.datastore.QueryResultIteratorImpl.ensureLoaded(QueryResultIteratorImpl.java:142)
at com.google.appengine.api.datastore.QueryResultIteratorImpl.hasNext(QueryResultIteratorImpl.java:62)
at com.googlecode.objectify.impl.KeysOnlyIterator.hasNext(KeysOnlyIterator.java:29)
at com.googlecode.objectify.impl.ChunkIterator.next(ChunkIterator.java:48)
at com.googlecode.objectify.impl.ChunkIterator.next(ChunkIterator.java:20)
at com.google.common.collect.Iterators$5.hasNext(Iterators.java:548)
at com.google.common.collect.Iterators$PeekingImpl.hasNext(Iterators.java:1149)
at com.googlecode.objectify.impl.ChunkingIterator.hasNext(ChunkingIterator.java:51)
at com.google.common.collect.Iterators.addAll(Iterators.java:361)
at com.google.common.collect.Lists.newArrayList(Lists.java:160)
at com.google.common.collect.Lists.newArrayList(Lists.java:144)
at com.googlecode.objectify.util.MakeListResult.translate(MakeListResult.java:21)
at com.googlecode.objectify.util.MakeListResult.translate(MakeListResult.java:11)
at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
at com.googlecode.objectify.util.ResultProxy.invoke(ResultProxy.java:34)
at com.sun.proxy.$Proxy37.size(Unknown Source)
at com.uluvit.backend.domain.repository.GoogleStoreUserRepository.findByEmail(GoogleStoreUserRepository.java:59)
at com.uluvit.backend.domain.repository.GoogleStoreUserRepository.persist(GoogleStoreUserRepository.java:25)
at com.uluvit.backend.acceptance.UluvitSteps.givenAUserWithEmailAndPassword(UluvitSteps.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.jbehave.core.steps.StepCreator$ParametrisedStep.perform(StepCreator.java:595)
... 13 more
Caused by: java.lang.InterruptedException
at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:400)
at java.util.concurrent.FutureTask.get(FutureTask.java:187)
at com.google.appengine.tools.development.ApiProxyLocalImpl$PrivilegedApiAction$1.get(ApiProxyLocalImpl.java:304)
at com.google.appengine.tools.development.ApiProxyLocalImpl$PrivilegedApiAction$1.get(ApiProxyLocalImpl.java:271)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:86)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:86)
at com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java:71)
... 42 more
Reports view generated with 0 stories (of which 0 pending) containing 0 scenarios (of which 0 pending)
從JBehave 3.9.4升級到3.9.5可以解決此問題。 它還解決了這個問題: 生命周期配置未涵蓋插件執行(JBossas 7 EAR原型)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.