• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            cc

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              38 隨筆 :: 14 文章 :: 21 評論 :: 0 Trackbacks
            文章分類:Java編程
            對于初學(xué)像我這樣初學(xué)EJB的菜鳥來講,EJB的配置是一件非常繁瑣的事情,不堪回首啊。呵呵,今天終于明白了昨天晚上遇到的一個白癡錯誤,所以將一個簡單的例子寫下來。
            我這個例子的前提是EJB已經(jīng)發(fā)布成功,在servlet中對已經(jīng)發(fā)布的EJB的調(diào)用。
            首先已要做的就是將已發(fā)布的EJB組件的jar文件拷貝到當(dāng)前Web工程的lib下,其目錄結(jié)構(gòu)為:
            EJB端:
                EJBFolderName
                      |
                      |------classes 
                      |            |
                      |            |-------hello
                      |            |           |---------hello.class   //Remote
                      |            |           |---------helloHome.class   //Home
                      |            |           | ---------helloBean.class  //Bean
                      |            |
                      |            |--------META-INF
                      |                           |------ejb-jar.xml  //EJB配置文件
                        |                           |------MANIFEST.MF  //Manifest-Version: 1.0  Class-Path:
                      | 
                      |-----------src
                                   |
                                   |-------hello
                                   |           |---------hello.java    //Remote
                                   |           |---------helloHome.java    //Home
                                   |           | ---------helloBean.java  //Bean
                                   |
                                   |--------META-INF
                                                 |----ejb-jar.xml //servlet配置文件
                                                 |-----MANIFEST.MF  //Manifest-Version: 1.0  Class-Path:

            servlete端:
            ServletFolderName
                      |
                      |----------src
                      |            |-------hello
                      |            |          |--------TestEJB.java  //被Servlet(只為目標(biāo)清晰,也可直接寫到Servlet內(nèi))
                      |            |
                      |            |-------TestEJBServlet.java  //一個Servlet  調(diào)用 包hello 中的方法。
                      |
                      |
                      |----------WebRoot

                                       |----------META-INF
                                       |                  |--------MANIFEST.MF    //Manifest-Version: 1.0       Class-Path:
                                       |
                                       |----------WEB-INF
                                                        |----------classes
                                                        |               |-----------TestEJBServlet.class
                                                        |               |
                                                        |               | -----------hello                                              |                               |----------TestEJB.class
                                                        |-----------lib              
                                                        |            |----------FirstEJB.jar   //EJB打好的一個Jar包!EJB2.0不可缺少  

                                                        |                           
                                                        |------------web.xml   //Servlet配置文件             

            基本文件結(jié)構(gòu)就是這樣。結(jié)束!         

            */下面是針對每個文件的詳細(xì)說明://首先是Servlet端,Servlet有一個servlet文件,實(shí)現(xiàn)doGet方法和doPost方法,還有一個Servlet配置文件 web.xml
            //TestEJBServlet.java:
            Java代碼 復(fù)制代碼
            1. import java.io.IOException;   
            2.   
            3.   
            4.   
            5. import javax.servlet.ServletException;   
            6.   
            7. import javax.servlet.http.HttpServlet;   
            8.   
            9. import javax.servlet.http.HttpServletRequest;   
            10.   
            11. import javax.servlet.http.HttpServletResponse;   
            12.   
            13.   
            14.   
            15. import hello.TestEJB;   
            16.   
            17. public class TestEJBServlet extends HttpServlet {   
            18.   
            19.   
            20.   
            21.     protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {   
            22.   
            23.         this.doPost(request,response);  //直接以頁面的形式調(diào)用Servlet 調(diào)用的事doGet方法,   
            24.   
            25.                                                                                             //也可以直接在doGet方法中調(diào)用EJB   
            26.   
            27.     }   
            28.   
            29.          public void doPost(HttpServletRequest request, HttpServletResponse response){   
            30.   
            31.                 try{   
            32.   
            33.             new TestEJB("iiop://localhost:2809/").test();  //調(diào)用 TestEJB.java 中的test()方法。   
            34.   
            35.         } catch(Exception e){   
            36.   
            37.             e.printStackTrace();   
            38.   
            39.         }   
            40.   
            41.   
            42.   
            43.           }   
            44.   
            45. }  



            //TestEJB.java:
            Java代碼 復(fù)制代碼
            1. package hello;   
            2.   
            3. import javax.naming.Context;   
            4.   
            5. import java.util.Properties;   
            6.   
            7. import javax.naming.NamingException;   
            8.   
            9. import javax.naming.InitialContext;   
            10.   
            11. import javax.rmi.PortableRemoteObject;   
            12.   
            13. import java.rmi.RemoteException;   
            14.   
            15. import javax.ejb.CreateException;   
            16.   
            17. public class TestEJB {   
            18.   
            19.     private static final String JNDI_NAME = "HelloEJB";  //EJB上傳websphere時用的JNDI Name   
            20.   
            21.     private String url;   
            22.   
            23.     private HelloHome home;   
            24.   
            25.     public TestEJB(String url) throws NamingException{   
            26.   
            27.         this.url = url;   
            28.   
            29.         home = lookUpHome();   
            30.   
            31.     }   
            32.   
            33.     private Context getInitialContext() throws NamingException {   
            34.   
            35.         Properties prop = new Properties();   
            36.   
            37.        prop.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");   
            38.   
            39.         prop.put(Context.PROVIDER_URL, url);   
            40.   
            41.         return new InitialContext(prop);   
            42.   
            43.     }   
            44.   
            45.     private HelloHome lookUpHome() throws NamingException{   
            46.   
            47.         Context ctx = getInitialContext();   
            48.   
            49.         Object home = ctx.lookup(JNDI_NAME);   
            50.   
            51.         return (HelloHome)PortableRemoteObject.narrow(home,HelloHome.class);   
            52.   
            53.     }   
            54.   
            55.     public void test() throws RemoteException,CreateException,NamingException {   
            56.   
            57.         Hello hello = (Hello)PortableRemoteObject.narrow(home.create(),Hello.class);   
            58.   
            59.         System.out.println(hello.sayHello());   
            60.   
            61.     }   
            62.   
            63.     /*public static void main(String args[]) throws Exception{  
            64.  
            65.         try{  
            66.  
            67.         new TestEJB("iiop://localhost:2809/").test();  
            68.  
            69.         }catch(Exception e){  
            70.  
            71.             e.printStackTrace();  
            72.  
            73.         }  
            74.  
            75.     }*/  
            76.   
            77. }  


            //Servlet 配置文件 web.xml
            Xml代碼 復(fù)制代碼
            1. <?xml version="1.0" encoding="UTF-8"?>  
            2.   
            3. <web-app version="2.4"    
            4.   
            5.     xmlns="http://java.sun.com/xml/ns/j2ee"    
            6.   
            7.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
            8.   
            9.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
            10.   
            11.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
            12.   
            13.     <servlet>  
            14.   
            15.         <servlet-name>TestEJB</servlet-name>      
            16.   
            17.         <servlet-class>TestEJBServlet</servlet-class>    
            18.   
            19.     </servlet>  
            20.   
            21.     <servlet-mapping>  
            22.   
            23.         <servlet-name>TestEJBServlet</servlet-name>  //Servlet映射到web服務(wù)器上的名字   
            24.   
            25.         <url-pattern>/servlet/TestEJBServlet</url-pattern>//Servlet映射到web服務(wù)器上的路徑   
            26.   
            27.     </servlet-mapping>  
            28.   
            29.   <welcome-file-list>  
            30.   
            31.     <welcome-file>index.jsp</welcome-file>//默認(rèn)開始頁面(可有可無)   
            32.   
            33.   </welcome-file-list>  
            34.   
            35. </web-app>  


            接下來是EJB端:三個java文件(Home.java,Remote.java,Bean.java)和一個ejb-jar配置文件
            helloHome.java(就是Home.java  本地接口)
            Java代碼 復(fù)制代碼
            1. package hello;   
            2.   
            3. import java.rmi.RemoteException;   
            4.   
            5. import javax.ejb.CreateException;   
            6.   
            7. import javax.ejb.EJBHome;   
            8.   
            9.   
            10. public interface HelloHome extends EJBHome {   
            11.   
            12.     public Hello create()throws CreateException,RemoteException;   
            13.   
            14. }  


            hello.java(就是Remote.java  遠(yuǎn)程接口)
            Java代碼 復(fù)制代碼
            1. package hello;   
            2. import java.rmi.RemoteException;   
            3. import javax.ejb.EJBObject;   
            4.   
            5. public interface Hello extends EJBObject {   
            6.   
            7.     public String sayHello()throws RemoteException;   
            8.   
            9. }  


            helloBean.java(就是Bean.java 實(shí)現(xiàn)類)
            Java代碼 復(fù)制代碼
            1. package hello;   
            2. import java.rmi.RemoteException;   
            3.   
            4. import javax.ejb.EJBException;   
            5.   
            6. import javax.ejb.CreateException;   
            7.   
            8. import javax.ejb.SessionBean;   
            9.   
            10. import javax.ejb.SessionContext;   
            11.   
            12. public class HelloBean implements SessionBean {   
            13.   
            14.     private SessionContext ctx;   
            15.   
            16.     private String words ;   
            17.   
            18.     public String sayHello(){   
            19.   
            20.         System.out.println("i am in an EJB server."+words);   
            21.   
            22.         return words;   
            23.   
            24.     }   
            25.   
            26.     public void ejbCreate() throws CreateException{   
            27.   
            28.         this.words = "hello world";   
            29.     }   
            30.     public void ejbActivate() throws EJBException, RemoteException {   
            31.   
            32.         // TODO Auto-generated method stub   
            33.     }   
            34.   
            35.     public void ejbPassivate() throws EJBException, RemoteException {   
            36.   
            37.         // TODO Auto-generated method stub   
            38.     }   
            39.   
            40.     public void ejbRemove() throws EJBException, RemoteException {   
            41.   
            42.         // TODO Auto-generated method stub   
            43.     }   
            44.   
            45.   
            46.   
            47.     public void setSessionContext(SessionContext arg0) throws EJBException,   
            48.   
            49.             RemoteException {   
            50.         this.ctx = arg0;   
            51.     }   
            52. }  


            還有一個配置文件ejb-jar.xml
            Xml代碼 復(fù)制代碼
            1. <?xml version="1.0" encoding="UTF-8"?>  
            2.   
            3. <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">  
            4.   
            5. <ejb-jar>  
            6.   
            7.     <display-name>HelloEjb</display-name>  
            8.   
            9.     <enterprise-beans>  
            10.   
            11.         <session>  
            12.   
            13.             <ejb-name>FirstEJB</ejb-name>  
            14.   
            15.             <home>hello.HelloHome</home>  
            16.   
            17.             <remote>hello.Hello</remote>  
            18.   
            19.             <ejb-class>hello.HelloBean</ejb-class>  
            20.   
            21.             <session-type>Stateless</session-type>  
            22.   
            23.             <transaction-type>Container</transaction-type>  
            24.   
            25.         </session>  
            26.   
            27.     </enterprise-beans>  
            28.   
            29.     <assembly-descriptor>  
            30.   
            31.         <container-transaction>  
            32.   
            33.             <method>  
            34.   
            35.                 <ejb-name>FirstEJB</ejb-name>  
            36.   
            37.                 <method-intf>Remote</method-intf>  
            38.   
            39.                 <method-name>*</method-name>  
            40.   
            41.             </method>  
            42.   
            43.             <trans-attribute>Required</trans-attribute>  
            44.   
            45.         </container-transaction>  
            46.   
            47.     </assembly-descriptor>  
            48.   
            49. </ejb-jar>  

            最后還想說一下對EJB的調(diào)用的集中方式,主要有三種:
            1、用property幫助設(shè)置環(huán)境
            Java代碼 復(fù)制代碼
            1. Properties properties = System.getProperties();   
            2.                
            3.             properties.put(Context.PROVIDER_URL, "iiop://localhost:2809");   
            4.             properties.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");   
            5.             Context ctx = new InitialContext(properties);  

            2、用Hashtable幫助設(shè)置環(huán)境
            Java代碼 復(fù)制代碼
            1. Hashtable environment = new Hashtable();   
            2.   
            3.             environment.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");   
            4.   
            5.             environment.put(Context.PROVIDER_URL, "iiop://localhost:2809");  //可選,同“corbaloc:iiop:localhost:2809”的效果一樣。   
            6.   
            7.             Context ctx= new InitialContext(environment);  

            3、WAS默認(rèn)的方法
            Java代碼 復(fù)制代碼
            1. Context ctx = new InitialContext();   
            2.         Object ref = ctx.lookup("ejb/TestEJB");   
            3.         TestEJBHome home = (TestEJBHome) PortableRemoteObject.narrow(ref,   TestEJBHome.class);   
            4.            
            5.         testinst = home.create();   
            6.         arg1.getWriter().println(testinst.testEJB());   
            7.         System.out.println(testinst.testEJB());  
            posted on 2010-01-14 17:00 醒目西西 閱讀(1741) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产成人久久AV免费| 日韩电影久久久被窝网| 久久精品国内一区二区三区| 精品国产青草久久久久福利| 国色天香久久久久久久小说| 99久久99久久| 少妇人妻综合久久中文字幕| 久久噜噜电影你懂的| 精品久久久久久久久免费影院 | 亚洲精品无码久久久| 久久精品国产亚洲AV香蕉| 久久久久亚洲AV成人网人人网站| 久久精品a亚洲国产v高清不卡| 午夜精品久久久久成人| 9191精品国产免费久久| 精品久久久久久久无码| 精品久久久久久久久免费影院| 国内精品久久久久久久久| 99久久成人国产精品免费 | 久久精品国产亚洲Aⅴ蜜臀色欲| 99999久久久久久亚洲| 久久WWW免费人成一看片| 欧洲国产伦久久久久久久| 成人亚洲欧美久久久久 | 国产69精品久久久久APP下载 | 久久综合久久鬼色| 久久精品成人一区二区三区| 久久夜色tv网站| 嫩草影院久久国产精品| 久久综合九色综合精品| 久久九九全国免费| 香蕉久久夜色精品国产小说| 欧美久久综合性欧美| 国产成人香蕉久久久久| 99久久精品无码一区二区毛片| 久久美女人爽女人爽| 国产精品99久久不卡| 久久久久久国产a免费观看不卡| 久久久久久国产精品无码下载| 久久人人爽人爽人人爽av | 欧美精品一本久久男人的天堂|