原文地址: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是EJB技术的两个主要版本,它们在架构上存在显著差异,尤其是在编程模型的简化、依赖注入(DI)和对象创建方式等方面。 EJB2的编程模型相对复杂,一个EJB通常需要两个接口(业务接口和远程接口)以及一个...
Java Persistence API(JPA)是EJB3的一部分,提供了一种标准的方式来管理和持久化Java对象。ORM(Object-Relational Mapping)允许开发者用面向对象的方式操作数据库,避免了繁琐的SQL代码。 ### 5. 容器管理的...
EJB3的三本好书之三,也很不错的一本ejb3的书籍,是英文版,附带源代码,这本书的好处是与Mastering EJB 3ed有一定的继承性,可以对比来看. 3本书的地址 1. Beginning EJB3 Application Development From Novice to ...
EJB3中的EntityBean主要基于JPA(Java Persistence API),采用注解驱动的方式进行对象关系映射(ORM)。`@Entity`注解标记实体类,`@Table`定义映射的数据库表,`@Id`标识主键字段。此外,还有`@GeneratedValue`...
EJB3的实体Bean有两种生命周期管理方式:容器管理的持久性(CMP)和bean管理的持久性(BMP)。EJB3更倾向于使用CMP,由容器负责对象的创建、初始化、持久化、查找和删除,开发者只需要关注业务逻辑。 5. **事务...
"Mastering EJB3"和"Beginning EJB3 Application Development"都是深入讲解EJB3技术的专业书籍,涵盖了从基础概念到高级特性的全面内容,包含实例代码和实战指导,是学习和进阶EJB3开发的重要参考。 通过阅读这些...
ejb3通过注解驱动的方式,减少了大量XML配置,使得代码更加简洁。 **2. 实体Bean** 实体Bean(Entity Bean)代表应用程序中的持久化数据。ejb3引入了JPA(Java Persistence API),使得实体Bean的使用变得更加...
此外,EJB 3还支持Criteria API,这是一种类型安全的方式来构建查询,使得构建动态查询变得更加容易。 在EJB 3的实际应用方面,本书将深入讲解如何在企业应用中应用EJB技术。这包括如何将EJB集成到现有的Java EE...
4. **实体bean(Entity Beans)**:EJB3中的实体bean通常对应数据库中的记录,它们可以是容器管理的持久化(CMP)或Bean管理的持久化(BMP)。`@Entity`注解标记实体类,`@Table`定义映射的数据库表,`@Id`定义主键...
### EJB3规范简体中文版关键知识点解析 #### 一、引言 EJB (Enterprise JavaBeans) 是 Java 平台为企业级应用程序提供的一种组件模型。随着技术的发展,EJB 经历了多个版本的迭代,其中 EJB 3.x 版本引入了大量的...
总结起来,ejb3-persistence.jar是EJB 3规范中的持久化部分实现,它旨在提供一种简化的企业级数据访问解决方案,通过消除EJB 2.1中的复杂性,提升了开发效率和代码的可维护性。开发者可以通过这个库轻松地处理数据库...
**EJB3(Enterprise JavaBeans 3.0)**是Java EE平台中的核心组件,它为企业级应用提供了服务器端的组件模型。EJB3引入了许多重大的改进,使其变得更加轻量级,降低了开发复杂性,使得开发者能够更专注于业务逻辑而...
EJB3QL是EJB3中用于查询EntityBean的一种语言,它是SQL的一个面向对象的扩展。EJB3QL支持各种复杂的查询操作,包括连接查询、分组、排序、聚合函数等,使得开发者能够以更加自然和直观的方式表达查询需求。 #### ...
其中,MessageDrivenBean(MDB)是EJB3中一种特殊类型的bean,专门用于处理消息队列中的消息,实现了异步处理,是企业级应用中的重要组件。 1. **MessageDrivenBean概述** MessageDrivenBean是JMS(Java Message ...
Struts2和EJB3是两个在Java Web开发中广泛使用的框架,Struts2主要用于处理MVC模式的前端控制,而EJB3则提供企业级的服务,如事务管理、安全性和持久化等。将这两者整合在一起,可以利用EJB3的强大功能来处理复杂的...
EJB3的JPA(Java Persistence API)提供了一种声明式的方式管理对象关系映射(ORM),使得开发人员可以更专注于业务逻辑,而非数据库操作。 3. Session Bean 会话bean用于处理特定的业务逻辑,它们可以是无状态的...
【JBOSS6.0.0M4发布EJB3测试】这个主题涉及到的是Java企业版(Java EE)中的核心组件——Enterprise JavaBeans (EJB)的第三版(EJB3),以及它在JBoss Application Server 6.0.0 Milestone 4 (JBOSS6.0.0M4)版本中的...
《EJB3核心规范(中文)》是一份详尽的技术文档,为开发者提供了关于Enterprise JavaBeans (EJB) 3.0 核心规范的全面指南。EJB 技术作为Java平台上的一个关键组成部分,在构建分布式企业应用程序方面扮演着重要角色...
总的来说,EJB3是Java企业开发中的强大工具,它提供了全面的解决方案,从数据库管理到事务处理,再到安全性,都为开发者提供了便利。通过学习EJB3,开发者能够构建出高效、稳定的企业级应用。阅读《EJB3(入门经典的...
9. **安全控制(Security)**:EJB3允许开发者使用角色和权限来控制对bean方法的访问,提供了一种强大的安全机制。 在源码学习过程中,你可以通过以下步骤深入理解EJB3: 1. **阅读源码结构**:了解项目目录结构,...