`

EJB3学习之四----EJB3新特性(元数据注解和依赖注入)

    博客分类:
  • J2EE
阅读更多
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”);
1
1
分享到:
评论

相关推荐

    ejb3 第8讲 --通过注解方式注入并使用其他EJB或者服务

    在EJB 3中,许多配置信息可以通过元数据注解在类或方法上直接指定,如`@Stateless`、`@Stateful`、`@Singleton`、`@MessageDriven`等,分别表示无状态会话bean、有状态会话bean、单例bean和消息驱动bean。...

    ejb3-entitybean-maven-archetype source code

    EJB 3是EJB规范的一个版本,引入了许多简化开发的特性,使得EJB更加易用,特别是对于对象关系映射(ORM)和依赖注入(DI)。 在这个源码包中,我们可能会找到以下关键组成部分: 1. **pom.xml**: Maven项目的配置...

    EJB3.0规范-EJB3.0 SPECIFICATION

    1. **注解驱动(Annotation-based)**:EJB3.0弃用了XML配置文件,转而采用注解来声明实体Bean、会话Bean和消息驱动Bean的元数据。这使得代码更加简洁,减少了配置文件的维护工作,例如`@Entity`、`@Stateless`、`@...

    使用eclipse通过jboss开发简单的ejb应用(jboss7.x & ejb3.x)

    `ilucky-ejb-3.0`很可能是EJB模块,包含了bean的实现和相关的元数据。而`ilucky-ejb-3.0-client`则可能包含了客户端代码,用于访问和测试部署在JBoss服务器上的bean。 总结来说,使用Eclipse和JBoss开发EJB 3.x应用...

    Ejb3中的注释常用属性

    4. **实体Bean的元数据注解** - `@Entity`: 标记一个类作为实体Bean。 - `@Table`: 指定实体Bean对应的数据库表名。 - `@Column`: 定义字段与数据库列的映射,包含`name`(列名)、`unique`(是否唯一)、`...

    Weblogic11g+EJB3的小例子

    Weblogic 11g 是一款由甲骨文公司(Oracle)开发的企业级...通过研究和运行这个例子,开发者可以深入学习EJB3的核心特性,以及Weblogic服务器的管理与配置。同时,对于那些寻求EJB3实践的人来说,这是一个宝贵的资源。

    EJB3应用实例

    6. **依赖注入(Dependency Injection,DI)**:EJB3支持JSR 330规范,可以使用`@Inject`注解进行依赖注入,这使得组件之间的关系更易于管理和维护。 7. **查询语言(Java Persistence Query Language,JPQL)**:...

    EJB3.0和Spring比较-纯文本格式

    Spring的核心特性之一就是它的依赖注入(Dependency Injection, DI),这让它能够更好地管理和配置应用程序中的对象关系,无论是在J2EE还是J2SE环境下。 **小结:**EJB3.0和Spring在供应商独立性方面都有很好的表现,...

    Myeclipse开发ejb详解教程.zip

    - CDI是Java EE中的一项服务,用于依赖注入和上下文管理,EJB 3.x与CDI紧密集成,增强了Bean的灵活性。 8. ** ejb-jar 和 EAR 文件** - ejb-jar 文件是EJB的容器,包含Bean类、接口和部署描述符。 - EAR...

    EJB2和EJB3 消息驱动bean

    - **灵活性与扩展性**:EJB3提供了更为灵活的配置选项和更好的扩展性,支持更多的依赖注入策略和事件监听器,使得集成外部服务和资源变得更加容易。 - **性能与可维护性**:尽管EJB3在编译时会产生更多的元数据,但...

    EJB3.0实例教程-企业应用开发核心技术和Manning - EJB3 in Action

    4. **注解驱动的编程模型**:EJB 3.0引入了大量注解,如`@Entity`,`@Table`,`@Column`,`@Service`等,允许开发者在类和方法上直接声明其元数据,减少了XML配置。 5. **依赖注入 (Dependency Injection)**:通过`...

    Dependency Injection in EJB 3

    DZone提供的Refcard是学习这些主题的一个好起点,其中列出了所有元数据注解,并提供了详细的描述和示例。 综上所述,依赖注入是EJB 3中的一个强大特性,它不仅简化了代码编写,还提高了系统的灵活性和可维护性。...

    EJB3 IN Action提纲

    - **实体类和元数据**:使用注解如@Entity、@Table、@Column等来描述数据库表和字段。 - **持久化管理器(EntityManager)**:处理对象的创建、查询、更新和删除操作。 - **查询语言(JPQL)**:类似SQL,用于...

    EJB3基础教程.zip

    - 使用`ejb-jar.xml`或直接使用注解来定义EJB组件的元数据。 - 应用服务器负责加载和管理EJB组件。 7. **EJB与Web服务集成** - EJB 3.0可以通过JAX-WS轻松地暴露为Web服务。 8. **EJB与JSF(JavaServer Faces)...

    EJB3.0容器模型的WEB服务-WebService

    - **实体bean的源码**:通常包含实体类和映射元数据(如ORM文件或注解),以及可能的DAO层实现。 - **会话bean的源码**:会话bean的实现,包括业务逻辑方法,以及可能的依赖注入。 - **WebService接口与实现**:...

    ejb培训笔记和源代码

    7. **依赖注入**:讲解EJB 3.x引入的依赖注入(DI)和注解配置,如`@EJB`, `@Inject`, `@PersistenceContext`, `@Resource`等。 8. **远程接口和本地接口**:讨论如何定义和使用EJB的远程接口和本地接口,以便于...

    EJB3.0ExampleSourceCode.rar_EJB3_EJB3.0_ejb

    4. **依赖注入(Dependency Injection)**:EJB 3.0引入了依赖注入的概念,通过`@EJB`、`@Inject`等注解,可以方便地在Bean之间进行协作,减少硬编码的依赖关系。压缩包中的源码将展示如何使用这些注解来注入依赖。 ...

Global site tag (gtag.js) - Google Analytics