50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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:332252
用户头像

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

关注

评论

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

这样提问,大牛才会为你解答(提问的智慧)

yes

Soul 学习笔记---soul 数据同步的浅显分析(四)

fightingting

Soul网关

产品经理00期训练营第一周作业 4班

mas

产品经理训练营

Java学习(一)

灵霄

java基础

如何处理消息队列中的重复消息

废材姑娘

RocketMQ

如何构建高效可信的持续交付能力,华为云有绝活!

华为云开发者联盟

软件 DevOps 持续交付 华为云

AI无人机出手,让输电线路巡检更“聪明”!

华为云开发者联盟

华为云 modelarts 视觉处理

Spring 源码学习 15:finishBeanFactoryInitialization(重点)

程序员小航

spring 源码

产品经理训练营作业00

KingSwim

深入剖析RSA密钥原理及实践

vivo互联网技术

算法 https 公钥加密 rsa

轻松几步教你将React Native 项目运行在Web端

华为云开发者联盟

html 大前端 Web API React Native

产品经理训练营-第一周作业

羽室

智能手表

张老蔫

28天写作

开发实战:Float如何保留2位小数

worry

一字一句的让你彻底掌握JavaScript中的回调函数

华为云开发者联盟

JavaScript 大前端 同步 回调函数

一个button的成长过程

德育处主任

CSS html css3 html/css 28天写作

如何恶意使用微信视频号 | 视频号 28 天 (12)

赵新龙

28天写作

Java 程序经验小结:消除GC触及不到的过期对象引用

后台技术汇

28天写作

作业-week1

赝品

Soul学习笔记---运行 soul-examples-http(二)

fightingting

Soul网关

《原神》运维自动化的探索与实践

OpsMind

运维 运维自动化

当前岗位的理想岗位模型

白生

汽车行业产品经理备忘录(作业三)

Rui

绩效管理,上下同心者胜(三)

一笑

管理 绩效 28天写作

Soul 网关实践 04|dubbo 服务接入网关

哼干嘛

经验说丨华为云视频Cloud Native架构下实践

华为云开发者联盟

架构 微服务 华为云 CloudNative

期货合约系统软件开发|期货合约APP开发

系统开发

云原生动态周报 | KubeEdge被评为2020十大边缘计算开源项目

华为云原生团队

云计算 云原生 边缘计算 华为云 边缘技术

Soul学习笔记---运行 soul-examples-dubbo(三)

fightingting

Soul网关

一张自查清单

熊斌

学习 个人总结 成长笔记 28天写作

项目管理系列(6)-能力成熟度

Ian哥

28天写作

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