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

EJB3新特性
元数据注解
依赖注入


一 EJB3新特性
相比EJB3以前的版本而言,增加了两个新特性:元数据注解(Annotation) 和依赖注入(Injection),而元数据注解以最大限度的使部署描述符从冗余繁杂中脱离出来。

二 元素据注解
元数据注解,来源于Java EE 5中的Annotation----javax.annotation.*.一般而言,对于定义SLSB(Stateless Session Bean)而言,@Stateless;对于SFSB(Stateful Session Bean)而言,@Stateful;
下面归纳下EJB3中的常用注释:
[table]
|类型 |注释 |
|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”)|
[/table]
当然,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中引入的主要元数据注解。
[table]
|注解| 用途| 可用的组件|
|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|
[/table]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”);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值