2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

关注

评论

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

如何判断透明LED显示屏质量优劣

Dylan

LED显示屏 led显示屏厂家

3大类15小类前端代码规范,让团队代码统一规范起来!

南极一块修炼千年的大冰块

7月月更

静态成员函数访问非静态数据成员【C++】

攻城狮杰森

c++ 7月月更

C# 使用ListView控件实现文件查看大图标小图标,详细信息效果。

IC00

C# 7月月更

ID生成器

ES_her0

7月月更

中原银行代码智能重构实践

中原银行

生产力 插件 代码重构 中原银行 智能重构

C#入门系列(二十三) -- 分部类和抽象类

陈言必行

7月月更

Qt | Qt Creator功能

YOLO.

qt 7月月更

GPS原始坐标转百度地图坐标(纯C代码)

DS小龙哥

7月月更

Qt|使用Http通讯下载文件

中国好公民st

HTTP qt 7月月更

QComboBox 样式表

小肉球

qt 7月月更

工作流引擎在vivo营销自动化中的应用实践 | 引擎篇03

vivo互联网技术

工作流引擎 workflow Activiti 流程引擎

java零基础入门-File类(概念篇)

喵手

Java 7月月更

「分享」从Mybatis源码中,学习到的10种设计模式

小傅哥

设计模式 小傅哥 mybatis 大厂面试 面试问题

NFT市场格局仍未变化,Okaleido能否掀起新一轮波澜?

西柚子

presto+yanagishima环境安装

怀瑾握瑜的嘉与嘉

presto 7月月更

直播系统源码——短视频直播系统源码

开源直播系统源码

软件开发 直播系统 开源源码 短视频直播源码

【LeetCode】 数组嵌套Java题解

Albert

LeetCode 7月月更

Android gradle常用

沃德

android Gradle 7月月更

分布式系统中数据存储方案实践

Java 架构

strlen()

謓泽

7月月更

面试突击66:请求转发和请求重定向有什么区别?

王磊

Java面试题

Kubernetes资源编排系列之二: Helm篇

阿里云大数据AI技术

运维

关于InnoDB表数据和索引数据的存储

程序员欣宸

MySQL innodb MySQL InnoDB 7月月更

Unity实战问题-WebGL问题集锦-上篇

芝麻粒儿

Unity 7月月更

Block在开发中的实践应用

NewBoy

ios 前端 移动端 iOS 知识体系 7月月更

采用Dubbo?还是Spring Cloud?

博文视点Broadview

CRMEB 多商户这些功能,你都用过吗?

CRMEB

LeetCode-104. 二叉树的最大深度(java)

bug菌

Leet Code 7月月更

去哪儿旅行海量指标数据采集与存储

Qunar技术沙龙

重新认识生命世界,也重新认识我们自己

图灵教育

科普

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