`

从EJB 3中获取EJBContext的4种方式(转)

    博客分类:
  • EJB
 
阅读更多
原文地址:http://javahowto.blogspot.com/2006/06/4-ways-to-get-ejbcontext-in-ejb-3.html

1. 使用bean类中的域注入。这些域可以使用任意访问修饰符(e.g., private, public, protected, package default).

package com.foo.ejb;

import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

@Stateless
public class HelloBean implements HelloRemote {
@Resource
private SessionContext sctx;

public void hello() {
  System.out.println("SessionContext from field injection: " + sctx);
}

2. 使用bean类中的set方法进行注入。可以使用方法注入或域注入,但一能同时使用。这些set方法可以使用任意访问修饰符(e.g., private, public, protected, package default).

@Stateless
public class HelloBean implements com.foo.ejb.HelloRemote {
private SessionContext sctx;

@Resource
private void setSessionContext(SessionContext sctx) {
  this.sctx = sctx;
}
}



@Stateless
public class HelloBean implements com.foo.ejb.HelloRemote {
private SessionContext sctx;

@Resource
private void setSctx(SessionContext sctx) {
  this.sctx = sctx;
}
}

3. 通过@Resource的name属性查找被注入的资源(若未指定,则使用默认名称)

@Stateless
public class HelloBean implements com.foo.ejb.HelloRemote {
@Resource(name="sessionContext")
private SessionContext sctx;

public void hello() {
  try {
      InitialContext ic = new InitialContext();
      SessionContext sctxLookup =
             (SessionContext) ic.lookup("java:comp/env/sessionContext");
      System.out.println("look up injected sctx: " + sctxLookup);
  } catch (NamingException ex) {
      throw new IllegalStateException(ex);
  }
}

或者,若未指定,则使用默认名称。注意,被注入的资源的默认名称为fully-qalified-class-name/variable-name:

@Stateless
public class HelloBean implements com.foo.ejb.HelloRemote {
@Resource
private SessionContext sctx;

public void hello() {
  try {
     InitialContext ic = new InitialContext();
     SessionContext sctxLookup =
         (SessionContext) ic.lookup("java:comp/env/com.foo.ejb.HelloBean/sctx");
     System.out.println("look up injected sctx by default name: " + sctxLookup);
  } catch (NamingException ex) {
     throw new IllegalStateException(ex);
  }
}

4.查找标准名称 java:comp/EJBContext (注意没有/env)

@Stateless
public class HelloBean implements com.foo.ejb.HelloRemote {
public void hello() {
try {
    InitialContext ic = new InitialContext();
    SessionContext sctxLookup =
       (SessionContext) ic.lookup("java:comp/EJBContext");
    System.out.println("look up EJBContext by standard name: " + sctxLookup);
} catch (NamingException ex) {
    throw new IllegalStateException(ex);
}
}

以上例子使用的是无状态会话bean,也同样可用于有状态会话bean,Singleton会话bean(在EJB 3.1中引入)和消息驱动bean。
EJBContext是一种特定类型的资源,一需要在ejb-jar.xml和其它厂商特定的配置文件中配置(sun-ejb-jar.xml, jboss.xml, etc)。
可以选择在部署描述文件中声明对EJBContext/SessionContext/MessageDrivenContext的引用,但很可能会得到javax.naming.NameNotFoundException异常。

这些技术在EJB3规范中都有定义,并能在所有JavaEE 5兼容的应用服务器中正常运行。我已在JavaEE SDK 5/SJSAS 9/Glassfish中测试了以上例子。

分享到:
评论

相关推荐

    实战角度比较EJB2和EJB3的架构异同

    EJB2和EJB3是EJB技术的两个主要版本,它们在架构上存在显著差异,尤其是在编程模型的简化、依赖注入(DI)和对象创建方式等方面。 EJB2的编程模型相对复杂,一个EJB通常需要两个接口(业务接口和远程接口)以及一个...

    EJB3基础教程

    Java Persistence API(JPA)是EJB3的一部分,提供了一种标准的方式来管理和持久化Java对象。ORM(Object-Relational Mapping)允许开发者用面向对象的方式操作数据库,避免了繁琐的SQL代码。 ### 5. 容器管理的...

    EJB3的三本好书第3本 Mastering EJB3 4ed

    EJB3的三本好书之三,也很不错的一本ejb3的书籍,是英文版,附带源代码,这本书的好处是与Mastering EJB 3ed有一定的继承性,可以对比来看. 3本书的地址 1. Beginning EJB3 Application Development From Novice to ...

    EJB3 PPT教程

    EJB3中的EntityBean主要基于JPA(Java Persistence API),采用注解驱动的方式进行对象关系映射(ORM)。`@Entity`注解标记实体类,`@Table`定义映射的数据库表,`@Id`标识主键字段。此外,还有`@GeneratedValue`...

    EJB3开发Entity

    EJB3的实体Bean有两种生命周期管理方式:容器管理的持久性(CMP)和bean管理的持久性(BMP)。EJB3更倾向于使用CMP,由容器负责对象的创建、初始化、持久化、查找和删除,开发者只需要关注业务逻辑。 5. **事务...

    ejb3 带源码

    "Mastering EJB3"和"Beginning EJB3 Application Development"都是深入讲解EJB3技术的专业书籍,涵盖了从基础概念到高级特性的全面内容,包含实例代码和实战指导,是学习和进阶EJB3开发的重要参考。 通过阅读这些...

    ejb3进阶案例

    ejb3通过注解驱动的方式,减少了大量XML配置,使得代码更加简洁。 **2. 实体Bean** 实体Bean(Entity Bean)代表应用程序中的持久化数据。ejb3引入了JPA(Java Persistence API),使得实体Bean的使用变得更加...

    EJB 3实战 带书签

    此外,EJB 3还支持Criteria API,这是一种类型安全的方式来构建查询,使得构建动态查询变得更加容易。 在EJB 3的实际应用方面,本书将深入讲解如何在企业应用中应用EJB技术。这包括如何将EJB集成到现有的Java EE...

    EJB3应用实例

    4. **实体bean(Entity Beans)**:EJB3中的实体bean通常对应数据库中的记录,它们可以是容器管理的持久化(CMP)或Bean管理的持久化(BMP)。`@Entity`注解标记实体类,`@Table`定义映射的数据库表,`@Id`定义主键...

    EJB3规范 简体中文

    ### EJB3规范简体中文版关键知识点解析 #### 一、引言 EJB (Enterprise JavaBeans) 是 Java 平台为企业级应用程序提供的一种组件模型。随着技术的发展,EJB 经历了多个版本的迭代,其中 EJB 3.x 版本引入了大量的...

    EJB3入门例子

    **EJB3(Enterprise JavaBeans 3.0)**是Java EE平台中的核心组件,它为企业级应用提供了服务器端的组件模型。EJB3引入了许多重大的改进,使其变得更加轻量级,降低了开发复杂性,使得开发者能够更专注于业务逻辑而...

    EJB3中MessageDrivenBean知识

    其中,MessageDrivenBean(MDB)是EJB3中一种特殊类型的bean,专门用于处理消息队列中的消息,实现了异步处理,是企业级应用中的重要组件。 1. **MessageDrivenBean概述** MessageDrivenBean是JMS(Java Message ...

    struts2-ejb3配置

    Struts2和EJB3是两个在Java Web开发中广泛使用的框架,Struts2主要用于处理MVC模式的前端控制,而EJB3则提供企业级的服务,如事务管理、安全性和持久化等。将这两者整合在一起,可以利用EJB3的强大功能来处理复杂的...

    EJB3 实例练习(一)

    EJB3的JPA(Java Persistence API)提供了一种声明式的方式管理对象关系映射(ORM),使得开发人员可以更专注于业务逻辑,而非数据库操作。 3. Session Bean 会话bean用于处理特定的业务逻辑,它们可以是无状态的...

    JBOSS6.0.0M4发布EJB3测试

    【JBOSS6.0.0M4发布EJB3测试】这个主题涉及到的是Java企业版(Java EE)中的核心组件——Enterprise JavaBeans (EJB)的第三版(EJB3),以及它在JBoss Application Server 6.0.0 Milestone 4 (JBOSS6.0.0M4)版本中的...

    EJB3(入门经典简版)

    总的来说,EJB3是Java企业开发中的强大工具,它提供了全面的解决方案,从数据库管理到事务处理,再到安全性,都为开发者提供了便利。通过学习EJB3,开发者能够构建出高效、稳定的企业级应用。阅读《EJB3(入门经典的...

Global site tag (gtag.js) - Google Analytics