Pat*_*ick 6 java google-app-engine unit-testing transactions jdo
我在app engine java jdo中有一个跨组事务.
它在本地dev应用程序引擎服务器上运行良好.
但是,从单元测试中,我得到了一个java.lang.IllegalArgumentException: transactions on multiple entity groups only allowed in High Replication applications.
是否可以使用LocalServiceTestHelper模拟高复制应用程序?
我使用的是1.6.6.
这是我的课程,您可以按原样运行它来重现:
public class Ds2Test {
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());
private static final PersistenceManagerFactory pmfXgInstance =
JDOHelper.getPersistenceManagerFactory("xg-transactions");
@Before
public void setUp() {
helper.setUp();
}
@After
public void tearDown() {
helper.tearDown();
}
@Test
public void testXgTransaction() throws Exception {
PersistenceManager xgPm = pmfXgInstance.getPersistenceManager();
Transaction xgTx = xgPm.currentTransaction();
xgTx.begin();
xgTx.commit();
xgPm.close();
}
}
Run Code Online (Sandbox Code Playgroud)
这是jdoconfig.xml中的配置:
<persistence-manager-factory name="xg-transactions">
<property name="javax.jdo.PersistenceManagerFactoryClass"
value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
<property name="javax.jdo.option.ConnectionURL" value="appengine"/>
<property name="javax.jdo.option.NontransactionalRead" value="true"/>
<property name="javax.jdo.option.NontransactionalWrite" value="true"/>
<property name="javax.jdo.option.RetainValues" value="true"/>
<property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
<property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true"/>
</persistence-manager-factory>
Run Code Online (Sandbox Code Playgroud)
抛出异常 xgTx.begin();
Pat*_*ick 15
好.我找到了需要做的事情.
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()**.setDefaultHighRepJobPolicyUnappliedJobPercentage(100))**;
Run Code Online (Sandbox Code Playgroud)
如上所示:https://developers.google.com/appengine/docs/java/tools/localunittesting#Writing_HRD_Datastore_Tests
有点模糊的设置,但它确实存在.