BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 张龙 关注 12 他的粉丝 发布于 2011年1月10日. 估计阅读时间: 6 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

不久前,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;

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT