自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

EJB注釋是通過@來實(shí)現(xiàn)的

開發(fā) 后端
本文向您介紹EJB注釋的實(shí)現(xiàn),包括有狀態(tài)@Stateful和無狀態(tài)@Stateless會(huì)話、JNDI的命名規(guī)則、.Bean 的生命周期 等。

1.有狀態(tài)@Stateful和無狀態(tài)@Stateless會(huì)話

EJB注釋是EJB技術(shù)的一個(gè)特點(diǎn)。@Stateless 定義本會(huì)話為無狀態(tài)會(huì)話。無狀態(tài)會(huì)話Bean 是一個(gè)簡(jiǎn)單的POJO(純粹的面向?qū)ο笏枷氲膉ava 對(duì)象),EJB3.0 容器自動(dòng)地實(shí)例化及管理這個(gè)Bean。Stateless Session Bean不負(fù)責(zé)記錄使用者狀態(tài),Stateless Session Bean一旦實(shí)例化就被加進(jìn)會(huì)話池中,各個(gè)用戶都可以共用。即使用戶已經(jīng)消亡,Stateless Session Bean的生命期也不一定結(jié)束,它可能依然存在于會(huì)話池中,供其他用戶調(diào)用。
@Stateful定義本會(huì)話為有狀態(tài)會(huì)話。有狀態(tài)Bean是一個(gè)可以維持自身狀態(tài)的會(huì)話Bean。每個(gè)用戶都有自己的一個(gè)實(shí)例,在用戶的生存期內(nèi),Stateful Session Bean 保持了用戶的信息,即“有狀態(tài)”;一旦用戶滅亡(調(diào)用結(jié)束或?qū)嵗Y(jié)束),Stateful Session Bean的生命期也告結(jié)束。
一個(gè)bean可以同時(shí)是有狀態(tài)的和無狀態(tài)的

2.Local接口@Local和Remote接口@Remote

當(dāng)@Local和@Remote的EJB注釋都不存在時(shí),會(huì)話 Bean實(shí)現(xiàn)的接口默認(rèn)為L(zhǎng)ocal接口。如果在本機(jī)調(diào)
用EJB(確??蛻舳伺cEJB容器運(yùn)行在同一個(gè)JVM),采用Local接口訪問EJB優(yōu)于Remote接口,因?yàn)镽emote
接口訪問EJB需要經(jīng)過遠(yuǎn)程方法調(diào)用(RPCs)環(huán)節(jié),而Local接口訪問EJB直接從JVM 中返回EJB的引用。

3.JNDI的命名規(guī)則

JNDI 名的組成規(guī)則是“上層名稱/下層名稱“,每層之間以”/”分隔。默認(rèn)的JNDI名稱是 會(huì)話Bean +接口類型

4.改變Session Bean 的JNDI 名稱

要自定義JNDI名稱,可以使用@LocalBinding 和 @RemoteBinding 注釋,@LocalBinding注釋指定Session Bean的Local接口的JNDI名稱,@RemoteBinding注釋指定Session Bean的Remote接口的JNDI名稱。例如:


@RemoteBinding (jndiBinding="com/RemoteHello")
@LocalBinding (jndiBinding="com/LocalHello")第一句定義JNDI 為com/RemoteHello,第二句定義JNDI 為com/LocalHello

5.Bean 的生命周期

@PostConstruct:當(dāng)bean對(duì)象完成實(shí)例化后,使用了這個(gè)注釋的方法會(huì)被立即調(diào)用。這個(gè)注釋同時(shí)適用于有狀態(tài)和無狀態(tài)的會(huì)話bean。
@PreDestroy:使用這個(gè)注釋的方法會(huì)在容器從它的對(duì)象池中銷毀一個(gè)無用的或者過期的bean 實(shí)例之前調(diào)用。這個(gè)注釋同時(shí)適用于有狀態(tài)和無狀態(tài)的會(huì)話bean。
@PreDestroy:當(dāng)一個(gè)有狀態(tài)的session bean實(shí)例空閑過長(zhǎng)的時(shí)間,容器將會(huì)鈍化(passivate)它,并把它的
狀態(tài)保存在緩存當(dāng)中。使用這個(gè)注釋的方法會(huì)在容器鈍化bean實(shí)例之前調(diào)用。這個(gè)注釋適用于有狀態(tài)的會(huì)話bean。
當(dāng)鈍化后,又經(jīng)過一段時(shí)間該bean 仍然沒有被操作,容器將會(huì)把它從存儲(chǔ)介質(zhì)中刪除。以后,任何針對(duì)該bean
方法的調(diào)用容器都會(huì)拋出例外。
@PreDestroy:當(dāng)客戶端再次使用已經(jīng)被鈍化的有狀態(tài)session bean時(shí),新的實(shí)例被創(chuàng)建,狀態(tài)被恢復(fù)。使用此注釋的session bean會(huì)在bean的激活完成時(shí)調(diào)用。這個(gè)注釋只適用于有狀態(tài)的會(huì)話bean。
@Init:這個(gè)注釋指定了有狀態(tài)session bean初始化的方法。它區(qū)別于@PostConstruct注釋在于:多個(gè)@Init注釋方法可以同時(shí)存在于有狀態(tài)session bean 中,但每個(gè)bean實(shí)例只會(huì)有一個(gè)@Init注釋的方法會(huì)被調(diào)用。這取
決于bean是如何創(chuàng)建的(細(xì)節(jié)請(qǐng)看EJB 3.0規(guī)范)。@PostConstruct在@Init之后被調(diào)用。另一個(gè)有用的生命周期方法注釋是@Remove,特別是對(duì)于有狀態(tài)session bean。當(dāng)應(yīng)用通過存根對(duì)象調(diào)用使用了
@Remove注釋的方法時(shí),容器就知道在該方法執(zhí)行完畢后,要把bean實(shí)例從對(duì)象池中移走。

6.攔截器(Interceptor)

攔截器可以監(jiān)聽程序的一個(gè)或所有方法。攔截器對(duì)方法調(diào)用流提供了細(xì)粒度控制。
@Interceptors 注釋指定一個(gè)或多個(gè)在外部類中定義的攔截器。
@AroundInvoke 注釋指定了要用作攔截器的方法。用@AroundInvoke注釋指定的方法必須遵守以下格式:
public Object XXX(InvocationContext ctx) throws Exception。XXX 代表方法名可以任意。(以下同)
除了可以在外部定義攔截器之外,還可以將Session Bean 中的一個(gè)或多個(gè)方法定義為攔截器。

7.依賴注入

為了存取那些服務(wù)對(duì)象,你需要通過服務(wù)器的JNDI 來查找存根對(duì)象(session bean)或消息隊(duì)列(MDB)。JNDI查找是把客戶端與實(shí)際的服務(wù)端實(shí)現(xiàn)解藕的關(guān)鍵步驟。但是,直接使用一個(gè)字符串來進(jìn)行JNDI查找并不優(yōu)雅。
@EJB注釋EJB存根對(duì)象注入到任何EJB 3.0容器管理的POJO 中。


@EJB (beanName="HelloWorldBean")
//@EJB (mappedName="HelloWorldBean/remote")beanName的beanName屬性指定EJB的類名,mappedName指定Bean實(shí)例的JNDI名。
@EJB注釋如果被用在JavaBean風(fēng)格的setter 方法上時(shí),容器會(huì)在屬性第一次使用之前,自動(dòng)地用正確的參數(shù)調(diào)用bean的setter 方法。
@EJB注釋只能注入EJB存根對(duì)象,除@EJB注釋之外,EJB 3.0也支持@Resource注釋來注入來自JNDI的任何
資源。
如果JNDI對(duì)象在本地(java:comp/env)JNDI目錄中,你只需給定他的映謝名稱即可,不需要帶前綴。
@Resource注釋可以不指定JNDI名就能注入他們,他通過變量的類型就能獲得他的JNDI名。@Resource注釋可以被用在JavaBean風(fēng)格的setter 方法上。

8. 定時(shí)服務(wù)

定時(shí)服務(wù)用作在一段特定的時(shí)間后執(zhí)行某段程序,使用@Timeout 注釋聲明定時(shí)器方法。
通過依賴注入@Resource SessionContext ctx,獲得SessionContext對(duì)象,調(diào)用ctx.getTimerService().createTimer(Date arg0, long arg1, Serializable arg2)方法創(chuàng)建定時(shí)器,三個(gè)參數(shù)的含義如下:
Date arg0 定時(shí)器啟動(dòng)時(shí)間,如果傳入時(shí)間小于現(xiàn)在時(shí)間,定時(shí)器會(huì)立刻啟動(dòng)。
long arg1 間隔多長(zhǎng)時(shí)間后再次觸發(fā)定時(shí)事件。單位:毫秒
當(dāng)定時(shí)器創(chuàng)建完成后,還需聲明定時(shí)器方法。EJB注釋是EJB技術(shù)的一個(gè)特點(diǎn)。

 

【編輯推薦】

  1. 什么是EJB,EJB技術(shù)概覽
  2. MyEclipse+Weblogic開發(fā)EJB組件
  3. 精通EJB組件和EJB容器
  4. 在Eclipse+JBoss+EJB3使用Session Bean的本地接口
  5. EJB2.0教程 詳解EJB技術(shù)及實(shí)現(xiàn)原理
責(zé)任編輯:佚名 來源: DIY部落
相關(guān)推薦

2009-06-11 16:53:09

什么是EJBEJB

2009-06-26 14:54:18

Spring支持EJB

2009-06-10 11:42:26

Session BeaEclipse+JBo

2009-06-11 16:01:17

EJB容器

2009-06-11 16:25:44

EJB2.0EJB

2010-04-14 09:41:10

Oracle數(shù)據(jù)備份

2009-06-17 09:01:20

JBoss訪問EJB

2021-09-22 05:55:18

Eslint disble算法

2014-11-26 14:46:47

代碼

2021-05-10 10:50:53

NginxIPLinux

2020-07-29 10:22:33

IT新冠病毒CIO

2023-10-24 15:03:28

數(shù)字化轉(zhuǎn)型

2009-06-11 15:26:05

EJB組件EJB容器

2009-12-28 09:23:50

接入網(wǎng)技術(shù)

2009-06-25 16:35:12

EJB技術(shù)

2009-06-12 12:46:59

EJB3.0

2011-05-25 10:32:19

SQLite

2023-03-10 08:37:33

預(yù)熱優(yōu)化PostgreSQL

2021-02-25 18:03:07

數(shù)據(jù)管理

2009-06-12 11:46:39

JavaBeanEJB
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)