@Stateless
@Remote({Operation.class})
@Local ({LocalOperation.class}) //本地接口
@SuppressWarnings("serial") //屏蔽缺少serialVersionUID 定义的警告
@Stateful
@Remote ({Operation.class})
@RemoteBinding(jndiBinding="foshanshop/RemoteOperation") //重新梆定JNDI
@Local ({LocalOperation.class})
@LocalBinding(jndiBinding="foshanshop/LocalOperation") //重新梆定JNDI
@PostConstruct:当bean对象完成实例化后,使用了这个注释的方法会被立即调用。这个注释同时适用于有状态和无状态的会话bean。
@PreDestroy:使用这个注释的方法会在容器从它的对象池中销毁一个无用的或者过期的bean实例之前调用。这个注释同时适用于有状态和无状态的会话bean。
@PrePassivate:当一个有状态的sessionbean实例空闲过长的时间,容器将会钝化(passivate)它,并把它的状态保存在缓存当中。使用这个注释的方法会在容器钝化bean实例之前调用。这个注释适用于有状态的会话bean。当钝化后,又经过一段时间该bean仍然没有被操作,容器将会把它从存储介质中删除。以后,任何针对该bean方法的调用容器都会抛出例外。
@PostActivate:当客户端再次使用已经被钝化的有状态sessionbean时,新的实例被创建,状态被恢复。
使用此注释的session bean会在bean的激活完成时调用。这个注释只适用于有状态的会话bean。
@Init:这个注释指定了有状态sessionbean初始化的方法。它区别于@PostConstruct注释在于:多个@Init
注释方法可以同时存在于有状态session bean 中,但每个bean实例只会有一个@Init注释的方法会被调用。这取
决于bean是如何创建的(细节请看EJB 3.0规范)。@PostConstruct在@Init之后被调用。
@Remove
@Interceptors注释指定一个或多个在外部类中定义的拦截器。上面拦截器HelloInterceptor对HelloChinaBean中的所有方法进行监听
@AroundInvoke注释指定了要用作拦截器的方法。用@AroundInvoke注释指定的方法必须遵守以下格式:public ObjectXXX(InvocationContext ctx) throws Exception
XXX代表方法名可以任意。
@EJB(beanName="HelloWorldBean")
消息驱动EJB
@MessageDriven(activationConfig=
{
@ActivationConfigProperty
propertyValue="javax.jms.Queue"),
@ActivationConfigProperty
propertyValue="queue/foshanshop")})
实体EJB
@Entity
@Table(name = "Person")
@Entity注释指明这是一个实体Bean,每个实体Bean类映射数据库中的一个表
@Table注释的name属性指定映射的数据表名称
@Column注释定义了映射到列的所有属性,如列名是否唯一,是否允许为空,是否允许更新等,他的属性介绍如
下:
·name: 映射的列名。如:映射Person表的PersonName列,可以在name属性的getName 方法上面加入
@Column(name = "PersonName"),如果不指定映射列名,容器将属性名称作为默认的映射列名。
·unique: 是否唯一
·nullable: 是否允许为空
·length: 对于字符型列,length属性指定列的最大字符长度
·insertable: 是否允许插入
·updatable: 是否允许更新
·columnDefinition: 定义建表时创建此列的DDL
·secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。
@javax.persistence.Column注释描述详细的字段和属性信息映射到表中的指定栏:
public @interface Column
{
String name( ) default "";
boolean unique( ) default false;
boolean nullable( ) default true;
boolean insertable( ) default true;
boolean updatable( ) default true;
String columnDefinition( ) default "";
String table( ) default "";
int length( ) default 255;
int precision( ) default 0;
int scale( ) default 0;
}
@Id 注释指定personid属性为表的主键,它可以有多种生成方式:
·TABLE:容器指定用底层的数据表确保唯一。
·SEQUENCE:使用数据库的SEQUENCE 列来保证唯一
·IDENTITY:使用数据库的INDENTIT列来保证唯一
·AUTO:由容器挑选一个合适的方式来保证唯一
·NONE:容器不负责主键的生成,由调用程序来完成。
@GeneratedValue注释定义了标识字段的生成方式,本例personid的值由MySQL数据库自动生成。