### EJB3+JPA开发总结 #### 一、EJB3概述 EJB3 (Enterprise JavaBeans 3) 是Java EE平台上的一个重要组件,它主要用于构建企业级应用程序中的业务逻辑层。相比于早期版本,EJB3进行了大量改进,简化了许多开发流程,使得开发者能够更加专注于业务逻辑的实现而非框架本身。 #### 二、无状态会话Bean的开发 无状态会话Bean是一种轻量级的服务组件,它可以处理客户端请求,但是不保存任何会话状态。在EJB3中,开发无状态会话Bean变得非常简单。 ##### 1. 开发只存在Remote接口的无状态会话Bean **步骤如下:** **第一步**:定义一个包含所有业务方法的远程接口。该接口无需任何特定注解,类似于普通的Java接口。 **示例代码**: ```java public interface RemoteService { void doSomething(); } ``` **第二步**:实现上述定义的接口,并使用`@Stateless`和`@Remote`注解。`@Stateless`注解表示这是一个无状态会话Bean,而`@Remote`注解则指明了远程接口。 **示例代码**: ```java @Stateless @Remote(RemoteService.class) public class StatelessService implements RemoteService { @Override public void doSomething() { // 实现业务逻辑 } } ``` **引入必要的EJB类包**:在使用这些注解之前,需要确保已经引入了EJB相关的类包。这些类包通常可以在JBoss服务器的部署目录下找到,例如在`/server/all/deploy/jboss-aop-jdk50.deployer`, `/server/all/deploy/ejb3.deployer`, 或者`/lib/endorsed`等文件夹下。 ##### 2. 开发只存在Local接口的无状态会话Bean 开发只存在Local接口的无状态会话Bean与Remote接口的步骤基本相同,唯一的不同是使用`@Local`注解替代`@Remote`注解。 **示例代码**: ```java @Stateless @Local(LocalService.class) public class StatelessService implements LocalService { @Override public void doSomething() { // 实现业务逻辑 } } ``` #### 三、修改SessionBean的JNDI名称 EJB3提供了两种方式来改变SessionBean的JNDI名称: 1. **使用注解**:在`@Stateful`或`@Stateless`注解中包含一个`name`属性来指明Session Bean的别名。 **示例代码**: ```java @Stateless(name = "alias") public class StatelessService implements RemoteService { // ... } ``` 在客户端可以通过`"alias/remote"`或`"alias/local"`这样的JNDI名称来访问SessionBean。 2. **使用JBoss特定的注解**:在JBoss环境中,可以使用`@RemoteBinding`和`@LocalBinding`注解来重命名SessionBean。 **示例代码**: ```java @Stateless @RemoteBinding(jndiBinding = "alias/remoteoperation") @LocalBinding(jndiBinding = "alias/localoperation") public class StatelessService implements RemoteService, LocalService { // ... } ``` #### 四、SessionBean的生命周期管理 EJB3支持对SessionBean的生命周期进行更细粒度的控制,提供了多种注解来实现这一目标。 - **`@PostConstruct`**:当Bean实例化后,调用此方法。适用于有状态和无状态会话Bean。 - **`@PreDestroy`**:在容器销毁Bean实例前调用此方法。 - **`@PrePassivate`**:在有状态会话Bean钝化前调用。 - **`@PostActivate`**:在有状态会话Bean激活后调用。 - **`@Init`**:指定有状态会话Bean的初始化方法。不同于`@PostConstruct`之处在于可以存在多个`@Init`方法。 - **`@Remove`**:当应用通过存根对象调用此方法时,容器会将其从池中移除。 #### 五、拦截器 拦截器是一种用于监听和修改会话Bean行为的机制,可以应用于无状态会话Bean、有状态会话Bean以及消息驱动Bean。 - **外部拦截器**:定义在单独的类中,并通过`@Interceptors`注解指定给Session Bean使用。 **示例代码**: ```java @Interceptors({HelloInterceptor.class}) @Stateless public class StatelessService implements RemoteService { // ... } ``` - **内部拦截器**:直接在Bean类的方法上定义。 **示例代码**: ```java @Stateless public class StatelessService implements RemoteService { @AroundInvoke public Object interceptMethod(InvocationContext ctx) throws Exception { // 拦截逻辑 return ctx.proceed(); } @Override public void doSomething() { // 业务逻辑 } } ``` #### 六、依赖注入 依赖注入是EJB3中的一个重要特性,它允许将EJB存根对象自动注入到任何由容器管理的POJO中。使用`@EJB`注解即可实现。 **示例代码**: ```java @Stateless @Remote(Injection.class) public class InjectionBean implements Injection { private Injection dependency; @EJB public void setDependency(Injection dependency) { this.dependency = dependency; } @Override public void saySomething(String name) { dependency.saySomething(name); } } ``` 以上是关于EJB3开发的一些基本总结,希望能帮助初学者快速入门EJB3技术栈。
剩余38页未读,继续阅读
- 粉丝: 0
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 机械设计单轴变位机设计sw21非常好的设计图纸100%好用.zip
- 高德地图与58租房程序整合操作指南
- OAI 5G基站配置文件
- (工程项目线上支持)预瞄跟踪控制算法,单点或多点驾驶员模型,横制,纯跟踪算法 carsim和MATLAB Simulink联合仿真 附建模说明书
- 电信10000管家专用测速软件 免安装
- 机械设计等离子反应器sw18可编辑非常好的设计图纸100%好用.zip
- 开心麻花影视作品分析程序操作指南及应用场景
- 机械设计点针式打标设备sw17可编辑非常好的设计图纸100%好用.zip
- 污水处理程序 工厂污水处理控制系统 西门子PLC200smart和上位机wincc(版本号V7.4)污水处理控制系统,带图纸,带分配点位,带管道图,带PLC程序,带上位机程序,上位机画面,真实工程项
- 机械设计电动切割机X_T非常好的设计图纸100%好用.zip
- go+wails 常见加密解密工具集合
- Excel数据分析师程序操作指南与应用实例
- 《初等数论第二版》思维导图
- YouTube最受欢迎的100个频道数据,视频网站频道排行数据,油管视频数据
- 使用 HTML 和 CSS 创建简易且美观的圣诞树网页效果
- labview视觉检测,一个相机,两个相机,抓边,找圆,一套代码任意切 采用halcon模板匹配