我想在我的10台服务器上部署一个课程。
我创建了一个persistence.xml文件,并遵循了经典的mavenaché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;
...
有什么建议吗?
答案 0 :(得分: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
目录中。