Jakarta ee JBoss 7.1 JBAS014750:操作处理程序未能完成

Jakarta ee JBoss 7.1 JBAS014750:操作处理程序未能完成,jakarta-ee,jpa,jboss,ejb,Jakarta Ee,Jpa,Jboss,Ejb,我刚开始使用JBoss来探索EJB的世界, 然而,我遇到了一个问题 当我尝试为EJB+JPA编写项目时, 我遇到一个错误,无法将项目部署到JBoss上。 我现在正在使用EJB3.1+JBoss7.1.1。 请查找以下服务器日志: 22:18:50,132 INFO [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) JBAS015003: Found EJBEntity.jar in depl

我刚开始使用JBoss来探索EJB的世界, 然而,我遇到了一个问题

当我尝试为EJB+JPA编写项目时, 我遇到一个错误,无法将项目部署到JBoss上。 我现在正在使用EJB3.1+JBoss7.1.1。 请查找以下服务器日志:

    22:18:50,132 INFO  [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) JBAS015003: Found EJBEntity.jar in deployment directory. To trigger deployment create a file called EJBEntity.jar.dodeploy
22:18:50,142 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-13) JBAS015876: Starting deployment of "EJBEntity.jar"
22:18:50,166 INFO  [org.jboss.as.jpa] (MSC service thread 1-6) JBAS011401: Read persistence.xml for JPADB
22:18:50,183 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-6) JNDI bindings for session bean named LibraryPersistentBean in deployment unit deployment "EJBEntity.jar" are as follows:

    java:global/EJBEntity/LibraryPersistentBean!com.heic.tutorial.entity.stateless.LibraryPersistentBeanRemote
    java:app/EJBEntity/LibraryPersistentBean!com.heic.tutorial.entity.stateless.LibraryPersistentBeanRemote
    java:module/LibraryPersistentBean!com.heic.tutorial.entity.stateless.LibraryPersistentBeanRemote
    java:jboss/exported/EJBEntity/LibraryPersistentBean!com.heic.tutorial.entity.stateless.LibraryPersistentBeanRemote
    java:global/EJBEntity/LibraryPersistentBean
    java:app/EJBEntity/LibraryPersistentBean
    java:module/LibraryPersistentBean

22:18:50,400 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS015870: Deploy of deployment "EJBEntity.jar" was rolled back with failure message JBAS014750: Operation handler failed to complete
22:18:50,412 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-8) JBAS015877: Stopped deployment EJBEntity.jar in 11ms
22:18:50,413 ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) {"JBAS014653: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => "JBAS014750: Operation handler failed to complete"}}
22:22:45,525 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-13) JBAS015876: Starting deployment of "EJBEntity.jar"
22:22:45,544 INFO  [org.jboss.as.jpa] (MSC service thread 1-13) JBAS011401: Read persistence.xml for JPADB
22:22:45,561 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-16) JNDI bindings for session bean named LibraryPersistentBean in deployment unit deployment "EJBEntity.jar" are as follows:

    java:global/EJBEntity/LibraryPersistentBean!com.heic.tutorial.entity.stateless.LibraryPersistentBeanRemote
    java:app/EJBEntity/LibraryPersistentBean!com.heic.tutorial.entity.stateless.LibraryPersistentBeanRemote
    java:module/LibraryPersistentBean!com.heic.tutorial.entity.stateless.LibraryPersistentBeanRemote
    java:jboss/exported/EJBEntity/LibraryPersistentBean!com.heic.tutorial.entity.stateless.LibraryPersistentBeanRemote
    java:global/EJBEntity/LibraryPersistentBean
    java:app/EJBEntity/LibraryPersistentBean
    java:module/LibraryPersistentBean

22:22:45,782 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 1) JBAS015870: Deploy of deployment "EJBEntity.jar" was rolled back with failure message JBAS014750: Operation handler failed to complete
22:22:45,787 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) JBAS015877: Stopped deployment EJBEntity.jar in 5ms
22:22:45,789 ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 2) {"JBAS014653: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => "JBAS014750: Operation handler failed to complete"}}
我不知道“操作处理程序未能完成”是什么意思, 我只知道JBoss不允许我部署我的项目

我读过很多类似情况的人的资料, 其中大多数与persistence.xml/datasource/module配置相关

请查找以下文件:

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="https://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="JPADB">
        <jta-data-source>java:jboss/datasources/MySQLDS</jta-data-source>
            <properties>
                <property name="showSql" value="true" />
                <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            </properties>
    </persistence-unit>
</persistence>
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <datasource jndi-name="java:jboss/datasources/MySQLDS" pool-name="MySQL" enabled="true" use-java-context="true">
                    <connection-url>jdbc:mysql://localhost:3306/test</connection-url>
                    <driver>mysqlDriver</driver>
                    <security>
                        <user-name>root</user-name>
                        <password>root</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="mysqlDriver" module="com.mysql">
                        <xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class>
                    </driver>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>

java:jboss/datasources/MySQLDS
独立.xml的代码段

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="https://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="JPADB">
        <jta-data-source>java:jboss/datasources/MySQLDS</jta-data-source>
            <properties>
                <property name="showSql" value="true" />
                <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            </properties>
    </persistence-unit>
</persistence>
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <datasource jndi-name="java:jboss/datasources/MySQLDS" pool-name="MySQL" enabled="true" use-java-context="true">
                    <connection-url>jdbc:mysql://localhost:3306/test</connection-url>
                    <driver>mysqlDriver</driver>
                    <security>
                        <user-name>root</user-name>
                        <password>root</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="mysqlDriver" module="com.mysql">
                        <xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class>
                    </driver>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>

jdbc:h2:mem:test;DB_关闭_延迟=-1
氢
sa
sa
jdbc:mysql://localhost:3306/test
mysqlDriver
根
根
com.mysql.jdbc.Driver
org.h2.jdbcx.JdbcDataSource
java:jboss/datasources/MySQLDS是我计划使用的

%JBoss\u Home%\modules\com\mysql\main\module.xml

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.mysql">
    <resources>
        <resource-root path="mysql-connector-java-5.1.31-bin.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api/>
    </dependencies>
</module>


突然,我解决了这个问题

我会把答案贴在这里, 希望它能帮助任何遇到类似情况的人

基本上,我做了三件事:

  • 我使用的是JBoss EAP 6.2,而不是JBoss AP 7.1

  • 我已将jta数据源persistence.xml中的java:jboss/datasources/MySQLDS更改为java:/MySQLDS

  • <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" xmlns="https://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
        <persistence-unit name="JPADB">
            <jta-data-source>java:jboss/datasources/MySQLDS</jta-data-source>
                <properties>
                    <property name="showSql" value="true" />
                    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
                </properties>
        </persistence-unit>
    </persistence>
    
    <subsystem xmlns="urn:jboss:domain:datasources:1.0">
                <datasources>
                    <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                        <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
                        <driver>h2</driver>
                        <security>
                            <user-name>sa</user-name>
                            <password>sa</password>
                        </security>
                    </datasource>
                    <datasource jndi-name="java:jboss/datasources/MySQLDS" pool-name="MySQL" enabled="true" use-java-context="true">
                        <connection-url>jdbc:mysql://localhost:3306/test</connection-url>
                        <driver>mysqlDriver</driver>
                        <security>
                            <user-name>root</user-name>
                            <password>root</password>
                        </security>
                    </datasource>
                    <drivers>
                        <driver name="mysqlDriver" module="com.mysql">
                            <xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class>
                        </driver>
                        <driver name="h2" module="com.h2database.h2">
                            <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                        </driver>
                    </drivers>
                </datasources>
            </subsystem>
    
  • 我已将jndi名称从java:jboss/datasources/MySQLDS更改为standalone.xml中的java:/MySQLDS

  • <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" xmlns="https://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
        <persistence-unit name="JPADB">
            <jta-data-source>java:jboss/datasources/MySQLDS</jta-data-source>
                <properties>
                    <property name="showSql" value="true" />
                    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
                </properties>
        </persistence-unit>
    </persistence>
    
    <subsystem xmlns="urn:jboss:domain:datasources:1.0">
                <datasources>
                    <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                        <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
                        <driver>h2</driver>
                        <security>
                            <user-name>sa</user-name>
                            <password>sa</password>
                        </security>
                    </datasource>
                    <datasource jndi-name="java:jboss/datasources/MySQLDS" pool-name="MySQL" enabled="true" use-java-context="true">
                        <connection-url>jdbc:mysql://localhost:3306/test</connection-url>
                        <driver>mysqlDriver</driver>
                        <security>
                            <user-name>root</user-name>
                            <password>root</password>
                        </security>
                    </datasource>
                    <drivers>
                        <driver name="mysqlDriver" module="com.mysql">
                            <xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class>
                        </driver>
                        <driver name="h2" module="com.h2database.h2">
                            <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                        </driver>
                    </drivers>
                </datasources>
            </subsystem>
    

    谢谢。

    我在使用mysql5时也遇到了同样的问题 但当我在模块中为jboss定义了不正确的MySQJDBC驱动程序时,这是我的错。 确保jboss正确连接到mysql数据源。 例如,检查 jboss/modules/com/mysql/modules.xml

    <resource-root path="mysql-connector-java-5.1.21.jar"/>
    
    
    
    路径必须引用jar文件的正确名称。并且必须通过modules.xml文件定位具有相同名称的jar