伴隨著 EJB3.1 Final Draft的Release,EJB3.1馬上就要進(jìn)入最終版了,今天讓我們來(lái)看看EJB3.1給我們帶來(lái)的新的Feature。
1. 取消接口
EJB Container 直接公布java Bean的Public方法,客戶端使用通過(guò)@EJB 注入。
2. 引入Singleton sinession bean.
通過(guò)@Singleton標(biāo)記該Session Bean為Singleton。在該Container只有一例。
對(duì)于Singleton Session Bean的并行訪問(wèn)問(wèn)題,有兩種控制機(jī)制CMC(Container-managed concurrency) 容器管理的并行機(jī)制和
BMC(Bean-managed concurrency),Bean 管理的并行機(jī)制。默認(rèn)容器管理并行機(jī)制。
在并行訪問(wèn)的控制上,使用了Read and write 機(jī)制,通過(guò)@Lock(READ) @Lock(WRITE)。默認(rèn)為WRITE機(jī)制,方法只能并一個(gè)
Client訪問(wèn)。
3.Asynchronous 調(diào)用
EJB3.1激動(dòng)人心的Feature。通過(guò)@Asynchronous是該方法可以異步調(diào)用。在Client端,通過(guò)JDK Concurrency 包的Future模式
(Future<V>)來(lái)異步調(diào)用EJB3.1容器異步方法。
4.規(guī)范了 JNDI names
以往,不同的Vendor有不同的定義,現(xiàn)在統(tǒng)一了,格式如下:
java:global[/<app-name>]/<module-name>/<bean-name>[!<fully-qualified-interface-name>]
package net.blogjava.vincent;
@Singleton
public class BeanA { (...) }
下面的JDNI是都是合理的
- java:global/myapp/mybeans/BeanA
- java:global/myapp/mybeans/BeanA!net.blogjava.vincent
- java:app/mybeans/BeanA
- java:app/mybeans/BeanA!net.blogjava.vincent.BeanA
- java:module/BeanA
- java:module/BeanA!net.blogjava.vincent.BeanA
5. 提供了更強(qiáng)大的Time服務(wù)。
這一塊一直是EJB的弱項(xiàng),使得Quartz成了主流。EJB3.1相對(duì)EJB3 提供了編程和注釋兩種機(jī)制提供類似Linux Cron服務(wù)。
比如下面的定義:
@Stateless
public class MyTimeEJB {
@Schedules(
{ @Schedule(hour="13"),
@Schedule(hour="20")
}
public void MyTimeEJB (Timer timer) { (...) }
}
6.推出EJB Lite EJB容器簡(jiǎn)化版
EJB 3.1 簡(jiǎn)化版包括 features:
* Stateless, stateful,singleton session beans. 只支持Local的異步調(diào)用。
* Container-Managed Transactions and Bean-Managed Transactions.
* Declarative 和 programmatic security.
* Interceptors.
* Deployment descriptors.
7.簡(jiǎn)化 EJB Packaging
可以不用ear包,在war包允許包含EJB模塊。如下圖:
8.嵌入式 Embeddable EJB Containers
A Java SE 應(yīng)用了啟動(dòng)一個(gè)嵌入式的EJB Containr來(lái)開(kāi)發(fā)測(cè)試EJB。