限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

JBoss AS 6 上的 EJB 3.1 新特性简介

  • 2011-01-09
  • 本文字数:1364 字

    阅读完需:约 4 分钟

不久前, JBoss 发布了新版本的 JBoss AS 6 应用服务器,该新版本提供了对 Java EE 6 Web Profile 的完整支持。David Salter 则在自己的博客中详细介绍了EJB 3.1 的新特性

EJB 3.1 的 3 个主要新特性是:

  • EJB 可以作为 WAR 文件的一部分部署,无需提供单独的 EJB JAR 文件
  • 可以开发无业务接口的 EJB
  • 可以将 EJB 部署为 Singleton

下面分别来看看这 3 个新特性。

EJB 可以作为 WAR 文件的一部分部署。

如果使用 NetBeans 进行开发,那么你可以创建一个简单的 Java EE 6 Web 项目,然后在该 Web 项目内创建 EJB。如果开发的是 Web 项目,那么无需添加额外的 JAR 文件就可以部署任何 EJB。

可以开发无业务接口的 EJB

创建无业务接口的 EJB 就像创建 POJO 一样简单。现在,可以像下面的代码一样定义 EJB:

复制代码
package com.davidsalter.ejb31test;
import javax.ejb.Stateless;
@Stateless
public class HelloSessionBean {
public String sayHello() {
return "Hi there !!";
}
}

与 POJO 唯一的差别在于该类使用了注解 @Stateless,这表明它是一个 Stateless Session Bean。

如果将包含该 EJB 的 WAR 文件部署到 JBoss 中,那么在部署成功后我们会在 JBoss 控制台上看到如下消息:

复制代码
21:08:29,653 INFO [org.jboss.ejb3.nointerface.impl.jndi.AbstractNoInterfaceViewBinder] Binding the following entry in Global JNDI for bean:HelloSessionBean
HelloSessionBean/no-interface -> EJB3.1 no-interface view

从 Web 项目中调用 EJB 是相当简单的事情。我们可以使用 @EJB 注解将 EJB 注入到 Servlet 中。如下代码所示:

复制代码
public class HelloServlet extends HttpServlet {
@EJB
HelloSessionBean helloSessionBean;
...
PrintWriter out = response.getWriter();
out.println(helloSessionBean.sayHello());

可以将 EJB 部署为 Singleton

现在,可以通过 @Singleton 注解将 EJB 声明为 Singleton。如果使用 @PostConstruct 与 @PreDestroy 注解,那么就可以在该 Singleton 上轻松实现任意的初始化与清理动作了。被 @PostConstruct 所注解的方法会在该 Singleton 首次构造之后得到调用,比如说当调用了 Singleton 的某个 Servlet 或是某个 JSF 的 backing bean 首次加载时。被 @PreDestroy 所注解的方法会在该 Singleton 销毁前得到调用,因此该方法可用于执行资源清理操作。

以这种方式定义 Singleton 可用于存储应用的多个客户端所需要的数据,如下代码所示:

复制代码
package com.davidsalter.ejb31test;
import java.util.Date;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
@Singleton
public class SingletonSessionBean {
private String creationDate;
@PostConstruct
public void init() {
System.out.println("Initialize singleton");
creationDate = new Date().toString();
}
@PreDestroy
public void shutdown() {
System.out.println("Shutting down singleton");
}
public String getDate() {
return creationDate;
}
}

调用 Singleton 与之前调用 Session Bean 一样简单,如下代码所示:

复制代码
@EJB
SingletonSessionBean singletonSessionBean;

感兴趣的读者可以从这里下载完整的示例代码并实际运行。

2011-01-09 12:332206
用户头像

发布了 88 篇内容, 共 269.3 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

毒瘤还是银弹--低代码与传统研发模式案例对比

赫杰辉

低代码 低代码开发平台

官宣!禅道与极狐(GitLab)达成深度合作,携手推进开源开放DevOps生态发展

禅道项目管理

项目管理 DevOps gitlab

defi流动性系统开发案例详情丨defi流动性源码功能

系统开发咨询1357O98O718

华为 HarmonyOS 正式发布!你还认为鸿蒙只是安卓套壳吗?

北游学Java

鸿蒙

阿里P8熬了一个月肝出这份32W字Java面试手册,在Github标星68K+

Java 程序员 面试

【干货篇】bilibili:基于 Flink 的机器学习工作流平台在 b 站的应用

Apache Flink

flink

拍乐云受邀QCon大会 | 详解音视频技术架构实践,首发美术教学音视频方案

拍乐云Pano

佣金产品的敏捷交付

鲸品堂

佣金产品 敏捷交付

【LeetCode】连续的子数组和Java题解

Albert

算法 LeetCode 6月日更

Consul场景用例:服务注册(Service discovery) & 服务网格(Service mesh)

awen

微服务 Consul Service Mesh 服务网格 服务注册与发现 服务网格

springboot-vue-activiti前后端分离快速开发平台脚手架,整合工作审批流,流程在线编辑器

金陵老街

Vue 后端 工作流 springboot

阿里直通车?阿里Java面试“内幕”:十万字内部面试题总结

Java架构追梦

Java 阿里巴巴 架构 面试

拍乐云推出业内首个「线上美术教学音视频方案」,打造极致互动体验

拍乐云Pano

从零开始学习3D可视化之控制对象(2)

ThingJS数字孪生引擎

可视化 数据化 3D 3D可视化

蓝海战略 - 如何设计与众不同的价值曲线

石云升

战略思考 职场经验 6月日更

Flink 在有赞的实践和应用

Apache Flink

flink

python使用命令行传入参数

卤蛋翔

6月日更

2021金三银四面试经历:腾讯三面落马+拒网易、CVTE后,字节四面成功拿下offer

Java 程序员 架构 面试

大数据好书推荐

五分钟学大数据

你想进大厂吗?阿里Java面试“内幕”分享

Java架构师迁哥

即构互动白板升级:全面支持教育机构上线H5交互课件

ZEGO即构

音视频 在线教育 互动白板

最新!GigaOm 发布 API 网关评测报告:API7 和 Kong 企业版本性能对比

API7.ai 技术团队

负载均衡 架构 云原生 后端 网关

iOS上的CSS样式协议 VKCssProtocol

iOSer

CSS ios 移动开发 ios开发 VKCssProtocol

OGA 联盟正式成立!禅道作为理事单位助力共建开源生态!

禅道项目管理

项目管理 DevOps gitlab

联邦计算在百度观星盘的实践

百度Geek说

用了10年Windows后,我最终转向Linux

学神来啦

Linux windows

【译】JavaScript 代码整洁之道-复杂判断

KooFE

JavaScript 大前端 6月日更 整洁代码 条件判断

defi流动性挖矿系统开发案例分析,defi流动性挖矿现成源码

系统开发咨询1357O98O718

自媒体需要追求内容真实性:不能被流量裹胁

石头IT视角

无刷电机与有刷电机的区别

不脱发的程序猿

无刷电机 有刷电机 电机

☕️【Java 技术之旅】知识盲点关于jar包的点点滴滴

码界西柚

Java jar Jar包扫描 6月日更

JBoss AS 6上的EJB 3.1新特性简介_Java_张龙_InfoQ精选文章