Java持久化单元的打包与部署
立即解锁
发布时间: 2025-08-19 02:03:57 阅读量: 2 订阅数: 10 

# Java持久化单元的打包与部署
## 1. 部署时添加JAR到类路径
当部署WAR文件并想将额外的实体JAR添加到类路径时,可将该JAR放在WAR的`WEB-INF/lib`目录下。这样,该JAR会处于类路径中,其中的类可被WAR中的所有类访问。此外,供应商通常会提供特定方式让部署者将类或JAR添加到部署类路径,一般在应用程序级别提供,不过有些也会在JAR或WAR级别提供。
## 2. 打包选项
Java持久化API重点在于与Java EE平台集成,在Java EE应用程序打包中有特殊地位。Java EE支持多种持久化打包配置,下面将按应用程序可能部署的不同模块类型展开介绍:
### 2.1 EJB JAR
模块化业务逻辑常存于会话Bean组件中,会话Bean一直是Java EE中持久化的主要组件客户端,也是JPA与Java EE集成的重要部分。由于会话Bean适合操作实体的代码,所以通过会话Bean访问和打包实体是最佳方式。传统上,会话Bean部署在EJB JAR中,不过在Java EE 6中也可与Web组件一起部署在WAR中。
从EJB 3.0开始,不再需要`ejb - jar.xml`部署描述符,若使用则必须放在`META - INF`目录。在EJB JAR中定义持久化单元时,`persistence.xml`文件必不可少,需放在JAR的`META - INF`目录,若有`ejb - jar.xml`,要与之放在一起。`persistence.xml`内容可能很简略,有时仅包含持久化单元名称。
定义持久化单元时,关键是决定实体和托管类的存放位置,有以下选项:
- **简单方式**:将托管类和EJB组件一起放入EJB JAR。只要托管类正确注解,部署时提供程序会自动发现并添加到持久化单元。示例如下:
```
emp.ear
emp - ejb.jar
META - INF/persistence.xml
META - INF/orm.xml
examples/ejb/EmployeeService.class
examples/ejb/EmployeeServiceBean.class
examples/model/Employee.class
examples/model/Phone.class
examples/model/Address.class
examples/model/Department.class
examples/model/Project.class
```
对应的`persistence.xml`文件如下:
```xml
<persistence 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"
version="1.0">
<persistence-unit name="EmployeeService">
<jta-data-source>java:app/jdbc/EmployeeDS</jta-data-source>
</persistence-unit>
</persistence>
```
- **分离实体和EJB组件**:将实体放在不同JAR,并在`persistence.xml`的`jar - file`条目中引用。示例如下:
```
emp.ear
emp - ejb.jar
META - INF/persistence.xml
examples/ejb/EmployeeService.class
examples/ejb/EmployeeServiceBean.class
lib/emp - classes.jar
META - INF/orm.xml
META - INF/emp - mappings.xml
examples/model/Employee.class
examples/model/Phone.class
examples/model/Address.class
examples/model/Department.class
examples/model/Project.class
```
对应的`persistence.xml`文件如下:
```xml
<persistence-unit name="EmployeeService">
<jta-data-source>java:app/jdbc/EmployeeDS</jta-data-source>
<mapping-file>META-INF/emp-mappings.xml</mapping-file>
<jar-file>lib/emp-classes.jar</jar-file>
</persistence-unit>
```
### 2.2 Web Archive
虽认为会话Bean是访问实体的最佳方式,但仍有人不想或不能使用。直接从Web层操作实体也是可行选择,对部分Web开发者仍受欢迎。建议使用会话Bean作为Web层引用对象,最简单的方法是将Web组件、EJB和持久化单元都部署在WAR文件中,这简化了部署结构,为应用程序提供更实用范围。
不过,WAR比EJB JAR复杂,在Web存档中打包持久化单元需理解`persistence.xml`文件位置的重要性,其位置决定持久化单元
0
0
复制全文
相关推荐










