生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

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

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

关注

评论

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

手机是21世纪最成功的毒品

Neco.W

学习 提升效率 工作

安全做到首位 统信UOS后激勃发

统小信uos

网络安全 操作系统

Hive底层执行引擎的深度剖析(免费)

奈学教育

大数据 hive

深入理解JVM内存管理 - 方法区

SkyeDance

深入理解JVM 方法区 老年代

学习没进步?也许反馈有问题

KAMI

学习 认知提升

游戏夜读 | 什么是黑色一分钟?

game1night

Docker 搭建 Postgres + pgAdmin 环境

姜雨生

Docker DevOps postgres

我们是活着,而不是活过

小天同学

个人感想 生活,随想 随笔杂谈 日常思考

ARTS-week one

Jokky💫

ARTS 打卡计划

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十四)编写测试-显示名

编程道与术

Java 编程 TDD 单元测试 JUnit

面试题:教你如何吃透RocketMQ

奈学教育

架构 RocketMQ 架构设计

奈学大数据开发工程师分享787个技术,快来收割

奈学教育

大数据

美国黑客曝出政府惊天内幕,看区块链如何解决!

CECBC

CECBC 区块链技术 民生 不可篡改 信息公开

Vim使用总结

JDoe

vim

Vue生成AST算法的解析

djknight

Java Vue AST

收藏!如何有效实施devops?

禅道项目管理

DevOps 运维 持续集成 开发 自动化测试

产品周刊 | 第 17 期(20200531)

Herbert

产品 设计 产品经理 产品设计 产品推荐

撸一串趣图,给晚上加班打个鸡血

码农神说

程序员 加班 段子

CI/CD - Python Django 项目在 Jenkins 上的实践

meta-algorithmX

Python django TDD CI/CD

GcExcel:比 Apache POI 速度更快、性能更高

葡萄城技术团队

Apache POI GCExcel

运维日志里隐藏的安全危机,你知道怎么挖吗?听听专家怎么说

secisland

态势感知 关联分析 SOC

redis持久化RDB与AOF

wjchenge

redis

【译】业务转型是什么?

涛哥 数字产品和业务架构

业务中台 数字化转型

SpringBatch系列入门之Tasklet

稻草鸟人

spring SpringBatch 批处理

CEO或业务负责人应该具备的数据分析能力

花生

工具 数据 CEO

Java是不是慢半拍?

X.F

Java 架构 编程语言

『PyTorch』使用指定GPU的方法

kraken0

人工智能 学习 图像识别

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十五)编写测试-断言\假设\使测试失效

编程道与术

Java 编程 TDD 单元测试 JUnit

霸榜18年,作者连续20年获得微软MVP,这本SQL书凭什么成为畅销经典

图灵社区

数据库 SQL语法 sql查询

深入理解ContextClassLoader

SkyeDance

深入理解JVM ContextClassLoader

万恶的NPE如何避免,几种你必须知道的方案!!!

不才陈某

后端

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