/**
* This is the EJB Receiver Xbean
*
* @ejb:bean type="Stateless"
* name="ejbReceiver"
* jndi-name="org.xbeans.ejb.receiver.Receiver"
* display-name="EJB Receiver Xbean"
*
* ... other javadoc tags ...
*/
public class ReceiverBean implements SessionBean, DOMSource {
ejb:bean最常用的屬性是:
name:EJB的名稱(在描述中使用)
type:定義bean的”類型“,對(duì)會(huì)話bean,是Stateful或Stateless,對(duì)實(shí)體bean是CMP或BMP
jndi-name:JNDI名稱將在特定廠商的部署描述中使用(對(duì)遠(yuǎn)程接口來(lái)說(shuō))
local-jndi-name:和jndi-name相似,除了給本地接口使用外。
view-type:說(shuō)明bean將支持的"接口視圖(views)",可以是remote,local或者both.
至于全部標(biāo)簽,可以查看XDoclet文檔了解全部選項(xiàng)。
標(biāo)簽:@ejb:env-entry
這個(gè)標(biāo)簽定義一個(gè)經(jīng)由特殊的java:comp/env上下文,被配置在JNDI的環(huán)境實(shí)體.我們將定義一個(gè)環(huán)境實(shí)體,在此實(shí)體中bean將在鏈表中尋找下一個(gè)Xbean.
/**
* This is the EJB Receiver Xbean
*
* ... other javadoc tags ...
*
* @ejb:env-entry name="channelBean" type="java.lang.String"
* value="com.your.ChannelBean"
*
* ... other javadoc tags ...
*/
public class ReceiverBean implements SessionBean, DOMSource {
標(biāo)簽:@weblogic:pool
現(xiàn)在我們將使用Weblogic的參數(shù)來(lái)配置特定廠商的池特征。為了表示我們?cè)谑褂锰囟◤S商,我么使用了weblogic命名空間:
/**
* This is the EJB Receiver Xbean
*
* ... other javadoc tags ...
*
* @weblogic:pool max-beans-in-free-pool="1000"
* initial-beans-in-free-pool="10"
*
* ... other javadoc tags ...
*/
public class ReceiverBean implements SessionBean, DOMSource {
這個(gè)標(biāo)簽將在weblogic的部署描述文件(weblogic-ejb-jar.xml)里配置池的參數(shù)。
當(dāng)然了,在部署中,還可以使用許多其他類級(jí)別(class-level)的標(biāo)簽。以下是經(jīng)常被使用的標(biāo)準(zhǔn)標(biāo)簽的一瞥:
@ejb:bean
這是唯一要求必須的標(biāo)簽,它用來(lái)配置bean的基本信息
@ejb:home
這個(gè)標(biāo)簽提供了home接口的信息。你可以讓XDoclet去繼承一個(gè)自定義的接口,可以生成那種home接口(none,remote,local,or both),接口的package應(yīng)該是什么,等等
@ejb:interface
和home標(biāo)簽相似,除了可以配置相關(guān)接口的信息(遠(yuǎn)程和/或本地)。
@ejb:finder
在實(shí)體beans的home接口中定義查找的方法
@ejb:select
在實(shí)體beans的home接口中定義選擇的方法
@ejb:pk
為實(shí)體bean定義主鍵。XDoclet能夠?yàn)槟阕詣?dòng)生成主鍵類。
@ejb:data-object
通過(guò)這個(gè)標(biāo)簽,可以自動(dòng)生成實(shí)體beans的數(shù)據(jù)對(duì)象。
@ejb:ejb-ref
配置EJB的引用
@ejb:ejb-external-ref
配置要引用在別的應(yīng)用中的beans。在這里,你需要輸入象bean的類型,home/remote接口的類等
@ejb:resource-ref
配置資源引用。
@ejb:security-role-ref
配置安全角色引用
@ejb:transaction
為有事務(wù)行為的remote和home接口的所有方法定義事務(wù)類型。單獨(dú)方法的事務(wù)標(biāo)簽可以覆蓋。
@ejb:permission
允許基于角色來(lái)調(diào)用remote和home接口的所有方法。
@ejb:security-identity
用來(lái)指定在執(zhí)行EJB的方法時(shí),是否需要調(diào)用者的安全標(biāo)識(shí),或者是否需要一個(gè)特別的運(yùn)行標(biāo)識(shí)。
方法級(jí)別標(biāo)簽的定義
如果我們想讓一個(gè)方法成為remote接口的一部分,那么只需要通過(guò)一個(gè)方法級(jí)別的標(biāo)簽就可以了。示例如下:
/**
* The method that the sender uses to pass the Document
*
* @ejb:interface-method view-type="remote"
*/
public void documentReady(Document incomingDocument) {
這個(gè)標(biāo)簽是必須。你將在bean類中完成這些方法,并且如果你希望讓客戶端也能夠訪問(wèn)它,那么在你方法聲明處加入這個(gè)標(biāo)簽。如果你想僅僅通過(guò)本地接口訪問(wèn),你只需要簡(jiǎn)單把view-type值修改成為"local"就可以了。
以下是其他一些EJB方法級(jí)別的標(biāo)簽:
@ejb:relation
定義了EJB2.0 CMP實(shí)體bean之間的關(guān)系
@ejb:home-method
將方法定義為ejbHome*的方法
@ejb:persistent-field
在生成的CMP層類型(layer of type)中創(chuàng)建CMP的字段"X",并且具體實(shí)現(xiàn)getX/setX方法。
對(duì)于BMP來(lái)說(shuō),它將生成保持臟標(biāo)志(dirty flag)的getX/setX方法(以方便ejbStore在需要的時(shí)候調(diào)用)
@ejb:pk-field
標(biāo)志主鍵字段
@ejb:transaction
給方法定義事務(wù)的行為(只能是以下有效屬性:NotSupported|Supports|Required|RequiresNew|Mandatory|Never.
@ejb:permission
定義方法的權(quán)限(以逗號(hào)分隔的角色列表將被允許訪問(wèn)這個(gè)方法)。
使用XDoclet來(lái)構(gòu)建Bean
現(xiàn)在我們已經(jīng)有一個(gè)使用XDoclet做了標(biāo)記的ReceiverBean.java的源文件。現(xiàn)在需要運(yùn)行XDoclet來(lái)為生成所有我們需要的。更好的方法是使用Jakarta-Ant來(lái)構(gòu)建系統(tǒng)。
Ant是一個(gè)基于java的普遍使用的構(gòu)建系統(tǒng)。如果你還沒(méi)有使用Ant,那么就到Jakarta官方網(wǎng)站下載一個(gè),或者參考Open Source Java:Ant
XDoclet的團(tuán)體已經(jīng)開(kāi)發(fā)好了Ant任務(wù)(task),所以我們只需要簡(jiǎn)單加入到構(gòu)建文件(build.xml)中就可以使用了.
主要有兩個(gè)任務(wù):和 .既然我們?cè)谑褂肊JB,那就讓我們?cè)跇?gòu)建文件中仔細(xì)的研究一下ejbdoclet目標(biāo)(target詳細(xì)請(qǐng)參考Ant文檔)。
classname="xdoclet.ejb.EjbDocletTask" classpath="${java.class.path};${xdoclet.jar.path};
${log4j.jar.path};${ant.jar.path}"/>
<>
sourcepath="${java.dir}"
destdir="${generated.java.dir}"
ejbspec="2.0">
version="2.4" xmlencoding="UTF-8" /><>< span=""> <>
聯(lián)系客服