伴隨著 EJB3.1 Final Draft的Release,EJB3.1馬上就要進入最終版了,今天讓我們來看看EJB3.1給我們帶來的新的Feature。
1. 取消接口
EJB Container 直接公布java Bean的Public方法,客戶端使用通過@EJB 注入。
2. 引入Singleton sinession bean.
通過@Singleton標記該Session Bean為Singleton。在該Container只有一例。
對于Singleton Session Bean的并行訪問問題,有兩種控制機制CMC(Container-managed concurrency) 容器管理的并行機制和
BMC(Bean-managed concurrency),Bean 管理的并行機制。默認容器管理并行機制。
在并行訪問的控制上,使用了Read and write 機制,通過@Lock(READ) @Lock(WRITE)。默認為WRITE機制,方法只能并一個
Client訪問。
3.Asynchronous 調用
EJB3.1激動人心的Feature。通過@Asynchronous是該方法可以異步調用。在Client端,通過JDK Concurrency 包的Future模式
(Future<V>)來異步調用EJB3.1容器異步方法。
4.規范了 JNDI names
以往,不同的Vendor有不同的定義,現在統一了,格式如下:
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. 提供了更強大的Time服務。
這一塊一直是EJB的弱項,使得Quartz成了主流。EJB3.1相對EJB3 提供了編程和注釋兩種機制提供類似Linux Cron服務。
比如下面的定義:
@Stateless
public class MyTimeEJB {
@Schedules(
{ @Schedule(hour="13"),
@Schedule(hour="20")
}
public void MyTimeEJB (Timer timer) { (...) }
}
6.推出EJB Lite EJB容器簡化版
EJB 3.1 簡化版包括 features:
* Stateless, stateful,singleton session beans. 只支持Local的異步調用。
* Container-Managed Transactions and Bean-Managed Transactions.
* Declarative 和 programmatic security.
* Interceptors.
* Deployment descriptors.
7.簡化 EJB Packaging
可以不用ear包,在war包允許包含EJB模塊。如下圖:
8.嵌入式 Embeddable EJB Containers
A Java SE 應用了啟動一個嵌入式的EJB Containr來開發測試EJB。