ΪʲôҪʹÓÃEJB?ÈçºÎʹÓÃejb2.0¿ª·¢
ΪʲôҪʹÓÃEJB?
¹Ø¼ü×Ö: ejb
¡¡¡¡ÎªÊ²Ã´ÒªÊ¹ÓÃEJB?
¡¡¡¡================
¡¡¡¡
¡¡¡¡EJB×î´óµÄÓÕÈËÖ®´¦ÊÇËý°ÑÓ¦ÓóÌÐòºÍ·þÎñÆ÷·Ö¿ªÁË,ÎÒÃÇÔÙÒ²²»ÓúÍÄÇЩ·þÎñÆ÷Éϵĸ´ÔÓµÄ×ÊÔ´´ò½»µÀÁË,ʲôÊý¾Ý¿â,ʲô½ø³Ì,Ïß³Ì,ʲô°²È«È¨ÏÞ,ʲôÌ×½Ó×Ö,¶¼¼û¹íÈ¥°É,ÎÒÃÇÖ»ÐèÒª×¨ÖøÓÚÎÒÃǵÄÉÌÒµÂß¼µÄʵÏÖÁË.
¡¡¡¡
¡¡¡¡==========
¡¡¡¡EJBµÄʵÖÊ?
¡¡¡¡==========
¡¡¡¡
¡¡¡¡EJBʵ¼ÊÉÏÊÇSUNµÄJ2EEÖеÄÒ»Ì׹淶,²¢Çҹ涨ÁËһϵÁеÄAPIÓÃÀ´ÊµÏÖ°ÑEJB¸ÅÄîת»»³ÉEJB²úÆ·.EJBÊÇBEANS,BEANSÊÇʲô¸ÅÄî,ÄǾÍÊǵÃÓÐÒ»¸öÈÝÄÉËý,ÈÃËý¿É¾¢ÔìÌڵĵط½,¾ÍÊǵÃÓÐÈÝÆ÷.EJB±ØÐëÉú´æÔÚEJBÈÝÆ÷ÖÐ.Õâ¸öÈÝÆ÷¿ÉÊǹ¦ÄÜÇ¿´óÖ®¼«!ËýÊ×ÏÈÒª°ü×°ÄãBEAN,EJBµÄ¿Í»§³ÌÐòʵ¼ÊÉÏ´ÓÀ´¾Í²»ºÍÄã±àдµÄEJBÖ±½Ó´ò½»µÀ,ËûÃÇÖ®¼äÊÇͨ¹ýHOME/REMOTE½Ó¿ÚÀ´·¢Éú¹ØÏµµÄ.Ëü¸ºÔðÄãµÄBEANµÄËùÓеijԺÈÀÈøË¯,±ÈÈçBEANµÄ³ÖÐø»¯,°²È«ÐÔ,ÊÂÎñ¹ÜÀí...
¡¡¡¡
¡¡¡¡=============
¡¡¡¡EJB·þÎñÆ÷²úÆ·
¡¡¡¡=============
¡¡¡¡
¡¡¡¡¸÷¸öWEB·þÎñÆ÷¿ª·¢ÉÌ»ù±¾É϶¼ÔÚËûÃÇWEB·þÎñÆ÷ÖÐÐÂÀ¦°óÁËEJBÈÝÆ÷,»òÕß½ÐEJB·þÎñÆ÷.ÆäÖÐ×î¼òµ¥Ò²ÊÇ×î¸ù±¾µÄÊÇJ2EE¿ª·¢»·¾³´øµÄJ2EEµÄEJBÈÝÆ÷,ËüºÜºÃµÄºÍJ2EEµÄHTTP·þÎñÆ÷ºÍServletÒýÇæÒ»Æð¹¹ÖþÁËÒ»¸öºÜºÃµÄÔËÐл·¾³,ÓÉÓÚÅäÖüòµ¥,¹¦ÄÜÇ¿´ó,Òò´Ë³ÉΪÎÒµÄ×î°®.ÁíÍâÏóBEAµÄWeblogicalÊÇÖµµÃÍÆ¼öµÄÒ»¸ö²úÆ·,ËüµÄWEB·þÎñÆ÷¹¦ÄÜÏ൱ǿ´ó,Êǵ±½ñºÜ¶àÍøÕ¾¹¹ÖþµÄÀíÏëWEB·þÎñÆ÷,ËüÒ²ÒѾ¼ÓÈëÁËEJBµÄÐÐÁÐ,ÔÚEJB·½ÃæÓÐ×Ų»Ë׵ıíÏÖ.InpriseµÄIAS¸üÊÇÒ»¸ö¹¦ÄÜÇ¿´óµÄWEB·þÎñÆ÷,ͬÑù,ҲǶÈëÁËEJBÈÝÆ÷,¼ÓÖ®Óë±¾¹«Ë¾µÄJBuilderµÄÎÞ½Ó·ì½áºÏ,¸üʹËüÈËÆøÅÊÉý.
¡¡¡¡»¹ÓÐÏóIBMµÄWebSphereÒ²²»´í,²»¹ýApacheÊÇ·ñÒѾ´îÔØÁËEJBÈÝÆ÷,ÎÒ²»Ì«Çå³þ.
¡¡¡¡ÁíÍâ,ÍÆ¼öÒ»¸öEJBoss,ÊÇÒ»¸öÍêÈ«Ãâ·ÑµÄEJB·þÎñÆ÷,¶øÇÒÊÇÔ´úÂ빫¿ªµÄ.
¡¡¡¡
¡¡¡¡========================
¡¡¡¡EJBÈÝÆ÷ÈçºÎ°ü×°ÄãµÄBEAN.
¡¡¡¡========================
¡¡¡¡
¡¡¡¡ÕâÄêͷûÓÐÌìÉϵôÏÚ±ýµÄºÃÊÂÇé,EJBÒ²²»ÀýÍâ,ÄãÏëÈÃEJBÈÝÆ÷ÌæÄã¹ÜÀíÄã±àдµÄEJBµÄ³ÔºÈÀÈøË¯,ƾʲô?!ƾXMLÃèÊö×Ó,Äãͨ¹ýÒ»¸öXMLÎļþ¸æËßEJBÈÝÆ÷BEANµÄÏà¹ØÅäÖÃÐÅÏ¢,±ÈÈçÎÒµÄEJBµÄHOME½Ó¿ÚºÍREMOTE½Ó¿ÚÊÇÄÄÒ»¸öÀà,±ÈÈçÎÒµÄEJBµÄ±ðÃû(ʵ¼ÊÉÏÊÇJNDIÃû³Æ)½Ðʲô,±ÈÈçÎÒµÄEJBÊÇ·ñÊÇʵÌåÀàÐ͵ÄEJB»¹ÊǶԻ°ÀàÐ͵ÄEJB,±ÈÈç¸æËßÈÝÆ÷ÌæÎÒ¹ÜÀíÎÒµÄʵÌåEJBÖÐÄÄЩ×Ô¶Î,......×ÜÖ®,ÄãµÃ¸úÔÛÃǵÄEJB´ó×ܹÜ----EJBÈÝÆ÷°ÑËùÓж¼½»´úÇå³þ.ÕâÑù,ʣϵÄ,¾Í¿´EJBÈÝÆ÷µÄÁË!!!
¡¡¡¡ÄãÊDz»ÊÇ×ܹ²Ð´¹ý3¸öÎļþ,BEAN¶¨Òå,HOME½Ó¿Ú¶¨Òå,ROMOTE½Ó¿Ú¶¨Òå,
¡¡¡¡µ±ÄãDEPLOYËûÃÇʱ,ÈÝÆ÷»á
¡¡¡¡(1).Ê×Ïȸù¾ÝHOMEºÍREMOTE½Ó¿ÚÉú³ÉËûÃǵÄʵÏÖ´úÂë,ÎÒÃDz»·Á½Ð×öHOME_IMPLºÍREMOTE_IMPL,
¡¡¡¡(2).È»ºó,ÀûÓÃRMIC²úÉúHOME_IMPLºÍREMOTE_IMPLµÄSTUBºÍSKELETONÎļþ,2X2Ò»¹²Éú³É4¸öÎļþ.
¡¡¡¡(STUBºÍSKELETONÇë²Î¼ûRMIµÄÏà¹Ø¸ÅÄî)
¡¡¡¡Èç´ËÕâ°ã,×îºó,ÔÚ·þÎñÆ÷ÉÏ,Ò»¹²ÓÐ
¡¡¡¡BEAN
¡¡¡¡HOME_IMPL
¡¡¡¡REMOTE_IMPL
¡¡¡¡HOME_STUB
¡¡¡¡HOME_SKELETON
¡¡¡¡REMOTE_STUB
¡¡¡¡REMOTE_SKELETON
¡¡¡¡7Îļþ,²ÅÄÜÈÃEJB¹¤×÷ÆðÀ´.
¡¡¡¡(3).Éú³ÉʵÌåEJB¶ÔÓ¦µÄÊý¾Ý¿âµÄ¿â±í
¡¡¡¡(4).×¢²áÄãµÄEJBµ½JNDI·þÎñ
¡¡¡¡
¡¡¡¡===============================================================
¡¡¡¡ÎªÊ²Ã´³ýÁËдBEAN,»¹µÃд½Ó¿ÚÎļþ,¶øÇÒ¸ÉÂïÒªHOMEºÍREMOTEÁ½¸ö½Ó¿Ú.
¡¡¡¡===============================================================
¡¡¡¡
¡¡¡¡ÎÒ½Á×ŰÉ,ÕâÁ½¸ö½Ó¿ÚÍêÈ«ÊÇ¿ÉÒԺϲ¢³ÉÒ»¸ö½Ó¿ÚµÄ,ÆäʵËûÃǵÄ×÷Óö¼Ö»ÊÇÒ»¸ö½Ó¿Ú,ΪÁËÈÃÄÇÈ˼ÒSUN¸ÉÂ𻹲ð³ÉÁ½¸öÄØ?ÎÒÏë,ÕýÈçSUNËù˵µÄ,ΪÁ˽«Ò»Ð©ÈÝÆ÷Ïà¹Ø²Ù×÷ºÍ¿Í»§ÉÌÒµ·½·¨·Ö¿ª,ʲôÒâ˼?˵¿ªÁ˰É,HOMEÓÃÀ´¹æ·¶ÈÝÆ÷Ïà¹ØµÄ²Ù×÷·½·¨,REMOTE¸ºÔðרÐÄÖÂÖ¾µÄ¶¨ÖÆÉÌÒµ·½·¨,¶øÎÒÃǵÄBEAN²ÅÊÇ×îÖÕµÄÂ߼ʵÏÖÕß.
¡¡¡¡»¹ÊDz»Ã÷°×?û¹ØÏµ,ÎÒÔÚ˵µÄϸЩ,
¡¡¡¡¾ÙÀý˵Ã÷:
¡¡¡¡°ÑÎÒÏëÏó³ÉÒ»¸öBEAN,HOME½Ó¿Ú¾ÍÊÇÎÒÃǼÒÈ˵ÄÃüÁî,REMOTE½Ó¿Ú¾ÍÊÇÎÒÃǵ¥Î»µÄÁìµ¼µÄÃüÁî,ÎÒÃǼÒÈ˵ÄÃüÁî¾ö¶¨ÁËÎÒÈçºÎ³ÔºÈÀÈøË¯,Áìµ¼µÄÃüÁî¾ö¶¨ÁËÎÒÈçºÎ×öÒ»Ð©ÕæÕýµÄ¹¤×÷,Çë×¢ÒâÕâÀïÎÒʹÓÃÁË"¾ö¶¨"Õâ¸ö×ÖÑÛ,
¡¡¡¡ÎÒ²¢Ã»ÓÐ˵ÎÒÃǼÒÈË,¶øÊÇ˵ÁËÎÒÃǼÒÈ˵ÄÃüÁî,Õâ¸öÃüÁîµÄº¬Òå¾ÍÊǽӿÚ,²»ÊÇÀà,¶øÎÒÕâ¸öBEANÈ´ÊǸöÀà!»¹ÓÐ,BEANÀ಻ʵÏÖREMOTEºÍHOME½Ó¿Ú,¼Çס!¼Çס!
¡¡¡¡
¡¡¡¡=========
¡¡¡¡EJBµÄ·ÖÀà
¡¡¡¡=========
¡¡¡¡
¡¡¡¡EJB·ÖΪʵÌå(Entity)EJBºÍ¶Ô»°(Session)EJB,
¡¡¡¡
¡¡¡¡>>>>>>ʵÌåEJB:>>>>>>¶Ô»°EJB<<<<<<<
¡¡¡¡
¡¡¡¡¶Ô»°EJB¸ù±¾¸ù±¾²»ºÍÊý¾Ý¿â´ò½»µÀ,Ϊʲô,ÒòΪËû¸ù±¾²»ÓÃÐòÁл¯!ËûÖ»¸ºÔðÀ´Íê³ÉһЩÂß¼²Ù×÷,±ÈÈçËã¸öÕÊʲôµÄ.
¡¡¡¡ÎªÁ˺ÍʵÌåEJB½Ï¾¢,ËûÒ²Ò»¿ÚÆøÉúÁËÁ½¸ö¶ù×Ó,
¡¡¡¡a.ÓÐ״̬(sessionful)¶Ô»°EJB
¡¡¡¡Ëû¾Í¸úservletÖеÄsession¶ÔÏóËÆµÄ,¿ÉÒÔ±£´æÓû§µÄsessionÏà¹ØÐÅÏ¢,¶øÇÒËû½ö½ö±»Ò»¸öÓû§µÄÒ»´ÎsessionËùʹÓÃ,²»ºÍ±ðÈ˹²Ïí,ÎÒ¹ÜËû½Ð¶Ô»°,²»¹ýÕâ"¶Ô»°"·³öÀ´ÕâÊǹ»ÄÑÌýµÄ,»¹²»Èç¾Í½ÐËûsessionÄØ!
¡¡¡¡b.ÎÞ״̬(sessionless)¶Ô»°EJB
¡¡¡¡Õâ¸ö¶«¶«ÊÇ×î¼òµ¥µÄEJB,ËûÊÇ¿ÉÒÔ±»¶à¸öÓû§¹²Ïí,×¢Òâ!ÎÒËù˵µÄ¹²ÏíÊÇָʵÀýµÄ¹²Ïí!
¡¡¡¡
¡¡¡¡
¡¡¡¡======================================
¡¡¡¡Ò»¸öBEAN¹ÜÀí³ÖÐø»¯µÄʵÌåEJB(BMP)СÀý×Ó
¡¡¡¡======================================
¡¡¡¡
¡¡¡¡ËµÁ˰ëÌìÁË,´ó¼ÒÕä¹óµÄÄÔ×ÊÔ´¿Öű»ÎÒÏûºÄµÄ²î²»¶àÁË,ºÃ,ÈÃÎÒÃÇÀ´ÆÊÎöÒ»¸öBEAN¹ÜÀí³ÖÐø»¯µÄʵÌåEJB(BMP)°É.
¡¡¡¡
¡¡¡¡-----------------------¿´¿´REMOTE½Ó¿Ú------------------------------
¡¡¡¡public interface Account extends EJBObject {//±ØÐë´ÓEJBObject¼Ì³Ð
¡¡¡¡//ÕâЩ¶¼ÊÇÉÌÒµ·½·¨,¶øÇÒÕâÀïдÁ˵Ä,±ØÐëÔÚBEANÖж¼ÊµÏÖ
¡¡¡¡public void deposit(double amt) throws RemoteException;
¡¡¡¡public double withdraw(double amt) throws AccountException, RemoteException;
¡¡¡¡public double getBalance() throws RemoteException;
¡¡¡¡public String getOwnerName() throws RemoteException;
¡¡¡¡public void setOwnerName(String name)throws RemoteException;
¡¡¡¡}
¡¡¡¡
¡¡¡¡-------------------------¿´¿´HOME½Ó¿Ú---------------------------------
¡¡¡¡public interface AccountHome extends EJBHome {
¡¡¡¡//ÕâÉùÃ÷ÁËcreateº¯Êý,ÓÉÓÚÊÇBMP,ËùÒÔ±ØÐëÔÚBEANÖÐʵÏÖÒ»¸ö½ÐejbCreateµÄ¶ÔÓ¦º¯Êý
¡¡¡¡Account create(String accountID, String ownerName) throws CreateException, RemoteException;
¡¡¡¡
¡¡¡¡//°´Ö÷¼ü²éѯ
¡¡¡¡//ÓÉÓÚÊÇBMP,ËùÒÔ±ØÐëÔÚBEANÖÐʵÏÖÒ»¸ö½ÐejbFindByPrimaryKeyµÄ¶ÔÓ¦º¯Êý
¡¡¡¡public Account findByPrimaryKey(AccountPK key) throws FinderException, RemoteException;
¡¡¡¡
¡¡¡¡//°´ÆäÖеÄName×ֶβéѯ
¡¡¡¡//ÓÉÓÚÊÇBMP,ËùÒÔ±ØÐëÔÚBEANÖÐʵÏÖÒ»¸ö½ÐejbFindByOwnerNameµÄ¶ÔÓ¦º¯Êý
¡¡¡¡public Account findByOwnerName(String name) throws FinderException, RemoteException;
¡¡¡¡}
¡¡¡¡
¡¡¡¡---------------------------¿´¿´BEAN-----------------------------------
java ´úÂë
1.¡¡¡¡public class AccountBean implements EntityBean {
2.¡¡¡¡//Èý¸öPUBLIC×Ö¶Î,ËûÃǽ«À´¶ÔÓ¦¿â±íµÄÈý¸ö×Ö¶Î
3.¡¡¡¡public String accountID
4.¡¡¡¡public String ownerName;
5.¡¡¡¡public double balance;
6.¡¡¡¡
7.¡¡¡¡//----HOMEÖÐÉùÃ÷µÄcreate·½·¨µÄÓ°ÉäʵÏÖ
8.¡¡¡¡//ÓÉÓÚÊÇBMP,ËùÒÔ±ØÐë×Ô¼ºÀ´¸ºÔðʵÀý´´½¨Ê±ÊµÀýµ½Êý¾Ý¿âµÄÓ°Éä
9.¡¡¡¡public AccountPK ejbCreate(String accountID, String ownerName) throws CreateException, RemoteException {
10.¡¡¡¡PreparedStatement pstmt = null;
11.¡¡¡¡Connection conn = null;
12.¡¡¡¡try {
13.¡¡¡¡this.ownerName = ownerName;
14.¡¡¡¡this.balance = 0;
15.¡¡¡¡conn = getConnection();
16.¡¡¡¡pstmt = conn.prepareStatement("insert into accounts (id, ownerName, balance) values (?, ?, ?)");
17.¡¡¡¡pstmt.setString(1, accountID);
18.¡¡¡¡pstmt.setString(2, ownerName);
19.¡¡¡¡pstmt.setDouble(3, balance);
20.¡¡¡¡//¿´ÕâÀï,¿´ÕâÀï!²å½øÈ¥ÁË...
21.¡¡¡¡pstmt.executeUpdate();
22.¡¡¡¡return new AccountPK(accountID);
23.¡¡¡¡}catch (Exception e) {
24.¡¡¡¡throw new CreateException(e.toString());
25.¡¡¡¡}finally {
26.¡¡¡¡try {
27.¡¡¡¡pstmt.close();
28.¡¡¡¡conn.close();
29.¡¡¡¡}catch (Exception e) { }
30.¡¡¡¡}
31.¡¡¡¡}
32.¡¡¡¡
33.¡¡¡¡//----HOMEÖÐÉùÃ÷µÄfindByOwnerName·½·¨µÄÓ°ÉäʵÏÖ
34.¡¡¡¡//ÓÉÓÚÊÇBMP,ËùÒÔ±ØÐë×Ô¼ºÀ´Íê³É°´ÕÕName×ֶβéÕҵŤ×÷
35.¡¡¡¡public AccountPK ejbFindByOwnerName(String name) throws FinderException, RemoteException {
36.¡¡¡¡PreparedStatement pstmt = null;
37.¡¡¡¡Connection conn = null;
38.¡¡¡¡try {
39.¡¡¡¡conn = getConnection();
40.¡¡¡¡pstmt = conn.prepareStatement("select id from accounts where ownerName = ?");
41.¡¡¡¡pstmt.setString(1, name);
42.¡¡¡¡//¿´¿´¿´!ÕÒÉÏÁË,¸ù¾ÝÃû³Æ...
43.¡¡¡¡ResultSet rs = pstmt.executeQuery();
44.¡¡¡¡rs.next();
45.¡¡¡¡String id = rs.getString("id");
46.¡¡¡¡pstmt.close();
47.¡¡¡¡conn.close();
48.¡¡¡¡return new AccountPK(id);
49.¡¡¡¡}catch (Exception e) {
50.¡¡¡¡throw new FinderException(e.toString());
51.¡¡¡¡}finally {
52.¡¡¡¡try {
53.¡¡¡¡pstmt.close();
54.¡¡¡¡conn.close();
55.¡¡¡¡}catch (Exception e) { }
56.¡¡¡¡}
57.¡¡¡¡}