GVKun编程网logo

在提交中途使用AbstractTransactionalJUnit4SpringContextTests

16

本文将为您提供关于在提交中途使用AbstractTransactionalJUnit4SpringContextTests的详细介绍,同时,我们还将为您提供关于c#将DbContextTransact

本文将为您提供关于在提交中途使用AbstractTransactionalJUnit4SpringContextTests的详细介绍,同时,我们还将为您提供关于c#将DbContextTransaction转换为SqlTransaction、ios – SKPaymentTransaction的originalTransaction.transactionReceipt为非易耗品还原、iOS:SKPaymentTransactionStateRestored originalTransaction == nil、java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout的实用信息。

本文目录一览:

在提交中途使用AbstractTransactionalJUnit4SpringContextTests

在提交中途使用AbstractTransactionalJUnit4SpringContextTests

我们想要一个运行多个线程的简单单元测试-这个想法是主线程将保存提交到数据库,然后等待辅助线程将其拾取。

我们发现必须为第二个线程提交事务才能查询数据库并找到项目。否则,它将不存在。

我们正在尝试使用H2数据库,由Hibernate管理访问以及单元测试扩展来完成此任务AbstractTransactionalJUnit4SpringContextTests

当我们尝试commit()现有交易时:

... // Create and save our model objectsessionFactory.getCurrentSession().getTransaction().commit();sessionFactory.getCurrentSession().beginTransaction();... // Create and start second Thread, query, etc.

我们收到错误:

org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started    at org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:484)    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)    at org.springframework.test.context.transaction.TransactionalTestExecutionListener$TransactionContext.endTransaction(TransactionalTestExecutionListener.java:521)`

但是,当我们尝试仅扩展AbstractJUnit4SpringContextTests并使用@Transactional注释时:

@TransactionConfiguration(defaultRollback=false, transactionManager="transactionManager")@Transactional()public class DatabaseIntegrityTest extends AbstractJUnit4SpringContextTests {

使用上面相同的提交代码,我们将收到:

org.hibernate.HibernateException: No Session found for current thread    at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1041)

在我们第一次致电时getCurrentSession()

有没有办法在JUnit事务性Spring测试中进行提交?

此外,当我们尝试使用创建嵌套事务时AbstractTransactionalJUnit4SpringContextTests,我们收到:

org.hibernate.TransactionException: nested transactions not supported    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:152)    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1396)

用答案编辑:

多亏了axtavt,我得以通过以下方式解决问题:

1)扩展 AbstractJUnit4SpringContextTests

2)将@Autowired用于PlatformTransactionManager

   @Autowired   protected PlatformTransactionManager transactionManager;

3)将我的交易代码放入其中:

TransactionStatus status = transactionManager.getTransaction(null);... // The Model-Saving CodetransactionManager.commit(status);

答案1

小编典典

因此,您需要在测试方法内创建多个事务。如您所见,您不能使用AbstractTransactionalJUnit4SpringContextTests,因为它会为整个测试方法创建一个事务,而不能使用nude
AbstractJUnit4SpringContextTests,因为它根本不会创建任何事务。

解决方案是以AbstractJUnit4SpringContextTests编程方式在测试方法内部使用和管理事务。

您需要按照11.6程序化交易管理中所述注入PlatformTransactionManager测试,TransactionTemplate从测试中创建并使用它来划分事务。

c#将DbContextTransaction转换为SqlTransaction

c#将DbContextTransaction转换为SqlTransaction

我试图在DbContext下使用sqlBulkcopy.我的sql连接字符串具有UserId和Password,这就是将连接对象传递给sqlBulkcopy的原因我正在创建具有sqlCredential的sqlConnection对象并将sqlConnection对象传递给sqlBulkcopy.我的sqlBulkcopy初始化如下所示.
using (var conn = new sqlConnection("",cred))
{
   using (var bulkcopy = new sqlBulkcopy("",sqlBulkcopyOptions.CheckConstraints |
sqlBulkcopyOptions.KeepNulls,DbContext.Database.CurrentTransaction))
   { 
    // bulkcopy code 
   }
 }

但这里的问题是构造函数的第三个参数应该是sqlTransaction.在我的情况下,我已经有了我的DbContext,它与我的服务交易一起登记.

如何将DbContextTransaction(DbContext.Database.CurrentTransaction)转换为sqlTransaction.

解决方法

您需要dbContext或IDbTransaction的实例来获取UnderlyingTransaction:

的DbContext:

var bulkcopy = new sqlBulkcopy("",sqlBulkcopyOptions.CheckConstraints | sqlBulkcopyOptions.KeepNulls,(myDbContext.Database.CurrentTransaction.UnderlyingTransaction) as sqlTransaction)) ;

IDbTransaction:

using (IDbTransaction tran = conn.BeginTransaction())
{
  var bulkcopy = new sqlBulkcopy("",tran as sqlTransaction);
}

sqlTransaction继承自DbTransaction!

注意:

默认情况下,批量复制操作作为隔离操作执行.批量复制操作以非事务方式发生,没有机会将其回滚.如果在发生错误时需要回滚全部或部分批量复制,则可以使用sqlBulkcopy管理的事务,在现有事务中执行批量复制操作(如在DbContext示例中并将其作为参数传递为可选),或者在IDbTransaction的示例中登记在Transaction中.

ios – SKPaymentTransaction的originalTransaction.transactionReceipt为非易耗品还原

ios – SKPaymentTransaction的originalTransaction.transactionReceipt为非易耗品还原

在调用restoreCompletedTransactions之后,对于非消耗品,正在返回的SKPaymentTransactions在其originalTransaction.transactionReceipt属性中似乎为nil.这是文档说我们应该找到原始transactionReceipt的地方:

https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/MakingaPurchase/MakingaPurchase.html#//apple_ref/doc/uid/TP40008267-CH3-SW2

有没有人真的得到这个不是零 – 如果是这样,怎么样?

在返回的SKPaymentTransactions中,看起来实际上正确的transactionReceipt在其transactionReceipt属性中(而不是它们的originalTransaction.transactionReceipt属性).

解决方法

它也发生在我身上.

这很奇怪,但即使Apple在其文档中声明在originalTransaction中找到了transactionReceipt,我在原始的SKPaymentTransaction类中找到了transactionReceipt.

所以,在选择要传递的事务之前,我已经设置了一点检查:

SKPaymentTransaction *passedTransaction = nil;
if (transaction.transactionReceipt) {
    passedTransaction = transaction;
} else if (transaction.originalTransaction.transactionReceipt) {
    passedTransaction = transaction.originalTransaction;
}

iOS:SKPaymentTransactionStateRestored originalTransaction == nil

iOS:SKPaymentTransactionStateRestored originalTransaction == nil

我有一个可以自动更新订阅的应用程序,但是如果用户删除该应用程序,并尝试在以后恢复订阅,那么这些应用程序的购买是不错的,我没有收回预期的数据.

根据apple docs,我应该收到初始交易的详细信息,在大多数情况下,在沙箱上,这正是发生了什么事情,但是在我们的一些客户的实时应用程序中,我们正在获得原始交易的零价值.

任何人都可以想到为什么我不会收到原来的交易?在[transaction transactionDate]中发回的日期与[[transaction originalTransaction] transactionDate]的预期相同,但是我不知道是否可以安全地假设如果originalTransaction为零,则[transaction transactionDate]将始终为是原始交易的日期.

解决方法

我有完全相同的问题.我通过检查原始事务是否返回当前的事务来解决它.

以下是 – (void)restoreTransaction:(SKPaymentTransaction *)事务中替换的代码

if (transaction.originalTransaction.payment.productIdentifier) {
    [self provideContentForProductIdentifier:transaction.originalTransaction.payment.productIdentifier];
} else {
    [self provideContentForProductIdentifier:transaction.payment.productIdentifier];
}

java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout

java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout

java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;
	at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:85)
	at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:386)
	at com.sun.proxy.$Proxy14.selectOne(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:165)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:82)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
	at com.sun.proxy.$Proxy15.countAll(Unknown Source)
	at com.study.mybatis.spring.user.daoImpl.UserDaoImpl.countAll(UserDaoImpl.java:19)
	at com.study.mybatis.spring.user.serviceImpl.UserServiceImpl.countAll(UserServiceImpl.java:18)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
	at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
	at com.sun.proxy.$Proxy18.countAll(Unknown Source)
	at com.study.mybatis.spring.user.test.UserServiceTest.userServiceTest(UserServiceTest.java:28)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

  spring + mybatis + mybaits-spring版本不匹配。

没有找到具体版本匹配规则,

spring版本:4.3.14.RELEASE

mybatis-spring:1.2.3

mybatis:3.4.5

报上述异常

将mybatis-spring修改为1.3.1问题解决。

 

今天关于在提交中途使用AbstractTransactionalJUnit4SpringContextTests的分享就到这里,希望大家有所收获,若想了解更多关于c#将DbContextTransaction转换为SqlTransaction、ios – SKPaymentTransaction的originalTransaction.transactionReceipt为非易耗品还原、iOS:SKPaymentTransactionStateRestored originalTransaction == nil、java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout等相关知识,可以在本站进行查询。

本文标签: