spring-boot - spring boot分布式事务错误java.lang.ClassNotFoundException : javax. transaction.TransactionManager

标签 spring-boot transactions xa atomikos

我正在尝试进行分布式事务,但有很多错误,所以我编写了这个演示应用程序来解释我的问题 我的 pom.xml 有这些依赖项:

   <dependencies>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>3.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>ch.maxant</groupId>
            <artifactId>genericconnector-atomikos-api</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.4</version>
        </dependency>

    </dependencies>

我唯一包含 main 函数的类是:

 @Configuration
 public class Main {
    @Autowired
    @Qualifier("xaTransactionManager")
    protected static UserTransactionManager tm;

    @Primary
    @Bean(name = "xaTransactionManager", initMethod = "init", destroyMethod = "close")
    public UserTransactionManager xaTransactionManager() throws SystemException {
        UserTransactionManager txManager = new UserTransactionManager();
        txManager.setTransactionTimeout(300);
        txManager.setForceShutdown(false);
        return txManager;
    }

    @Bean(name = "xaTransactionService", initMethod = "init", destroyMethod = "shutdownWait")
    public UserTransactionServiceImp xaTransactionService() {
        return new UserTransactionServiceImp();
    }



    public static void main(String[] s) {
        try {
            tm.begin();
              // here is empty   
            tm.commit();
        } catch (Exception e) {
            tm.rollback();
            System.out.println(e.getMessage());
        }
    }
 }

我刚刚开始交易 但我在 tm.begin() 线上遇到了这个问题

java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: javax.transaction.TransactionManager
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 19 more
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" [INFO] NETBEANS-ExecEvent:{"exc":{"msg":"Q29tbWFuZCBleGVjdXRpb24gZmFpbGVkLg=="},"mojo":{"impl":"org.codehaus.mojo.exec.ExecMojo","urls":["file:\/C:\/Users\/NOSIRAT\/.m2\/repository\/org\/codehaus\/mojo\/exec-maven-plugin\/1.2.1\/exec-maven-plugin-1.2.1.jar","file:\/C:\/Users\/NOSIRAT\/.m2\/repository\/org\/apache\/maven\/reporting\/maven-reporting-api\/2.0.6\/maven-reporting-api-2.0.6.jar","file:\/C:\/Users\/NOSIRAT\/.m2\/repository\/org\/apache\/maven\/doxia\/doxia-sink-api\/1.0-alpha-7\/doxia-sink-api-1.0-alpha-7.jar","file:\/C:\/Users\/NOSIRAT\/.m2\/repository\/commons-cli\/commons-cli\/1.0\/commons-cli-1.0.jar","file:\/C:\/Users\/NOSIRAT\/.m2\/repository\/org\/codehaus\/plexus\/plexus-interactivity-api\/1.0-alpha-4\/plexus-interactivity-api-1.0-alpha-4.jar","file:\/C:\/Users\/NOSIRAT\/.m2\/repository\/org\/codehaus\/plexus\/plexus-utils\/2.0.5\/plexus-utils-2.0.5.jar","file:\/C:\/Users\/NOSIRAT\/.m2\/repository\/org\/apache\/commons\/commons-exec\/1.1\/commons-exec-1.1.jar"],"goal":"exec","id":"org.codehaus.mojo:exec-maven-plugin:1.2.1","source":"CLI","execId":"default-cli"},"type":"MojoFailed"}

请问有什么帮助吗?

最佳答案

javax.transaction.TransactionManagerJ2EE SDKjavaee.jar 中的一个类,您可能缺少此 jar 文件在项目的类路径中。

您可以关注this文章将所需的依赖项添加到您的项目中! 对于不耐烦的人,这里是需要添加到您的 pom.xml

的依赖项
<repository>
    <id>Java.Net</id>
    <url>http://download.java.net/maven/2/</url>
</repository>

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
</dependency>

希望这有帮助!

关于spring-boot - spring boot分布式事务错误java.lang.ClassNotFoundException : javax. transaction.TransactionManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50099841/

相关文章:

maven - 为什么 Spring Boot 应用程序需要 hikariCP?

c# - 是否可以在不允许升级到 DTC 的情况下将 .NET 的 TransactionScope 与 Sql Server 2005 一起使用?

database - 什么是 "distributed transaction"?

JBoss 消息传递和 XA 事务 : JMS messages are lost

java - 除了 main() 之外, Autowiring 的存储库在任何地方都是 null

java - 在 Springboot mongodb 中创建自定义查询(使用 crudRepository)

java - 悲观锁不起作用 Spring Boot Data JPA

php - Yii2 事务 - 更新先前未提交的值加上新的提交值?

database - 在没有副本集或最少配置的情况下启用 MongoDB 事务

java - XA 池中的 ClassCastException