当前位置: 首页 > 知识库问答 >
问题:

Arquillian:执行此操作需要事务

令狐良骏
2023-03-14

我正在尝试使用嵌入式野蝇运行我们的JPA单元测试。到目前为止,当我进行清洁时,我得到了以下步骤的工作

  1. 嵌入式wildfly将部署在项目的/target文件夹中
  2. MSSQL数据库驱动程序将被部署并注册为驱动程序
  3. arquillian创建一个包含所有必需依赖项的.war文件
  4. arquillian将我的项目的.war部署到嵌入式wildfly,并在嵌入式wildfry上开始单元测试

现在我的问题是:当我调用. create()或。我的单元测试中entitymanager上的delete()方法:

Caused by: javax.persistence.TransactionRequiredException: JBAS011469: Transaction is required to perform this operation (either use a transaction or extended persistence context)

这些是我的pom.xml的重要依赖关系:

           <dependency>
            <groupId>org.jboss.arquillian</groupId>
            <artifactId>arquillian-bom</artifactId>
            <version>1.1.7.Final</version>
            <scope>test</scope>
            <type>pom</type>
        </dependency>

        <dependency>
            <groupId>org.jboss.arquillian.test</groupId>
            <artifactId>arquillian-test-spi</artifactId>
            <version>1.1.7.Final</version>
        </dependency>


        <dependency>
            <groupId>org.jboss.arquillian.junit</groupId>
            <artifactId>arquillian-junit-container</artifactId>
            <version>1.1.7.Final</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.wildfly</groupId>
            <artifactId>wildfly-arquillian-container-embedded</artifactId>
            <version>8.2.0.Final</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.wildfly</groupId>
            <artifactId>wildfly-embedded</artifactId>
            <version>8.2.0.Final</version>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>org.wildfly.plugins</groupId>
            <artifactId>wildfly-maven-plugin</artifactId>
            <version>1.0.2.Final</version>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>org.jboss.shrinkwrap.resolver</groupId>
            <artifactId>shrinkwrap-resolver-depchain</artifactId>
            <version>2.1.1</version>
            <scope>test</scope>
            <type>pom</type>
        </dependency>



</dependencies>
    <!-- Plugins -->
    <build>
        <plugins>

            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>unpack</id>
                        <phase>process-test-classes</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>org.wildfly</groupId>
                                    <artifactId>wildfly-dist</artifactId>
                                    <version>8.2.0.Final</version>
                                    <type>zip</type>
                                    <overWrite>false</overWrite>
                                    <outputDirectory>target</outputDirectory>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>

                    <execution>
                        <id>copy-db-driver</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>com.microsoft</groupId>
                                    <artifactId>sqljdbc</artifactId>
                                    <version>4.0.2206.100</version>
                                    <outputDirectory>target/wildfly-8.2.0.Final/standalone/deployments</outputDirectory>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.wildfly.plugins</groupId>
                <artifactId>wildfly-maven-plugin</artifactId>
                <version>1.0.2.Final</version>
                <executions>
                    <execution>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>start</goal>
                        </goals>
                    </execution>

                    <execution>
                        <id>datasource</id>
                        <phase>package</phase>
                        <goals>
                            <goal>add-resource</goal>
                        </goals>
                        <configuration>
                            <address>subsystem=datasources,data-source=tests</address>
                            <resources>
                                <resource>
                                    <properties>
                                        <connection-url>jdbc:sqlserver://SERVERADRESS_CENSORED;instanceName=web;databaseName=TMCDB</connection-url>
                                        <jndi-name>java:jdbc/TMCDB</jndi-name>
                                        <enabled>true</enabled>
                                        <enable>true</enable>
                                        <user-name>USER_CENSORED</user-name>
                                        <password>PW_CENSORED</password>
                                        <driver-name>sqljdbc-4.0.2206.100.jar</driver-name>
                                        <use-ccm>false</use-ccm>
                                    </properties>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

在我的persistence.xml中,我设置了事务类型="JTA"。

这是部分,其中 .war 文件由阿奎利亚/收缩包装创建。这些东西用阿奎利安的@Deployment标签注释:

PomEquippedResolveStage loadPomFromFile = Maven.resolver().loadPomFromFile("pom.xml");
        File[] asFile = loadPomFromFile.importRuntimeAndTestDependencies().resolve().withTransitivity().asFile();


        //MavenStrategyStage asFile = loadPomFromFile.importRuntimeAndTestDependencies().resolve();

        WebArchive webArchive = ShrinkWrap.create(WebArchive.class)
                .addAsLibraries(asFile)
                .addPackages(true, "de.companyXYZ")
                .addPackages(true, "org.springframework.beans.factory.config")
                // Adding persistence unit
                .addAsResource("test-persistence.xml", "META-INF/persistence.xml")
                // Add ms-sql driver for the embedded wildfly
                .addAsWebInfResource("wildfly-ds-driver.xml")
                // Add datasource for the embedded wildfly
                .addAsWebInfResource("wildfly-ds.xml")
                .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");

        webArchive.as(ZipExporter.class).exportTo(new File("./target/test-package.war"), true);

那么,任何人都可以帮助我解决这个问题吗?我不明白为什么我得到这个异常 - 因为野蝇应该做交易管理 - 这就是我对他的期望...

共有1个答案

李敏学
2023-03-14

添加,这解决了我的交易问题

import org.jboss.arquillian.transaction.api.annotation.Transactional;

    @Transactional
 类似资料:
  • 我正在使用Wildfly 10.0。0最终版本、JavaEE7、Maven和JPA2.1。当我查询数据库中的记录时,它可以正常工作并列出员工,但当我尝试保留新员工时,它会给我以下异常: 我正在尝试使用JSF和CDI bean实现这一点。我有一个JTA数据源,我在persistence.xml文件中配置了它: CDI豆可以在下面看到。这是相对简单的,有一个方法列出25名员工和另一个应该坚持一个特定的

  • 问题内容: 我正在使用Wildfly 10.0.0 Final,Java EE7,Maven和JPA 2.1。当我查询数据库中的记录时,它可以正常工作并列出员工,但是当我尝试保留新员工时,它给了我以下异常: 我正在尝试使用JSF和CDI bean来实现。我有一个JTA数据源,已在persistence.xml文件中对其进行配置: 可以在下面看到CDI bean。比较简单,有一种方法可以列出25名雇

  • 我用的是linux box。 我无法使用IPv6 FTP服务器执行任何操作。我能够使用IPV6 FTP服务器进行连接。但我什么时候做任何操作(比如ls、get、put…)下面是例外情况(用粗体突出显示)。 [root@SKP-vlnx~]#ftp aa01:9:1::22:56ff:231:4b连接到aa01:9:1::22:56ff:231:4b(aa01:9:1::22:56ff:231:4b

  • 我们使用HiberNate作为JPA提供程序。当其中一个实体更新时,我需要对Quartz计划执行一些更新。目前,该代码是在该实体的更新方法中调用的。但是,Quartz更改只有在事务成功提交时才会生效。 我考虑过实现一个实体监听器,但是我只想在实体被特定方法修改时执行这些更新,并且我不确定JPA实体监听器是否支持依赖注入,我需要依赖注入来获取对Quartz调度器的引用。 有没有办法以编程方式附加活动

  • Redisson 支持对每个操作自动重试的策略并且在每次尝试期会尝试发送命令。 重试策略由设置项 retryAttempts (默认为 3) 和 retryInterval (默认为 1000 ms) 来控制。 每次尝试会在 retryInterval 时间间隔后执行。 Redisson 实例和 Redisson 对象都是完全线程安全的。 带有同步/异步方法的 Redisson 对象可通过 Red

  • 当我们讨论使用Executors服务处理异步事件时,为什么创建一个新的固定线程池涉及到使用LinkedBlockingQueue?到达的事件完全不依赖,所以为什么要使用队列,因为使用者线程仍然会涉及take Lock的争用?为什么Executors类没有一些混合数据结构(例如并发映射实现),在大多数情况下不需要带锁?