Weblogic EJB 瀛︿範絎旇 | ||
littleboys 鍘熷垱 (鍙備笌鍒嗭細47498錛屼笓瀹跺垎錛?30) 鍙戣〃錛?003-06-18 11:16 鐗堟湰錛?.0 闃呰錛?B>12529嬈? |
EJB 瀛︿範絎旇 1銆乪jb 鍩虹鐭ヨ瘑 錛?錛?nbsp;鏃犵姸鎬佷細璇漛ean 涓嶄繚瀛樺鎴鋒満鐨勪細璇濈姸鎬?BR> 浼樼偣錛氫嬌鐢ㄥ皬閲忕殑瀹炰緥鍗沖彲婊¤凍澶ч噺鐨勫鎴楓傛瘡涓疄渚嬮兘娌℃湁鏍囪瘑錛岀浉浜掍箣闂存槸絳変環鐨勩?BR> 絳?鐨勬棤鐘舵佷細璇漛ean錛?nbsp; 澶氭鍜屼竴嬈¤皟鐢ㄧ殑緇撴灉鍜屾晥搴旂浉鍚屻?BR> 鍦ㄩ泦緹や腑鍙互璐熻澆鍧囪 a 鏈哄櫒澶辮觸錛屽彲浠ュ湪b鏈哄櫒涓婇噸璇?BR> 闈炵瓑?鐨勬棤鐘舵佷細璇漛ean錛?nbsp;濡傦細璁℃暟鍣?BR> 涓嶈兘鑷姩鍥犳晠闅滆岃繘琛屽垏鎹€?BR>錛?錛?nbsp;鏈夌姸鎬佷細璇漛ean 淇濆瓨瀹㈡埛鏈虹殑浼氳瘽鐘舵?BR> 鐗圭偣錛?nbsp;鍦ㄦ湁浼氳瘽鐘舵佷細璇濈殑bean渚嬪瓙涓紝鍑虹撼鍛樼殑鏁伴噺絳変簬媧誨姩鐨勯【瀹㈢殑鏁伴噺錛岃繖鍙互綆鍖栫紪紼嬫ā寮?BR> weblogic 閫氳繃鍐呭瓨澶嶅埗鎶鏈?nbsp;鍦ㄩ泦緹や腑榪涜璐熻澆鍧囪 鍐呭瓨澶嶅埗鎶鏈細 姣忎釜鏈変細璇濈姸鎬佺殑bean瀹炰緥閮藉皢瀛樺偍鍦ㄤ袱涓湇鍔″櫒鐨勫唴瀛樹腑錛屼竴涓湇鍔″櫒浣滀負涓繪湇鍔″櫒錛屽彟涓涓綔涓鴻緟鍔╂湇鍔″櫒銆?BR> 濡傛灉涓誨け璐ワ紝杈呭姪鍙樹負涓伙紝鐒跺悗鑷姩閫夋嫨鍒殑鍙敤鐨勬湇鍔″櫒浣滀負杈呭姪銆?BR> 閬楁喚錛?nbsp;寰堥毦鍦╯ervlet 鍜宩sp涓敤濂芥湁鐘舵佷細璇漛ean銆傚彲鑳戒細鍙戠敓騫跺彂鐜拌薄錛屼駭鐢烺emoteException weblogic 鐨?lt;allow-concurrent-calls> 鍙互灝侀攣浠諱綍騫跺彂鐨勮皟鐢ㄣ?BR> 鍚屾錛?nbsp;鍙互鏈夐夋嫨鍦板疄鐜?nbsp;javax.ejb.SessionSynchronization鎺ュ彛 afeterBegin() //榪涘叆浜嬪姟鏃?BR> beforeCompletion() //鎻愪氦浜嬪姟鍓?鐢ㄤ簬鎻愪氦鍓嶆妸緙撳瓨鐨勬暟鎹啓鍒版暟鎹簱涓? afterCompletion() //鎻愪氦浜嬪姟鍚?鐢ㄤ簬閲婃斁鍏變韓璧勬簮鎴栬呮洿鏂頒簨鍔℃彁浜ゅ拰緇堟鏂歸潰鐨勭粺璁′俊鎭? 浼氳瘽bean閫氳繃鍏?nbsp;SessionContext 瀵硅薄涓殑 getUserTransaction() 鏂規硶,鍙栧緱瀵筓serTransaction鐨勫簲鐢?BR> 閫氬父 SessionContext 琚瓨鏀懼湪鎴愬憳鍙橀噺涓?BR> ** 璁頒綇鏄湪璋冪敤ejb.create()鏂規硶鍓嶈皟鐢?nbsp;setUserTransaction() 鏂規硶 鍒╃敤瀵?nbsp;UserTransaction 鐨勫紩鐢ㄤ細璇濆彲浠ヤ嬌鐢?nbsp;begin() 銆乧ommit()銆乺ollback() 鏂規硶鐣屽畾涓涓簨鍔? 錛?錛?nbsp;瀹炰綋 bean錛?nbsp; 瀹冩湁涓涓富鍋ヤ綔涓哄敮涓鐨勬爣璇嗙 緇勬垚閮ㄥ垎: 鐢辨湰鍦版帴鍙c佽繙紼嬫帴鍙c乥ean綾匯佷富鍋ョ被鍜岄厤緗弿榪板櫒緇勬垚銆?BR> 鏈湴鎺ュ彛錛?BR> 鎵╁睍浜唈avax.ejb.EJBHome鎺ュ彛錛屽寘鎷琧reate錛堬級銆乺emove錛堬級銆乫inder 鍜宧ome絳夋柟娉?BR> 1)create錛堬級鏂規硶璋冪敤bean綾諱腑鐨別jbCreate錛堬級鏂規硶銆傜浉褰撲簬鏁版嵁鐨刬nsert 鏂規硶銆?BR> 2)remove錛堬級鏂規硶鐩稿綋浜庢暟鎹簱鐨刣elete鎿嶄綔銆?BR> 3)finder錛堬級鏂規硶錛屼嬌瀹㈡埛鑳藉鏌ヨ鍜屾帴鏀舵弧瓚蟲煡璇㈡潯浠剁殑瀹炰綋bean鐨勫紩鐢ㄣ傛瘡涓疄浣揵ean鐨勬湰鍦版帴鍙d腑閮藉繀欏?BR> 鏈変竴涓猣indByPrimaryKey() 鏂規硶 4)home 鏂規硶錛岀被浼間簬鏃犵姸鎬佷細璇漛ean銆?BR> 涓誨仴綾伙細 瀹炰綋bean蹇呴』鍖呮嫭涓涓富鍋ョ被錛屼富鍋ョ被鐢ㄤ簬鏍囪瘑瀹炰綋bean瀹炰緥錛岃屼笖瀹炰綋bean鏁版嵁綾誨瀷蹇呴』鏄敮涓鐨勩?BR> 涓誨仴綾誨彲浠ユ槸java鐨勫熀鏈被鍨婼tring Integer 涔熷彲浠ユ槸鐢ㄦ埛鑷畾涔夌殑銆?BR> 涔熷彲浠ユ槸澶氫釜瀛楁鐨勪富鍋ョ殑澶嶅悎涓誨仴銆?BR> bean 綾誨拰bean鐨勪笂涓嬫枃鐜錛?BR> 瀹炵幇javax.ejb.EJBObject 鎺ュ彛,鍏朵腑鍖呭惈涓氬姟鏂規硶鐨勮娉曟牸寮忓畾涔? bean 綾誨疄鐜頒簡javax.ejb.EntityBean鎺ュ彛,鍚宩avax.ejb.SessionBean鎺ュ彛涓鏍?EntityBean 鎺ュ彛鍖呭惈浜咵JB 瀹瑰櫒璋冪敤bean瀹炰緥鐨勮娉曟牸寮? 鍦╞ean鐨勬瀯閫犲櫒鎵ц涔嬪悗,绔嬪嵆璋冪敤setEntityContext() 鏂規硶,鍚屾椂鎶奲ean瀹炰緥鐨凟ntityContext 浼犻掔粰瀹? bean綾誨疄鐜頒簡home鏂規硶鍜岃繙紼嬫帴鍙d腑鐨勪笟鍔℃柟娉?home鏂規硶鏄拡瀵瑰尶鍚嶅疄渚嬬殑鏂規硶涓嶅簲浣跨敤鏈夊叧鐨勪富鍋ュ? 鍒嗕負錛?BR> 瀹瑰櫒綆$悊鎸佷箙鎬э紙Container錛峂anagerd Persistence錛塁MP 鐗圭偣錛?nbsp;EJB 瀹瑰櫒鑷姩鐢熸垚錛岀敤浜庢妸瀹炰綋bean鐨勬暟鎹啓鍏ュ埌鏁版嵁搴撲腑銆?BR> 浼樼偣錛?nbsp;bean浣滆呭彲浠ラ伩鍏嶇紪鍐欏疄浣揵ean涓庡叧緋繪暟鎹簱鏁版嵁璁塊棶鏂歸潰鐨勪唬鐮併俢mp灝嗚嚜鍔ㄥ鐞嗚繖涓榪囩▼銆?BR> 涓? 姣忎竴涓猚mp 瀹炰綋bean 閮芥湁涓緇勫鍣ㄧ鐞嗙殑瀛楁,榪欎簺瀛楁瀛樺偍鍦ㄦ暟鎹簱,騫跺彲浠庝腑鍔犺澆.閫氬父,姣忎釜瀹瑰櫒綆$悊鐨勫瓧孌甸兘瀵瑰簲浜?BR> 鍏崇郴鏁版嵁搴撲腑鐨勪竴涓垪. 瀹瑰櫒綆$悊鐨勬瘡涓瓧孌靛繀欏誨湪ejb-jar.xml涓畾涔?榪欎嬌瀹瑰櫒鑳藉鎶婂鍣ㄧ鐞嗙殑瀛楁涓巄ean綾諱腑鐨剆et鍜実et鏂規硶榪涜鍖歸厤姣旇緝. 鍙﹀,bean浣滆呭彲浠ュ鍔犲彟澶栦竴涓猚mp閰嶇疆鎻忚堪鏂囦歡 weblogic-cmp-rdbms.xml,鍏朵腑鍖呭惈鏁版嵁搴撹〃鍚嶅拰姣忎釜瀹瑰櫒綆$悊鐨勫瓧 孌靛拰鐩稿簲鐨勬暟鎹垪鐨勬槧灝? bean綆$悊鎸佷箙鎬э紙Bean錛峂anagerd Persistence 錛?nbsp;BMP 鐗圭偣錛?nbsp;鍦╞mp瀹炰綋涓紝bean浣滆呴渶瑕佽嚜宸辯紪鍐欐暟鎹簱璁塊棶浠g爜錛屼篃灝辨槸緙栧啓JDBC浠g爜錛屾彃鍏ャ佸垹闄ゅ拰鏌ヨ鏁版嵁搴撲腑鐨勫疄浣揵ean鏁版嵁銆?BR> 浼樼偣錛?nbsp;鍙互璁゜ean鐨勪綔鑰呭畬鍏ㄧ伒媧葷殑澶勭悊瀹炰綋bean鐨勬寔涔呮ф暟鎹紝鍥犱負浣滆呴渶瑕佸啓鏁版嵁璁塊棶鐨勪唬鐮侊紝浠栧嚑涔庡彲浠ヤ嬌鐢ㄤ換浣曟寔涔呮у瓨 鍌ㄦ柟寮廵jb2.0 cmp鎻愪緵瀹炰綋bean涔嬮棿鐨勬爣鍑嗗叧緋繪槧灝勶紝浣垮鍣ㄨ兘鑷姩綆$悊涓氬姟瀵硅薄涔嬮棿鐨勪氦浜掋?BR> cmp鎷ユ湁鏇村鐨勮闂帶鍒訛紝鍥犳cmp姣攂mp鏈夎緝濂界殑鎬ц兘銆?BR> 錛?錛?nbsp;娑堟伅 bean 鎶奐MS 鍜孍JB 鎴愬姛緇撳悎鍦ㄤ竴璧鳳紝闆嗘垚鐨勭粨鏋?BR> 鐗圭偣錛氬鎴鋒満涓嶉渶瑕佽皟鐢ㄦ秷鎭痓ean 鐩稿弽錛?nbsp;瀹㈡埛鏈哄彧闇瑕佸彂涓涓秷鎭粰jMS鐩殑銆?BR> 鍦ㄦ秷鎭埌杈句互鍚庯紝娑堟伅bean鐨刼nmessage錛堬級鏂規硶灝嗚璋冪敤錛屼互澶勭悊榪欎釜娑堟伅銆?BR> 娑堟伅bean鐢ㄤ簬鍦ㄦ湇鍔″櫒涓墽琛屽紓姝ユ搷浣溿?BR> 2銆侲JB 緇勬垚 錛?錛夎繙紼嬫帴鍙?BR> public interface HelloWord extents EJBObject 锝?BR> //EJBObject 鎺ュ彛鏂規硶 EJBHome getEJBHome() throws RemoteException; Object getPrimaryKey() throws RemoteException; void remove() throws RemoteException, RemoveException; Handle getHandle() throws RemoteException; boolean isIdentical(EJBObject ejbObject) throws RemoteException; 锝?BR>錛?錛夋湰鍦版帴鍙?BR> 鏈湴鎺ュ彛鏄痚jb宸ュ巶錛屽鎴鋒満鍙互浣跨敤鏈湴鎺ュ彛鍒涘緩銆佹壘鍑哄拰鍒犻櫎ejb瀹炰緥銆傚彧闇鍐欐湰鍦版帴鍙d腑鐨勬柟娉曠殑璇硶璋冪敤鏍煎紡 public class HelloWorldHome extends EJBHome 锝?BR> //EJBHome 鎺ュ彛鏂規硶 void remove(Handle handle) throws RemoteException, RemoveException; void remove(Object o) throws RemoteException, RemoveException; EJBMetaData getEJBMetaData() throws RemoteException; HomeHandle getHomeHandle() throws RemoteException; // Home public HelloWorld create() throws CreateException, RemoteException; 锝?BR> 錛?錛塨ean 綾?BR> public class HelloWorldBean implements SessionBean 锝?BR> // SessionBean 涓殑鏂規硶 public void setSessionContext(SessionContext sessionContext) /**璋冪敤嬈℃柟娉曚細璇濈粨鏉?/ public void ejbRemove() //ejb閫氳繃寰呭懡鍜屾椿鍔ㄧ殑鏈哄埗錛岀鐞嗕竴緇勬鍦ㄥ伐浣滅殑鏈夌姸鎬佷細璇漛ean瀹炰緥 /**媧誨姩*/ public void ejbActivate() /**寰呭懡*/ public void ejbPassivate() // bean綾?BR> // 姣忎釜home 鐨刢reate 鏂規硶瀵瑰簲涓涓猠jbCreate錛堬級鏂規硶 // 鏈変細璇濈姸鎬佹湁寰堝涓嶅悓鐗堟湰鐨刢reate錛堬級鏂規硶銆傝宑reate 鏂規硶蹇呴』鏈塭jbCreate錛堬級鏂規硶涓庝箣涓涓瀵瑰簲 public void ejbCreate() 锝?BR> 涓嶈鍦╡jb綾諱腑綾諱腑瀹炵幇榪滅▼鎺ュ彛 3. EJB 閰嶇疆鎻忚堪鍣?BR>錛?錛塭jb錛峧ar.xml <ejb-jar> (娉ㄩ噴) <enterprise-beans> <session> <ejb-name>HelloWorld錛坋jbname錛?lt;/ejb-name> <home>com.dhc.helloworld.HelloWorldHome錛堟湰鍦版帴鍙g被錛?lt;/home> <remote>com.dhc.helloworld.HelloWorld錛堣繙紼嬫帴鍙g被錛?lt;/remote> <ejb-class>com.dhc.helloworld.HelloWorldBean錛坆ean綾伙級</ejb-class> <session-type>Stateless錛堟棤鐘舵佷細璇濓級</session-type> <transaction-type>Bean錛坆ean綆$悊鐨勪簨鍔★級</transaction-type> </session> </enterprise-beans> <container-transaction> <method> <ejb-name>ShoppingCartEjb</ejb-name> <method-name>*錛堣鏄嶴hoppingCartEjb鐨勯粯璁や簨鍔″睘鎬ф寚瀹氫負Required錛?lt;/method-name> </method> <trans-attribute>Required錛堝鍣ㄧ鐞嗙殑浜嬪姟浣跨敤鐨勫睘鎬?nbsp;Nerver銆丯otSupported 銆丼upports銆丮andatory銆丷equired銆丷equiredNew錛?lt;/trans-attribute> </container-transaction> </ejb-jar> 錛?錛墂eblogic-ejb-jar.xml (娉ㄩ噴) <weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>HelloWorld錛坋jb鍚嶇О錛?lt;/ejb-name> <jndi-name>HelloWorldEJB錛坖ndi鍚嶇О錛?lt;/jndi-name> <max-bean-in-freepool>10錛堥檺鍒朵笉浼氭湁瓚呰繃10涓棤鐘舵佷細璇漛ean騫跺彂榪愯錛?lt;/max-bean-in-freepool> <max-bean-in-cache>10錛堟斁鍒板唴瀛樼紦瀛樹腑鐨勬湁鐘舵佷細璇漛ean鐨勬渶澶ф暟閲忥級</max-bean-in-cache> </weblogic-enterprise-bean> </weblogic-ejb-jar> 4 . 寤虹珛ejb 妗f鏂囦歡 com/dhc/helloworld/錛坧ackage錛?BR>com/dhc/helloworld/HelloWorld錛堣繙紼嬫帴鍙o級 com/dhc/helloworld/HelloWorldHome錛堟湰鍦版帴鍙o級 com/dhc/helloworld/HelloWorldBean錛坆ean綾伙級 META-INF META-INF/ejb錛峧ar.xml錛堥厤緗弿榪板櫒錛?BR>META-INF/weblogic-ejb-jar.xml錛坵eblogic鏈嶅姟鍣ㄩ厤緗弿榪板櫒錛?BR> 璇存槑錛?nbsp;META-INF 蹇呴』涓哄ぇ鍐?BR> 5 . 瀹瑰櫒綆$悊鐨勪簨鍔?BR>Nerver : 涓嶅弬涓庝簨鍔?濡傛灉鍙備笌浜х敓RemoteException NotSupported: 涓嶈兘鍙備笌 Supports: 濡傛灉璋冪敤鑰呮鍦ㄥ弬涓庝簨鍔?鐩稿簲鐨凟JB璋冪敤涔熷彲浠ュ弬涓庝簨鍔?鍚﹀垯涓嶈兘 Mandatory 濡傛灉璋冪敤鑰呮湁涓涓簨鍔?鐩稿簲鐨凟JB鍙互鍙備笌浜嬪姟,鍚﹀垯,TransactionRequiredException Required 濡傛灉璋冪敤鑰呮湁涓涓簨鍔?鐩稿簲鐨凟JB鍙互鍙備笌浜嬪姟,鍚﹀垯,瀹瑰櫒灝嗗湪璋冪敤鐩稿簲鐨凟JB涔嬪墠,寮濮嬩竴涓簨鍔? 褰撴柟娉曡皟鐢ㄥ畬鎴愪互鍚?鍗蟲彁浜よ浜嬪姟. RequiresNew 鍦ㄨ皟鐢ㄧ浉搴旂殑EJB涔嬪墠,寮濮嬩竴涓柊鐨勪簨鍔?褰撴柟娉曡皟鐢ㄨ繑鍥炴椂,鍗蟲彁浜よ繖涓簨鍔? 6銆乪jb 寮曠敤 鍦╡jb錛峧ar.xml <ejb-ref> <description> an EJB reference to the Widget EJB(鎻忚堪)</description> <ejb-ref-name>ejb/WidgetEJB</ejb-ref-name> <ejb-ref-type>session</ejb-ref-type> <home>com.dhc.WidgetHome</home> <remote>com.dhc.Widget</remote> </ejb-ref> 鍦?nbsp;weblogic-ejb-jar.xml <ejb-reference-description> <ejb-ref-name>ejb/WidgeEJB</ejb-ref-name> <jndi-name>DeployedWidge</jndi-name> </ejb-reference-description> 紼嬪簭 Content ctx = new InitialContent(); Object h = ctx.lookup("java:/comp/env/ejb"); //鐜鍙橀噺鏄彧璇葷殑,鑰屼笖鏄綋鍓峞jb鐨勬湰鍦板彉閲? WidgetHome home = (WidgetHome)PortableRemoteObject.narrow(h,WidgeHome.class); 7. 璧勬簮綆$悊鍣ㄧ殑寮曠敤 瀹氫箟璧勬簮綆$悊鐨勫紩鐢?BR>渚嬪瓙錛?nbsp;寤虹珛 jdbc銆丏BPool涓嶫DBC鏁版嵁婧愮殑鏄犲皠 鍦╡jb錛峧ar.xml <resource-ref> <description>(鎻忚堪)</description> <res-ref-name>jdbc/BDPool</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> 鍦?nbsp;weblogic-ejb-jar.xml <resource-description> <res-ref-name>jdbc/DBPool</res-ref-name> <jndi-name>DBPool</jndi-name> </resource-description> config.xml <JDBCTxDataSource name="DBPool" Targets="myserver" JDDIName="DBPool" (jndi鍚嶇О) PoolName ="DevelopmentPool" /> 寮曠敤鐨勪紭鐐?BR>鎴戜滑鐢ㄥぇ閲忕殑鏄犲皠鍜岄厤緗紝鎵嶅緩绔嬩簡璧勬簮綆$悊鍣ㄧ殑寮曠敤錛屼絾鏄繕鏄緢鍊煎緱鐨勩?BR>浠ヤ負渚夸簬閮ㄧ講浜哄憳閲嶆柊閰嶇疆搴旂敤鑰屼笉闇瑕佷慨鏀瑰疄闄呯殑bean綾諱唬鐮併傜敋鑷充篃涓嶉渶瑕佷慨鏀筫jb鐨勯厤緗弿榪板櫒 java bean 浠g爜 Content ctx = new InitialContent(); DataSource dataSource = (DataSource)ctx.lookup("java:/comp/env/jdbc/DBPool"); 8 . 鍙ユ焺錛?nbsp;浣滀負涓涓覆琛屽寲鐨勫璞★紝鍙ユ焺涓皝瑁呬簡瓚沖鐨勪俊鎭紝浠ヤ究閲嶅緩瀵笶JBObject鐨勫紩鐢ㄣ?BR>鍙ユ焺鍙敤浜庡湪涓や釜鐩鎬簰鍚堜綔鐨勮繘紼嬩腑浼犻扙JBObject鐨勫紩鐢ㄣ傛帴鍙楄繘紼嬪嵆鍙粠鍙ユ焺涓彇寰桬JBObject鐨勫紩鐢ㄣ?BR> 涓轟簡鍙栧緱鍙ユ焺錛屽彲浠ヨ皟鐢‥JBObject鎺ュ彛鐨刧etHandle錛堬級鏂規硶錛岃繑鍥炰竴涓狧andle瀹炰緥 涓轟簡閲嶅緩EJBObject 寮曠敤銆傚彲浠ヤ嬌鐢℉andle 鎺ュ彛鐨刧etEJBObject錛堬級鏂規硶銆?BR> 渚嬪瓙錛?BR> HelloWorld hw = home.create(); javax.ejb.Handle handle = hw.getHandle(); HelloWorld helloworld = (HelloWorld)PortableRemoteObject.narrow(handle.getEJBObject(),HelloWorld.class); HomeHandle: 綾諱技handle 錛屼絾涓嶈兘鐢ㄤ簬寮曠敤EJBObject HomeHandle 鍖呭惈瓚沖鐨勪俊鎭紝鍙互閲嶅緩EJBHome錛堬級鐨勫紩鐢ㄣ?BR> 宸紓錛?BR> 鏄皟鐢?nbsp;getHomeHandle錛堬級鏂規硶 鍜実etEJBHome錛堬級鏂規硶 渚嬪瓙鐗囨柇錛?BR> Content ctx 錛?nbsp;new InitialContext(); Object h = ctx.lookup("HelloWorldEJB"); HelloWorldHome home = (HelloWorldHome)PortableRemoteObject.narrow(h,HelloWorldHome.class); HomeHandle homehandle = home.getHomeHandle(); Object nh = homehandle.getEJBHome(); HelloWorldHome newHomeReference = (HelloWorldHome)PortableRemoteObject.narrow(nh,HelloWorldHome.class); 浼樼偣: 浠栦滑鍙互鑷姩鐨勫瓨鍌ㄩ噸寤哄紩鐢ㄦ墍闇鐨勪俊鎭?BR> 9.浣跨敤浜嬪姟鐨勬妧宸? (1) 涓涓簨鍔′笉瑕佹秹鍙婂お澶氱殑鎿嶄綔. (2) 瀹瑰櫒綆$悊鍜宐ean綆$悊鐨勪簨鍔?BR> 浜嬪姟鏃㈣楄垂搴旂敤鏈嶅姟鍣ㄤ腑鐨勮祫婧?鍙堣楄垂鏁版嵁搴撹祫婧?鎵浠ヤ簨鍔¤秺鐭秺濂? 灝介噺浣跨敤瀹瑰櫒綆$悊浜嬪姟鑰屼笉瑕侀噰鐢╞ean綆$悊浜嬪姟鐨勬柟寮? (3) ejb閬囧埌閿欒,闇瑕佸己鍒朵簨鍔″洖婊? 浣跨敤EJBObject.setRollbackOnly(); (4) 涓嶈兘璁╀簨鍔℃秹鍙妛eb灞傚拰琛ㄧず閫昏緫 (5) 浼佷笟搴旂敤涓笉搴斿綋閫夌敤supports 浜嬪姟灞炴?鍥犱負鍙湁璋冪敤鑰呭紑濮嬩竴涓簨鍔″悗,ejb鎵嶈兘鍦ㄤ簨鍔′腑榪愯. |