浣滆咃細 Lynn Munsinger
緲昏瘧錛氳崏鍎?br />
鏃墮棿錛?007騫?鏈?9鏃ワ紙My Birthday錛?br />
鍘熸枃鍦板潃錛?span class="Apple-style-span" style="word-spacing: 0px; font: 12px 'Lucida Grande'; text-transform: none; color: #000000; text-indent: 0px; white-space: pre; letter-spacing: normal; border-collapse: separate; font-size-adjust: none; font-stretch: normal; orphans: 2; widows: 2">http://www.oracle.com/technology/tech/java/newto/introejb.htm
EJB3.0瑙勮寖浣垮紑鍙慐JB姣旇繃鍘繪洿瀹規槗錛屽彲鑳借鎯戜綘鑰冭檻寮鍙戠涓涓狤JB銆傚鏋滅湡鏄繖縐嶆儏鍐碉紝閭d箞紲濊春浣狅紝
浣犵粡鎴愬姛閬垮厤浜嗗湪浣犱互鍓岴JB寮鍙戣呯殑寰堝鎸姌錛屽茍涓斾韓鍙楀埌EJB3.0寮鍙戠殑渚垮埄鎬с備絾鏄綘寮濮嬪紑鍙戜互鍓嶏紝
浣犲彲鑳芥兂鐭ラ亾EJB鏄粈涔堝拰瀹冧滑鐢ㄤ簬浠涔堢洰鐨勩傛湰綃囨枃绔犺В閲婁簡EJB鐨勫熀紜鍜屼綘濡備綍鍦ㄤ竴涓狫2EE紼嬪簭涓嬌鐢?br />
瀹冧滑銆?br />
浠涔堟槸EJB錛?/span>
涓涓紒涓欽avaBean (EJB)鏄竴涓彲閲嶇敤鐨勶紝鍙Щ妞嶇殑J2EE緇勪歡銆?EJB鐢卞皝瑁呬簡涓氬姟閫昏緫鐨勫涓柟娉曠粍鎴愩?br />
渚嬪錛屼竴涓狤JB鍙互鏈夊寘鎷竴涓洿鏂板鎴鋒暟鎹簱涓暟鎹殑鏂規硶鐨勪笟鍔¢昏緫銆傚涓繙紼嬪拰鏈湴瀹㈡埛绔彲浠ヨ皟鐢ㄨ繖
涓柟娉曘傚彟澶栵紝EJB榪愯鍦ㄤ竴涓鍣ㄩ噷錛屽厑璁稿紑鍙戣呭彧鍏蟲敞涓巄ean涓殑涓氬姟閫昏緫鑰屼笉鐢ㄨ冭檻璞′簨鍔℃敮鎸侊紝瀹夊叏
鎬у拰榪滅▼瀵硅薄璁塊棶絳夊鏉傚拰瀹規槗鍑洪敊鐨勪簨鎯呫侲JB浠OJO鎴栬呮櫘閫氭棫鐨凧ava瀵硅薄褰㈠紡寮鍙戯紝寮鍙戣呭彲浠ョ敤鍏冩暟
鎹敞閲婃潵瀹氫箟瀹瑰櫒濡備綍綆$悊榪欎簺Bean銆?/p>
EJB綾誨瀷
EJB涓昏鏈変笁縐嶇被鍨嬶細浼氳瘽Bean錛屽疄浣揃ean鍜屾秷鎭┍鍔˙ean銆備細璇滲ean瀹屾垚涓涓竻鏅扮殑瑙h︾殑浠誨姟錛屼緥濡?br />
媯鏌ュ鎴瘋處鎴峰巻鍙茶褰曘傚疄浣揃ean鏄竴涓唬琛ㄥ瓨鍦ㄤ簬鏁版嵁搴撲腑涓氬姟瀵硅薄鐨勫鏉備笟鍔″疄浣撱傛秷鎭┍鍔˙ean鐢ㄤ簬
鎺ユ敹寮傛JMS娑堟伅銆傝鎴戜滑鏇磋緇嗙殑璁よ瘑榪欎簺綾誨瀷銆?/p>
浼氳瘽Bean
浼氳瘽Bean涓鑸唬琛ㄧ潃涓氬姟嫻佺▼涓薄"澶勭悊璁㈠崟"榪欐牱鐨勫姩浣溿備細璇滲ean鍩轟簬鏄惁緇存姢榪囧害鐘舵佸垎涓烘湁鐘?br />
鎬佹垨鑰呮棤鐘舵併?br />
鏃犵姸鎬佷細璇滲ean 娌℃湁涓棿鐘舵併傚畠浠笉淇濇寔榪借釜涓涓柟娉曡皟鐢ㄥ彟涓涓柟娉曚紶閫掔殑淇℃伅銆傚洜姝や竴涓棤鐘?br />
鎬佷笟鍔℃柟娉曠殑姣忎竴嬈¤皟鐢ㄩ兘鐙珛浜庡畠鐨勫墠涓涓皟鐢紱渚嬪錛岀◣璐硅綆楁垨鑰呰漿縐昏處嬈俱?褰撹綆楃◣璐歸鐨勬柟娉曡
璋冪敤鏃訛紝紼庤垂鍊艱璁$畻騫惰繑鍥炵粰璋冪敤鐨勬柟娉曪紝娌℃湁蹇呰瀛樺偍璋冪敤鑰呬負灝嗘潵璋冪敤澶囩敤鐨勫唴閮ㄧ姸鎬併傚洜涓哄畠浠笉
緇存姢鐘舵侊紝鎵浠ヨ繖浜汢ean鏄粎浠呯敱瀹瑰櫒綆$悊銆傚綋瀹㈡埛绔姹備竴涓棤鐘舵佺殑Bean瀹炰緥鏃訛紝瀹冨彲浠ユ帴鏀舵潵鑷敱瀹瑰櫒綆$悊鐨勬棤鐘舵佷細璇滲ean瀹炰緥闆嗕腑鐨勪竴涓疄渚嬨備篃鍥犱負鏃犵姸鎬佷細璇滲ean鑳藉琚叡浜紝鎵浠ュ鍣ㄥ彲浠ョ淮鎶ゆ洿灝?br />
鏁伴噺鐨勫疄渚嬫潵涓哄ぇ閲忕殑瀹㈡埛绔湇鍔°傜畝鍗曞湴璞¤Bean澧炲姞鍏冩敞閲?span style="font-family: Courier New">@Stateless 鏉ユ寚瀹氫竴涓?Java Bean浣滀負涓涓?br />
鏃犵姸鎬佷細璇滲ean琚儴緗插拰綆$悊銆?br />
涓涓湁鐘舵佺殑浼氳瘽Bean緇存姢涓涓法瓚婂涓柟娉曡皟鐢ㄧ殑浼氳瘽鐘舵侊紱渚嬪鍦ㄧ嚎璐墿綃簲鐢ㄣ傚綋瀹㈡埛寮濮嬪湪綰?br />
璐墿鏃訛紝瀹㈡埛鐨勮緇嗕俊鎭粠鏁版嵁搴撹幏寰椼傜浉鍚岀殑淇℃伅瀵逛簬褰撳鎴蜂粠璐墿綃腑澧炲姞鎴栬呯Щ闄ゅ晢鍝佺瓑絳夋搷浣滄椂琚皟鐢ㄧ殑鍏朵粬鏂規硶涔熸槸鍙闂殑 銆備絾鏄洜涓鴻鐘舵佷笉鏄湪浼氳瘽緇撴潫錛岀郴緇熷穿婧冩垨鑰呯綉緇滃け璐ユ椂淇濈暀錛屾墍浠ユ湁鐘?br />
鎬佷細璇滲ean鏄殏鏃剁殑銆傚綋涓涓鎴風璇鋒眰涓涓湁鐘舵佷細璇滲ean瀹炰緥鏃訛紝瀹㈡埛绔皢浼氬緱鍒頒竴涓細璇濆疄渚嬶紝璇ean鐨勭姸鎬佸彧涓虹粰瀹㈡埛绔淮鎸併傞氳繃鍚戞柟娉曞鍔犲厓娉ㄩ噴@Remove鏉ュ憡璇夊鍣ㄥ綋鏌愪釜鏂規硶璋冪敤緇撴潫涓涓湁鐘舵?br />
浼氳瘽Bean瀹炰緥搴旇琚Щ闄ゃ?/span>
import javax.ejb.Stateless.*;
/**
* 涓涓畝鍗曟棤鐘舵佷細璇滲ean瀹炵幇浜咰alculateEJB鎺ュ彛鐨刬ncrementValue()鏂規硶
**/
@Stateless(name="CalculateEJB")
public class CalculateEJBBean
implements CalculateEJB
{
int value = 0;
public String incrementValue()
{
value++;
return "value incremented by 1";
}
}
瀹炰綋Bean
瀹炰綋Bean鏄鐞嗘寔涔呭寲鏁版嵁鐨勪竴涓璞★紝娼滃湪浣跨敤涓浜涚浉鍏崇殑Java瀵硅薄騫朵笖鍙互渚濋潬涓婚敭琚敮涓璇嗗埆銆傞?br />
榪囧寘鎷?span style="font-family: Courier New">@Entity 鍏冩敞閲婃潵鎸囧畾涓涓被鏄竴涓疄浣揃ean銆傚疄浣揃ean琛ㄧず鏉ヨ嚜鏁版嵁搴撶殑鎸佷箙鍖栨暟鎹紝渚嬪瀹㈡埛琛?br />
涓殑涓涓褰曪紝鎴栬呬竴涓憳宸ヨ〃涓殑涓涓憳宸ヨ褰曘傚疄浣揃ean涔熷彲浠ヨ澶氫釜瀹㈡埛绔叡浜備緥濡備竴涓憳宸ュ疄浣?br />
鑳藉琚涓綆椾竴涓憳宸ユ瘡騫村伐璧勬婚鎴栬呮洿鏂板憳宸ュ湴鍧鐨勫鎴風浣跨敤銆傚疄浣揃ean瀵硅薄鐗瑰畾鍙橀噺鑳藉淇濇寔鎸?br />
涔呭寲銆傚疄浣揃ean涓墍鏈夋病鏈?span style="font-family: Courier New">@Transient 鍏冩敞閲婄殑鍙橀噺闇瑕佽冭檻鎸佷箙鍖栥侲JB3.0鐨勪竴涓富瑕佺壒鑹叉槸鍒涘緩鍖呭惈浣跨敤鍏冩暟鎹敞閲婄殑瀵硅薄/鍏崇郴鏄犲皠瀹炰綋Bean鐨勮兘鍔涖備緥濡傦紝鎸囧畾瀹炰綋Bean鐨別mpId鍙橀噺鏄犲皠鍒癳mployee琛ㄤ腑鐨?br />
EMPNO灞炴э紝璞′笅闈㈠疄渚嬩腑涓鏍風敤@Table(name="Employees") 娉ㄩ噴榪欎釜琛ㄧ殑鍚嶅瓧鍜岀敤@Column
(name="EMPNO")娉ㄩ噴empId鍙橀噺銆傚彟澶栵紝EJB3.0涓殑涓涓壒鑹叉槸浣犲彲浠ュ緢瀹規槗鐨勫湪寮鍙戞椂嫻嬭瘯瀹炰綋
Bean錛屽彲浠ョ敤Oracle Application Server Entity Test Harness鍦ㄥ鍣ㄥ閮ㄨ繍琛屼竴涓疄浣揃ean銆?/span>
import javax.persistence.*;
import java.util.ArrayList;
import java.util.Collection;
@Entity
@Table(name = "EMPLOYEES")
public class Employee implements java.io.Serializable
{
private int empId;
private String eName;
private double sal;
@Id
@Column(name="EMPNO", primaryKey=true)
public int getEmpId()
{
return empId;
}
public void setEmpId(int empId)
{
this.empId = empId;
}
public String getEname()
{
return eName;
}
public void setEname(String eName)
{
this.eName = eName;
}
public double getSal()
{
return sal;
}
public void setSal(double sal)
{
this.sal = sal;
}
public String toString()
{
StringBuffer buf = new StringBuffer();
buf.append("Class:")
.append(this.getClass().getName()).append(" :: ").append(" empId:").append(getEmpId()).append(" ename:").append(getEname()).append("sal:").append(getSal());
return buf.toString();
}
}
娑堟伅椹卞姩Bean
椹卞姩Bean (MDB) 鎻愪緵浜嗕竴涓疄鐜板紓姝ラ氫俊姣旂洿鎺ヤ嬌鐢↗ava娑堟伅鏈嶅姟錛圝MS錛夋洿瀹規槗鍦版柟娉曘傚垱寤篗DB鎺?br />
鏀跺紓姝MS娑堟伅銆傚鍣ㄥ鐞嗕負JMS闃熷垪鍜屼富棰樻墍瑕佹眰鍔犺澆澶勭悊鐨勫ぇ閮ㄥ垎宸ヤ綔銆傚畠鍚戠浉鍏崇殑MDB鍙戦佹墍鏈夌殑娑?br />
鎭備竴涓狹DB鍏佽J2EE搴旂敤鍙戦佸紓姝ユ秷鎭紝璇ュ簲鐢ㄨ兘澶勭悊榪欎簺娑堟伅銆傚疄鐜?span style="font-family: Courier New">javax.jms.
MessageListener鎺ュ彛鍜屼嬌鐢?code>@MessageDriven娉ㄩ噴璇ean鏉?/code>鎸囧畾涓涓狟ean鏄秷鎭┍鍔˙ean銆?/p>
import javax.ejb.MessageDriven;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.Inject;
import javax.jms.*;
import java.util.*;
import javax.ejb.TimedObject;
import javax.ejb.Timer;
import javax.ejb.TimerService;
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName="connectionFactoryJndiName", propertyValue="jms/TopicConnectionFactory"),
@ActivationConfigProperty(propertyName="destinationName", propertyValue="jms/myTopic"),
@ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Topic"),
@ActivationConfigProperty(propertyName="messageSelector", propertyValue="RECIPIENT = 'MDB'")
}
)
/**
*鐩戝惉鍙厤緗甁MS闃熷垪鎴栬呬富棰樺拰閫氳繃褰撲竴涓秷鎭彂閫佸埌闃熷垪鎴栬呬富棰?br /> *璋冪敤瀹冪殑onMessage()鏂規硶寰楀埌鎻愰啋鐨勪竴涓畝鍗曠殑娑堟伅椹卞姩
*璇ean鎵撳嵃娑堟伅鐨勫唴瀹?br />*/
public class MessageLogger implements MessageListener, TimedObject
{
@Inject javax.ejb.MessageDrivenContext mc;
public void onMessage(Message message)
{
System.out.println("onMessage() - " + message);
try
{
String subject = message.getStringProperty("subject");
String inmessage = message.getStringProperty("message");
System.out.println("Message received\n\tDate: " + new java.util.Date() + "\n\tSubject: " + subject + "\n\tMessage: " + inmessage + "\n");
System.out.println("Creating Timer a single event timer");
TimerService ts = mc.getTimerService();
Timer timer = ts.createTimer(30000, subject);
System.out.println("Timer created by MDB at: " + new Date(System.currentTimeMillis()) +" with info: "+subject);
}
catch (Throwable ex)
{
ex.printStackTrace();
}
}
public void ejbTimeout(Timer timer)
{
System.out.println("EJB 3.0: Timer with MDB");
System.out.println("ejbTimeout() called at: " + new Date(System.currentTimeMillis()));
return;
}
}
浣跨敤EJB
瀹㈡埛绔槸璁塊棶Bean鐨勫簲鐢ㄧ▼搴忋傝櫧鐒舵病鏈夊繀瑕佷繚瀛樺湪瀹㈡埛灞傦紝浣嗘槸鑳藉浣滀負涓涓嫭绔嬬殑搴旂敤錛孞SP錛?br />
Servlet錛屾垨鑰呭彟涓涓狤JB銆傚鎴風閫氳繃Bean鐨勮繙紼嬫垨鑰呮湰鍦版帴鍙h闂瓻JB涓殑鏂規硶錛屼富瑕佸彇鍐充簬瀹㈡埛绔拰Bean
榪愯鍦ㄥ悓涓涓繕鏄笉鍚岀殑JVM涓傝繖浜涙帴鍙e畾涔変簡Bean涓殑鏂規硶錛岃岀敱Bean綾誨疄闄呭疄鐜拌繖浜涙柟娉曘傚綋涓涓?br />
瀹㈡埛绔闂Bean綾諱腑鐨勪竴涓柟娉曟椂錛屽鍣ㄧ敓鎴怋ean鐨勪竴涓唬鐞嗭紝琚彨鍋氳繙紼嬪璞℃垨鑰呮湰鍦板璞°傝繙紼嬫垨鑰?br />
鏈湴瀵硅薄鎺ユ敹璇鋒眰錛屽媧懼畠鍒扮浉搴旂殑Bean瀹炰緥錛岃繑鍥炵粨鏋滅粰瀹㈡埛绔傝皟鐢ㄤ竴涓狟ean涓殑鏂規硶錛屽鎴風浣跨敤瀹?br />
涔夊湪EJB涓嶆槸鎻忚堪鏂囦歡鐨勫悕瀛楁煡鎵懼埌Bean銆傚湪浠ヤ笅瀹炰緥涓紝瀹㈡埛绔嬌鐢ㄤ笂涓嬫枃瀵硅薄鎵懼埌鍛藉悕涓?StateLessejb"
Bean銆?/p>
EJB 瀹㈡埛绔疄渚?/p>
import javax.naming.Context;
import javax.naming.InitialContext;
/**
* 涓涓皟鐢ㄦ棤鐘舵佷細璇滲ean涓柟娉曠殑綆鍗曠殑Bean瀹㈡埛绔?br /> */
public class CalculateejbClient
{
public static void main(String [] args)
{
Context context = new InitialContext();
CalculateEJB myejb =
(CalculateEJB)context.lookup("java:comp/env/ejb/CalculateEJB");
myejb.incrementValue();
}
}
鎬葷粨
EJB3.0寮鍙戜紒涓欽avaBean鏄浉褰撳鏄撶殑銆傛瑙勮寖浣跨敤鍏冩暟鎹敞閲婂畾涔塀ean鐨勭被鍨嬪拰鏆撮湶緇欏鎴風鐨勬柟娉曘?br />
鍥犳錛屾棤璁轟綘灝嗗垱寤轟竴涓墽琛岀壒瀹氫換鍔$殑浼氳瘽Bean榪樻槸鏄犲皠涓涓〃鍒板疄浣揃ean鏉ユ洿鏂版暟鎹紝浣犻兘鑳借薄浣跨敤鏅?br />
閫欽ava瀵硅薄鍜屾帴鍙d竴鏍瘋繘琛屽鐞嗭紝鍦ㄤ笟鍔℃柟娉曚腑浣跨敤鍏冩敞閲婂悜瀹㈡埛绔毚闇叉柟娉曘傛棦鐒朵綘宸茬粡鐞嗚В浜咵JB鐨勫熀紜,
鍙互鍒癘TN涓?a >EJB 3.0 Resources Page鍙戠幇鏇村淇℃伅銆?/p>