EJB3新特性
元数据注解
依赖注入
一 EJB3新特性
相比EJB3以前的版本而言,增加了两个新特性:元数据注解(Annotation) 和依赖注入(Injection),而元数据注解以最大限度的使部署描述符从冗余繁杂中脱离出来。
二 元素据注解
元数据注解,来源于Java EE 5中的Annotation----javax.annotation.*.一般而言,对于定义SLSB(Stateless Session Bean)而言,@Stateless;对于SFSB(Stateful Session Bean)而言,@Stateful;
下面归纳下EJB3中的常用注释:
类型 | 注释 |
Stateless Session Bean(javax.ejb.Stateless) | @Stateless |
Stateful Session Bean(javax.ejb.Stateful) | @Stateful |
Local接口(Javax.ejb.Local) | @Local |
Remote接口(Javax.ejb.Remote) | @Remote |
Message Driven Bean(MDB)(javax.ejb.MessageDriven) | @MessageDriven |
Entiry Bean(实体Bean) | @Entity |
Javax.ejb.remove | @Remove(当一个Session完成时,自动调用Remove) |
Javax.ejb.EJB | @EJB(表示注入实例) |
Javax.annotation.Resource | @Resource(name=”jms/QueueConnectionFactory”) |
当然,EJB注入和Resource注入相比,Ejb注入只是针对于EJB而言,而Resource注入即是对所有的文件都可以进行注入。
Eg:
1) @EJB
Private HelloWorld helloWorld;
2) @Remove
Public String getUserName(String userName);
3) @Resource(name=”jms/QueueConnectionFactory”)
Private ConnectionFactory connectionFactory;
4) @MessageDriven{
activationConfig = {
@ActivationConfigProperty{
propertyName=”destinationName”,
propertyValue=”jms/HelloWorldQueue”
}
}
当然,在MDB消息驱动中,MDB实现了Javax.jms.MessageListener接口。
5) @Entity
@Table{name=”User”}
Pubic class User implements Serializable{
Private Long userId;
@Id
@GeneratedValue(Strategy=GenerationType.AUTO)
@Column(name=”USER_ID”)
Public Long getUserId(Long userId){
Return userId;
}
}
对于在EJB2中,使用容器管理的持久化(Container-Managed Persistence---CMP)实体Bean生成主键困难很多。
下表中说明了J2EE中引入的主要元数据注解。
注解 | 用途 | 可用的组件 |
Javax.annotation.Resource | Resource的依赖注入 | EJB/WEB/应用程序客户端 |
Javax.ejb.EJB | Session Bean的依赖注入 | |
Javax.jws.WebServiceRef | WEB服务的依赖注入 | |
Javax.persistence.PersistenceContext | 容器管理的Entity Manager依赖注入 | EJB/WEB/WEB APP Client |
Javax.persistence.PersistenceUnit | EntityManagerFactory的依赖注入 | EJB/WEB |
Javax.annotation.PostConstruct | 生命周期方法 | |
Javax.annotation.PreDestory | 生命周期方法 | |
Javax.annotation.security.RunAs | 安全 | |
Javax.annotation.security.RolesAllowed | 安全 | EJB |
Javax.annotation.security.PermitAll | 安全 | |
Javax.annotation.security.DenyAll | 安全 | |
Javax.annotation.security.DeclareRoles | 安全 | EJB/WEB |
EJB加载注解的时机:当容器第一次加载客户端组件(eg:Servlet)的时候,发现有元数据注释,它将在后台或者RMI Lookup 这个EJB,从而设置可获得的EJB引用。
下面举个注释的例子:
当然,我们在大型系统的开发中,也会经常用到元数据注释和部署描述符混合使用。下面就是一个创建Ejb Stateless Session Bean例子(ejb-jar.xml):
<enterprise-beans>
<session>
<ejb-name>HelloWordBean</ejb-name>
<local>com.ejb3.client.Bean</local>
<ejb-class>com.ejb3.ejbBean.userBean</ejb-class>
<session-type> Stateless </session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
三 依赖注入(Injection)
依赖注入是通用元数据注解的前端和中心,包含@Resource,@EJB,@WebServ ice-Ref,@PersistenceContext和@PersistenceUnit注解。在Spring Framework中得到很好的体现。
其实关于EJB中依赖注入而言,应该从JNDI查找来说起。若使用过EJB2,就应该知道JNDI实现方式。在JNDI查找Bean过程中,是EJB主动驱动JNDI去lookup其相匹配的资源和Bean;而依赖注入恰恰相反,是资源文件或者Bean通过容器去注入到EJB中,从而让容器处理服务或资源的实例化,初始化以及把服务或资源引用给Client等等复杂的工作,是一种被动的操作。当然,所谓的主动和被动,都是以EJB为主体。
JNDI查找的Sample:
InitialContext context = new InitialContext();
TestEjb testEjb = (TestEjb)context.lookup(“TestEjbBean/Remote”);
分享到:
相关推荐
在EJB 3中,许多配置信息可以通过元数据注解在类或方法上直接指定,如`@Stateless`、`@Stateful`、`@Singleton`、`@MessageDriven`等,分别表示无状态会话bean、有状态会话bean、单例bean和消息驱动bean。...
EJB 3是EJB规范的一个版本,引入了许多简化开发的特性,使得EJB更加易用,特别是对于对象关系映射(ORM)和依赖注入(DI)。 在这个源码包中,我们可能会找到以下关键组成部分: 1. **pom.xml**: Maven项目的配置...
1. **注解驱动(Annotation-based)**:EJB3.0弃用了XML配置文件,转而采用注解来声明实体Bean、会话Bean和消息驱动Bean的元数据。这使得代码更加简洁,减少了配置文件的维护工作,例如`@Entity`、`@Stateless`、`@...
`ilucky-ejb-3.0`很可能是EJB模块,包含了bean的实现和相关的元数据。而`ilucky-ejb-3.0-client`则可能包含了客户端代码,用于访问和测试部署在JBoss服务器上的bean。 总结来说,使用Eclipse和JBoss开发EJB 3.x应用...
4. **实体Bean的元数据注解** - `@Entity`: 标记一个类作为实体Bean。 - `@Table`: 指定实体Bean对应的数据库表名。 - `@Column`: 定义字段与数据库列的映射,包含`name`(列名)、`unique`(是否唯一)、`...
Weblogic 11g 是一款由甲骨文公司(Oracle)开发的企业级...通过研究和运行这个例子,开发者可以深入学习EJB3的核心特性,以及Weblogic服务器的管理与配置。同时,对于那些寻求EJB3实践的人来说,这是一个宝贵的资源。
6. **依赖注入(Dependency Injection,DI)**:EJB3支持JSR 330规范,可以使用`@Inject`注解进行依赖注入,这使得组件之间的关系更易于管理和维护。 7. **查询语言(Java Persistence Query Language,JPQL)**:...
Spring的核心特性之一就是它的依赖注入(Dependency Injection, DI),这让它能够更好地管理和配置应用程序中的对象关系,无论是在J2EE还是J2SE环境下。 **小结:**EJB3.0和Spring在供应商独立性方面都有很好的表现,...
- CDI是Java EE中的一项服务,用于依赖注入和上下文管理,EJB 3.x与CDI紧密集成,增强了Bean的灵活性。 8. ** ejb-jar 和 EAR 文件** - ejb-jar 文件是EJB的容器,包含Bean类、接口和部署描述符。 - EAR...
- **灵活性与扩展性**:EJB3提供了更为灵活的配置选项和更好的扩展性,支持更多的依赖注入策略和事件监听器,使得集成外部服务和资源变得更加容易。 - **性能与可维护性**:尽管EJB3在编译时会产生更多的元数据,但...
4. **注解驱动的编程模型**:EJB 3.0引入了大量注解,如`@Entity`,`@Table`,`@Column`,`@Service`等,允许开发者在类和方法上直接声明其元数据,减少了XML配置。 5. **依赖注入 (Dependency Injection)**:通过`...
DZone提供的Refcard是学习这些主题的一个好起点,其中列出了所有元数据注解,并提供了详细的描述和示例。 综上所述,依赖注入是EJB 3中的一个强大特性,它不仅简化了代码编写,还提高了系统的灵活性和可维护性。...
- **实体类和元数据**:使用注解如@Entity、@Table、@Column等来描述数据库表和字段。 - **持久化管理器(EntityManager)**:处理对象的创建、查询、更新和删除操作。 - **查询语言(JPQL)**:类似SQL,用于...
- 使用`ejb-jar.xml`或直接使用注解来定义EJB组件的元数据。 - 应用服务器负责加载和管理EJB组件。 7. **EJB与Web服务集成** - EJB 3.0可以通过JAX-WS轻松地暴露为Web服务。 8. **EJB与JSF(JavaServer Faces)...
- **实体bean的源码**:通常包含实体类和映射元数据(如ORM文件或注解),以及可能的DAO层实现。 - **会话bean的源码**:会话bean的实现,包括业务逻辑方法,以及可能的依赖注入。 - **WebService接口与实现**:...
- **注解驱动**:通过使用如`@Entity`, `@Stateless`, `@PersistenceContext`等注解,开发者可以在类和方法上声明EJB和JPA的相关元数据,减少了XML配置文件的使用。 - **持久化框架JPA**:EJB3引入了Java ...
7. **依赖注入**:讲解EJB 3.x引入的依赖注入(DI)和注解配置,如`@EJB`, `@Inject`, `@PersistenceContext`, `@Resource`等。 8. **远程接口和本地接口**:讨论如何定义和使用EJB的远程接口和本地接口,以便于...