【问题标题】:Cant find a persistence unit named my_bdd in deployment wildfly EJB EAR在部署 wildfly EJB EAR 中找不到名为 my_bdd 的持久性单元
【发布时间】:2017-11-01 21:28:58
【问题描述】:

我想在我的 10 台服务器上部署一个类。

我创建了一个 persistence.xml 文件并遵循了经典的 maven achétype。 这是我的项目结构:

├── pom.xml
├── README.md
├── src
│   ├── main
│   │   ├── java
│   │   │   └── dataRecovery
│   │   │       ├── ColisDao.java
│   │   │       ├── Colis.java
│   │   │       ├── FillDataBase.java
│   │   │       ├── GenerateDataBase.java
│   │   │       └── jaxws
│   │   │           ├── FillDataBase.java
│   │   │           ├── FillDataBaseResponse.java
│   │   │           └── IOExceptionBean.java
│   │   ├── resources
│   │   └── webapp
│   │       ├── META-INF
│   │       │   └── persistence.xml
│   │       ├── WEB-INF
│   │       │   ├── beans.xml
│   │       │   ├── cxf-beans.xml
│   │       │   ├── jboss-deployment-structure.xml
│   │       │   └── web.xml
│   │       └── wsdl
│   │           ├── filldatabase_schema1.xsd
│   │           └── filldatabase.wsdl
│   └── test
│       ├── java
│       └── resources
└── target
    ├── classes
    │   └── dataRecovery
    │       ├── Colis.class
    │       ├── ColisDao.class
    │       ├── FillDataBase.class
    │       ├── GenerateDataBase.class
    │       └── jaxws
    │           ├── FillDataBase.class
    │           ├── FillDataBaseResponse.class
    │           └── IOExceptionBean.class
    ├── m2e-wtp
    │   └── web-resources
    │       ├── META-INF
    │       │   ├── MANIFEST.MF
    │       │   └── maven
    │       │       └── com.recovery
    │       │           └── dataRecovery
    │       │               ├── pom.properties
    │       │               └── pom.xml
    │       ├── WEB-INF
    │       │   ├── beans.xml
    │       │   ├── cxf-beans.xml
    │       │   ├── jboss-deployment-structure.xml
    │       │   └── web.xml
    │       └── wsdl
    │           ├── filldatabase_schema1.xsd
    │           └── filldatabase.wsdl
    ├── maven-status
    │   └── maven-compiler-plugin
    │       └── compile
    │           └── default-compile
    │               ├── createdFiles.lst
    │               └── inputFiles.lst
    └── test-classes

问题是当我想部署我的 FillDataBase.java 类时,我从服务器日志中收到以下错误:

WFLYJPA0033: Can't find a persistence unit named bdd_colis in deployment \"dataRecovery-0.0.1-SNAPSHOT.war\""},
    "WFLYCTL0412: Required services that are not installed:" => [
        "jboss.deployment.unit.\"dataRecovery-0.0.1-SNAPSHOT.war\".INSTALL",
        "jboss.deployment.unit.\"dataRecovery-0.0.1-SNAPSHOT.war\".beanmanager"
    ],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => [
        "jboss.deployment.unit.\"dataRecovery-0.0.1-SNAPSHOT.war\".weld.weldClassIntrospector is missing [jboss.deployment.unit.\"dataRecovery-0.0.1-SNAPSHOT.war\".beanmanager]",
        "jboss.deployment.unit.\"dataRecovery-0.0.1-SNAPSHOT.war\".batch.environment is missing [jboss.deployment.unit.\"dataRecovery-0.0.1-SNAPSHOT.war\".beanmanager]"
    ]
}

正如其他主题所说,这可能是由于错误的persistence.xml 文件,但我检查了它,它似乎很好:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://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="bdd_colis" transaction-type="JTA">
        <jta-data-source>jdbc/DataSource</jta-data-source>
        <class>dataRecovery.Colis</class>
        <properties>
            <property name="eclipselink.logging.level.sql" value="FINE" />
            <property name="eclipselink.logging.parameters" value="true" />
        </properties>
    </persistence-unit>

</persistence>

此外,在我的 EJB 对象 ColisDao.java 中,我明确将 PersistenceContext 命名为 bdd_colis。

    @Stateless
    public class ColisDao {

        public static final String SELECT_ALL_COLIS = "select * from Colis;";

        @PersistenceContext(unitName="bdd_colis")
        private EntityManager em;
...

有什么建议吗?

【问题讨论】:

    标签: web-services maven jpa ejb wildfly


    【解决方案1】:

    根据 JPA 规范的 §8.2:

    持久性单元由 persistence.xml 文件定义。 META-INF 目录包含persistence.xml 文件的jar 文件或目录称为持久单元的根。在 Java EE 环境中,持久单元的根必须是以下之一:
    • EJB-JAR 文件
    • WAR 文件的 WEB-INF/classes 目录[87]
    • WAR 文件的 WEB-INF/lib 目录中的 jar 文件
    • EAR 库目录中的 jar 文件
    • 应用程序客户端 jar 文件

    因此,将META-INF/persistence.xml 文件从src/main/webapp 目录移动到src/main/resources 目录。

    Maven 会将其打包到您的 WAR 文件的 WEB-INF/classes 目录中。

    【讨论】:

    • 您好,谢谢您的回答,我今晚试试,稍后再回复您:)
    猜你喜欢
    • 2015-08-15
    • 1970-01-01
    • 2018-09-23
    • 2016-05-29
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    相关资源
    最近更新 更多