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。