- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在创建一个在执行结束时回滚数据库操作的 Arquillian 测试时遇到了问题。它在尝试回滚事务时抛出一个 NullPointerException
,因为它无法从 org 中找到
实例(org.jboss.arquillian.test.spi.TestResult
实例。 jboss.arquillian.test.impl.context.TestContextImpltestResultInstance.get()
返回 null,如下)。
我正在使用 arquillian-1.1.2-Final 和 arquillian-transaction-api-1.0.0-FINAL 以及 testng-6.8。
我可以在测试方法的开头看到正确创建的事务,但我无法弄清楚为什么 org.jboss.arquillian.test.spi.TestResult
设置不正确并且抛出异常。
注意:如果我从测试类中删除 @Transactional
注释,一切正常。此外,在此测试中,您将看到没有更新/插入数据库,但这只是为了简单起见。如果我向它添加更新语句,记录会正确更新,但更改会在测试结束后保留(如果我从测试类中删除 @Transactional
注释),我想通过以下方式防止这种情况发生回滚...
发生异常的代码(下面方法的第一行 - 来自 org.jboss.arquillian.transaction.impl.lifecycle.TransactionHandler
):
/**
* Returns whether the test requires to be rolled back. </p>
* By default it will return true if the last executed test has failed.
*
* @return true if test requires rollback, false otherwise
*/
private boolean testRequiresRollbackDueToFailure()
{
final Status actualStatus = testResultInstance.get().getStatus();
return TestResult.Status.FAILED.equals(actualStatus);
}
异常堆栈跟踪:
java.lang.NullPointerException
at org.jboss.arquillian.transaction.impl.lifecycle.TransactionHandler.testRequiresRollbackDueToFailure(TransactionHandler.java:159)
at org.jboss.arquillian.transaction.impl.lifecycle.TransactionHandler.rollbackRequired(TransactionHandler.java:148)
at org.jboss.arquillian.transaction.impl.lifecycle.TransactionHandler.endTransactionAfterTest(TransactionHandler.java:109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
at org.jboss.arquillian.testenricher.cdi.CreationalContextDestroyer.destory(CreationalContextDestroyer.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
at org.jboss.arquillian.test.impl.TestContextHandler.createTestContext(TestContextHandler.java:102)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)
at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.after(EventTestRunnerAdaptor.java:103)
at org.jboss.arquillian.testng.Arquillian.arquillianAfterTest(Arquillian.java:149)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:786)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
at org.testng.TestNG.run(TestNG.java:1057)
at org.jboss.arquillian.testng.container.TestNGTestRunner.execute(TestNGTestRunner.java:53)
at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.executeTest(ServletTestRunner.java:160)
at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.execute(ServletTestRunner.java:126)
at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.doGet(ServletTestRunner.java:90)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)
at java.lang.Thread.run(Thread.java:619)
测试类:
package ie.one23.insurance.common.dao.config;
import ie.one23.insurance.motor.dao.lookup.LookupDao;
import ie.one23.insurance.motor.util.PackagingUtil;
import javax.inject.Inject;
import org.apache.poi.hssf.record.formula.functions.Lookup;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.OverProtocol;
import org.jboss.arquillian.testng.Arquillian;
import org.jboss.arquillian.transaction.api.annotation.TransactionMode;
import org.jboss.arquillian.transaction.api.annotation.Transactional;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Assert;
import org.testng.annotations.Test;
@Transactional(TransactionMode.ROLLBACK)
public class TermsOfBusinessUrlDaoTest extends Arquillian {
@Deployment
@OverProtocol("Servlet 3.0")
public static WebArchive createDeployment() {
WebArchive war = PackagingUtil.getWebArchiveForEJB();
return war;
}
@Inject
LookupDao lookupDao;
@Test(groups = { "daos", "integration", "arquillian" })
public void testFindValidLinkByCode() {
Lookup lookup = lookupDao.findValidLinkByCode("example");
Assert.assertNotNull(lookup);
Assert.assertEquals("example", lookup.getCode());
Assert.assertEquals(true, lookup.getActive());
}
}
arquillian.xml
<arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://jboss.org/schema/arquillian
http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
<container qualifier="jboss-remote" default="false">
<configuration>
<property name="managementAddress">${mgmtAddr:127.0.0.1}</property>
<property name="managementPort">${mgmtPort:9999}</property>
</configuration>
</container>
<extension qualifier="transaction">
<property name="manager">java:jboss/TransactionManager</property>
</extension>
<extension qualifier="persistence">
<property name="defaultTransactionMode">ROLLBACK</property>
</extension>
</arquillian>
作为 arquillian-extension-transaction 一部分的单元测试在调用测试方法之前显示了 TestResult 的绑定(bind):
如果我删除绑定(bind)指令,我会得到同样的异常......这个绑定(bind)是否正确?
@Test
public void shouldRollbackTransaction() throws Exception
{
getManager().getContext(ClassContext.class).activate(TestClass.class);
Object instance = new TestClass();
Method testMethod = instance.getClass().getMethod("rollbackTest");
bind(TestScoped.class, TestResult.class, new TestResult(TestResult.Status.PASSED));
getManager().fire(new org.jboss.arquillian.test.spi.event.suite.After(instance, testMethod));
// checks if the transaction context has been disposed
verify(mockTransactionContext).destroy();
// verifies that the transaction has been rollback
verify(mockTransactionProvider).rollbackTransaction(any(TransactionalTest.class));
getManager().getContext(ClassContext.class).deactivate();
最佳答案
有点晚了,但我遇到了同样的问题并且能够解决它。
问题是 Arquillian 核心版本和 Arquillian 持久性不匹配。
对于 Arquillian Persistence 版本 1.0.0.Alpha7,当使用 Arquillian Core 1.1.5.Final 运行时,会出现此错误。
如果 Arquillian Core 版本更改为 1.1.2.Final,错误就会消失...:-D
关于java - Arquillian 测试的回滚事务 - 获取 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20662548/
如果我执行以下操作 session.getTransaction().rollback(); 然后可以/可以在同一个 session 对象上开始调用保存/更新/删除等吗?无法在 Hibernate S
在Sqlite3中,有没有办法在提交事务后回滚到某个点? 如果您想知道如果我不确定我为什么要提交一个语句,原因是我在 C++ 接口(interface)内使用 Sqlite,只有在我提交事务时才会保存
经过一段时间的阅读和测试不同形式的加载EntityManager实例和bean以进行一些嵌套事务,最后我没有找到一种方法,在运行时异常之后,数据进行完全回滚,必须接近阶段到什么我想要的是只有一个实体保
我们有一个应用程序,它读取 JMS 并执行一些数据库事务,所有这些都是 XA 事务的一部分。如果我们发现消息有问题,我们想要回滚数据库,但我们不希望 JMS 回滚让我们再次读取消息(如果先前已启动回滚
我有一个情况,我需要回滚数据库上的更改,而且我想保留插入的日志。 插图: Add processing log Insert some data Insert some data Insert
我定义了这样一个函数- ... DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK; DECLARE EXIT HANDLER FOR SQLWARNING
我的应用程序中有一个模型和一个类似商店的东西。模型对象使用 promise 等待存储中的数据。 但在某些情况下我需要删除模型,但因为我使用了 promise 我的模型仍处于关闭状态并且 GC 无法清理
我错误地触发了更新查询,并且 dat 字段中表中的所有记录都已更新,并且由于 auto_commit 处于打开状态,因此也无法回滚。 还有其他方法可以检索记录吗? 最佳答案 我不认为一旦提交查询/事务
我了解我可以使用 MySql 的命令 BACKUP 和 RESTORE 来备份数据库并在需要时回滚。 我的问题是,我是否能够以这种方式执行它: sql="BACKUP my_db TO DISK my
如果 MySQL 中仍有未提交/未回滚的事务,如何让我的事务等待? 目前,我在代码端进行事务处理,而不是在数据库存储过程端,如下所示: cmd.Connection.BeginTransaction(
这是以下内容的后续内容: php/mysql transaction not rolling back on failure (Codeigniter framework) 我在上面的链接中实现了建议
我只是构建了一个存储过程来测试 mysql 中的事务。 但不知何故它不起作用。 这是我的代码: USE `test`; DROP procedure IF EXISTS `testTran`; DEL
我有一个 Service Fabric 应用程序。比方说,版本 1.0.0。我将更新部署为版本 2.0.0。一切都很好。 稍后,我想回滚(或根据您的观点升级)到版本 1.0.0。 我想运行一个简单的P
我不知道这是否正确,但由于某种原因,我的存储过程在发生异常后没有回滚。所以即使我遇到异常,我的插入语句也会被提交 我忘记了什么吗? PROCEDURE SP_USUARIO_INSERT
这个问题与我的问题有关:SQL Server and TransactionScope (with MSDTC): Sporadically can't get connection 我正在使用 .n
登录到我正在使用的Oracle数据库的用户没有提交或回滚就注销了,现在我的数据库无法更改,它似乎已被锁定。 我试过了 rollback 但这没用。 有什么想法吗? 谢谢。 最佳答案 不提交或不回滚就
这只是一个 RStudio 界面问题: 当回滚控制台查看我的工作和输出时,我只能回滚到目前为止。有没有办法打开控制台并回滚我所做的一切? 有时我想检查一个很长的列表的结果,或者我忘记在脚本框而不是控制
是否可以在 Heroku 上撤消回滚? 我必须在实时环境中尝试一些东西,进行测试,然后恢复到原始状态(在回滚之前)。 Heroku 是否能够顺利做到这一点,否则会导致问题? 最佳答案 是的,您可以滚动
我想要 仅回滚: 回滚:2015_05_15_195423_alter_table_web_directories 我运行 php artisan migrate:rollback,我的 3 个迁移正
我正在使用 MQQueueSession.rollback() 来回滚工作单元。消息被移至 BACKOUT 队列,这样就可以了。 问题是如何处理回退队列中的这些消息?我读到我可以使用 runmqdlq
我是一名优秀的程序员,十分优秀!