EJB3使用说明中文版

preview
需积分: 0 8 下载量 36 浏览量 更新于2008-10-26 收藏 1.68MB PDF 举报
### EJB3 使用说明中文版知识点总结 #### 一、EJB3 概念与应用场景 **企业 Java Beans (EJB)** 是一种基于 Java 的中间件技术,它为开发复杂的企业级应用程序提供了一种标准化的方法。EJB3 相比于早期版本有了很大的改进,特别是在简化开发流程和提高开发效率方面。 **EJB3 特点**: - **简化部署**:EJB3 允许开发者通过注解来声明 Bean 的行为,大大减少了 XML 配置的使用。 - **POJOs**:EJB3 支持纯 Java 对象 (POJOs),使得 EJBs 更加轻量级和易于开发。 - **生命周期管理**:EJB 容器负责管理 Bean 的创建、销毁以及事务管理等,从而减轻了开发者的工作负担。 #### 二、EJB3 运行环境配置 **2.1 下载与安装**: - **JBoss AS**: 需要下载并安装支持 EJB3 的 JBoss AS(Application Server),通常推荐使用最新版本。 - **Java SDK**: 确保已安装兼容的 Java SDK,建议使用 Java 8 或更高版本。 **2.2 运行一个 EJB3 例子**: - 创建一个新的 Maven 项目,并添加必要的依赖(如 `javax.ejb` 和 `org.jboss.ejb-client`)。 - 编写一个简单的 Stateless Session Bean 示例,使用 `@Stateless` 注解。 **2.3 在独立的 TOMCAT 或 SWING 中调用 EJB**: - **TOMCAT**: 可以通过 Web 应用程序中的 EJB 客户端 API 来远程访问 EJB。 - **SWING**: 开发桌面应用程序时,同样可以通过 JNDI 查找来访问 EJB。 **2.4 发布在 JBOSS 中的 WEB 应用调用 EJB**: - 在 JBoss AS 中部署 Web 应用程序,通过 JNDI 查找 EJB 的远程接口进行调用。 **2.5 如何获取最新的内嵌 EJB3 的 JBOSS 版本**: - 访问 JBoss 官方网站或 GitHub 仓库,查看最新的发行版信息。 #### 三、基础知识学习 **3.1 熟悉 JBOSS 的目录结构**: - 了解 JBoss 的目录结构对于正确部署和配置 EJB 至关重要。 - 关键目录包括 `standalone/deployments`(用于放置部署的应用程序)和 `modules`(用于存放第三方库)等。 **3.2 JBOSS 中的部署**: - EJBs 可以被打包成 `.jar` 文件,并直接放置在 `deployments` 目录下。 - 也可以作为 EAR 或 WAR 文件的一部分部署。 **3.3 如何进行 EJB 打包**: - 使用 Maven 或 Ant 等工具可以方便地创建 EJB 包。 - 一般采用 `ejb-jar.xml` 和 `persistence.xml` 进行配置。 **3.4 如何进行 WEB 应用打包**: - 使用 Maven 或 Ant 创建 WAR 文件。 - 包含所需的 JAR 文件和配置文件。 **3.5 使用了第三方类库的 EJB 如何打包**: - 第三方库通常放在 `lib` 目录下,并在 `MANIFEST.MF` 文件中声明。 **3.6 共用了第三方类库的 J2EE 项目如何打包**: - 如果多个项目共享相同的库,可以在项目结构中设置共享库的位置,并在构建过程中引用。 **3.7 如何恢复本书配套例子的开发环境**: - 根据提供的步骤安装必要的软件和框架。 - 复制示例代码到相应的项目目录,并按照说明进行配置。 **3.8 如何对 EJB3 进行调试**: - 使用 IDE 的调试功能,如 Eclipse 或 IntelliJ IDEA。 - 设置断点,观察变量值的变化,跟踪执行流程。 **3.9 单元测试**: - 使用 JUnit 或其他测试框架编写单元测试。 - 测试方法的正确性和异常处理逻辑。 #### 四、会话 Bean (Session Bean) **4.1 STATELESS SESSION BEANS(无状态 Bean)开发**: - **只存在 Remote 接口的无状态 SessionBean**:定义一个接口和对应的 Bean 类,使用 `@Stateless` 和 `@Remote` 注解。 - **只存在 Local 接口的无状态 SessionBean**:与上一种类似,但使用 `@Local` 注解。 - **存在 Remote 与 Local 接口的无状态 SessionBean**:同时定义两个接口和 Bean 类,分别使用 `@Remote` 和 `@Local`。 **4.2 STATEFUL SESSION BEANS(有状态 Bean)开发**: - 有状态 SessionBean 用于维护客户端状态。 - 使用 `@Stateful` 注解定义 Bean。 **4.3 STATELESS SESSION BEAN 与 STATEFUL SESSION BEAN 的区别**: - 无状态 SessionBean 不保留客户端状态,而有状态 SessionBean 则保持。 - 有状态 Bean 适用于需要保持会话状态的场景。 **4.4 如何改变 SESSION BEAN 的 JNDI 名称**: - 通过 `@Name` 注解指定 JNDI 名称。 **4.5 SESSION BEAN 的生命周期**: - 创建、激活、被动和销毁等阶段。 - 容器负责管理整个生命周期。 **4.6 拦截器 (INTERCEPTOR)**: - 用于在方法调用前后执行自定义代码。 - 使用 `@Interceptor` 和 `@AroundInvoke` 等注解定义。 **4.7 依赖注入 (DEPENDENCY INJECTION)**: - 使用 `@Inject` 注解自动注入 Bean。 - 无需显式创建对象。 **4.8 定时服务 (TIMERSERVICE)**: - 定义定时任务。 - 使用 `@Timeout` 注解处理超时事件。 **4.9 安全服务 (SECURITY SERVICE)**: - 实现基于角色的安全性。 - 自定义安全域,如使用 `@SecurityDomain`。 **4.9.1 自定义安全域**: - 定义安全策略和认证机制。 #### 五、JMS(Java Message Service) **5.1 消息驱动 Bean (Message Driven Bean)**: - 用于处理异步消息。 - 使用 `@MessageDriven` 注解定义。 **5.1.1 Queue 消息的发送与接收 (PTP 消息传递模型)**: - PTP 模型表示点对点模型。 - 发送者发送消息到 Queue,消费者从 Queue 中取出并消费消息。 **5.1.2 Topic 消息的发送与接收 (Pub/sub 消息传递模型)**: - Pub/sub 模型表示发布订阅模型。 - 发布者发送消息到 Topic,多个订阅者可以接收消息。 #### 六、实体 Bean (Entity Bean) **6.1 实体 Bean 的组成文件 PERSISTENCE.XML 配置**: - 定义实体类和数据源的映射关系。 **6.2 JBOSS 数据源的配置**: - **MySql 数据源的配置**:定义连接池、用户名和密码等信息。 - **MsSqlServer2000 数据源的配置**:与 MySQL 类似,注意驱动和 URL 的差异。 - **Oracle9i 数据源的配置**:同样需要定义连接池等信息。 **6.3 实体 Bean 发布前的准备工作**: - 确保数据源配置正确。 - 实体类和配置文件准备就绪。 **6.4 单表映射的实体 Bean**: - 定义实体类,使用 `@Entity` 注解标记。 - 使用 `@Table` 指定表名。 **6.5 属性映射**: - 映射实体类属性到数据库表字段。 - 使用 `@Column` 注解指定字段名称。 **6.6 持久化实体管理器 ENTITYMANAGER**: - 提供了对实体的 CRUD 操作。 - 使用 `@PersistenceContext` 注入 EntityManager。 **6.6.1 Entity 获取 find() 或 getReference()**: - `find()` 方法根据主键查找实体。 - `getReference()` 方法返回实体的引用。 **6.6.2 添加 persist()**: - 保存新实体到数据库。 **6.6.3 更新实体**: - 修改实体后调用 flush() 方法更新数据库。 **6.6.4 合并 Merge()**: - 将非托管实体合并到当前事务中。 **6.6.5 删除 Remove()**: - 删除实体。 **6.6.6 执行 EJB3QL 操作 createQuery()**: - 执行 EJB3 查询语言 (EJB3QL) 查询。 **6.6.7 执行 SQL 操作 createNativeQuery()**: - 执行原生 SQL 查询。 **6.6.8 刷新实体 refresh()**: - 重新加载实体的状态。 **6.6.9 检测实体当前是否被管理中 contains()**: - 检查实体是否处于托管状态。 **6.6.10 分离所有当前正在被管理的实体 clear()**: - 移除所有托管实体。 **6.6.11 将实体的改变立刻刷新到数据库中 flush()**: - 强制将更改同步到数据库。 **6.6.12 改变实体管理器的 Flush 模式 setFlushMode()**: - 设置 Flush 模式。 **6.6.13 获取持久化实现者的引用 getDelegate()**: - 获取底层持久化实现的引用。 **6.7 关系/对象映射**: - 实体之间的关联关系映射。 - 使用 `@OneToOne`、`@OneToMany`、`@ManyToOne` 和 `@ManyToMany` 等注解。 **6.7.1 映射的表名或列名与数据库保留字同名时的处理**: - 使用 `@Column(name = "ColumnName")` 明确指定列名。 **6.7.2 一对多及多对一映射**: - 一对多和多对一关联使用 `@OneToMany` 和 `@ManyToOne`。 **6.7.3 一对一映射**: - 使用 `@OneToOne`。 **6.7.4 多对多映射**: - 使用 `@ManyToMany`。 **6.8 使用参数查询**: - **命名参数查询**:使用 `:parameterName` 形式。 - **位置参数查询**:使用 `?1`, `?2` 等形式。 - **Date 参数**:处理日期类型的参数。 **6.9 EJB3QL 语言**: - **大小写敏感性 (Case Sensitivity)**:默认情况下不区分大小写。 - **排序 (orderby)**:对结果进行排序。 - **查询部分属性**:选择特定的属性。 - **查询中使用构造器 (Constructor)**:创建新的对象实例。 - **聚合查询 (Aggregation)**:执行聚合函数,如 SUM, AVG 等。 - **关联 (join)**:连接多个实体。 通过以上知识点的学习,开发者可以全面掌握 EJB3 的核心概念和技术细节,从而能够有效地开发出高性能的企业级应用。