<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0,  comments - 6,  trackbacks - 0
      圖改日加上,公司上網(wǎng)速度讓人哪個(gè)漢阿

    數(shù)據(jù)庫(kù)表用的是oracle的scott示范帳號(hào)下dept
    創(chuàng)建一個(gè)EJB工程

    1.        File > New > Project.

    或在Package Explorer 中點(diǎn)右鍵,單擊new,選擇Project

    ctrl+new 選擇 EJB Project

    2.        選擇J2EE目錄下 EJB Project

    3.        選擇 Next >.

    輸入工程名稱,如dept ,單擊finish完成。

    2    創(chuàng)建一個(gè)CMP EJB2 Entity Bean

    1.        主界面選擇菜單File > New > Other,打開(kāi)新建向?qū)А?/span>

    或在Package Explorer 中點(diǎn)右鍵,單擊new,選擇Other

    ctrl+new 選擇 MyEclipse > ejb>EJB2 Entity Bean

    2.        展開(kāi)MyEclipse > ejb 文件夾,選擇> EJB2 Entity Bean

    3.        選擇Next>,界面如下。這里要注意,package建議用.ejb后綴,因?yàn)?/span>XDoclet工具默認(rèn)ejb bean所在的文件夾以.ejb后綴,接口文件的文件夾以.interface為后綴,為了避免設(shè)置上的麻煩,建議按默認(rèn)情況取名。當(dāng)然你也可以通過(guò)設(shè)置XDoclet屬性改變,詳情請(qǐng)查看幫助文檔。

    4.             輸入package : com.entity.cmp.ejb

    5.             輸入ejb name: dept

    6.             選擇是容器管理事務(wù)(CMP)還是bean自己管理事務(wù)(BMP),這里選擇CMP 2.x

    7.             選擇是遠(yuǎn)程(remote)還是本地(local),還是兩者皆是(both),這里選擇遠(yuǎn)程。

    8.             選擇Finish 完成操作,生成Dept.java:

    9.             添加自己的代碼:

    第一步 添加實(shí)體bean與數(shù)據(jù)庫(kù)表映射字段的讀寫(xiě)方法

        /**

           *@ejb.interface-methodview-type   ="remote"

           *@ejb.persistence      column-name="deptNo"

           */

        publicabstract Integer getDeptNo();

         /**

           *@ejb.interface-methodview-type   ="remote"

           */

        publicabstractvoid setDeptNo(Integer deptno);

       

         /**

           *@ejb.interface-methodview-type   ="remote"

           *@ejb.persistence      column-name="dName"

           */

        publicabstract String getDName();

         

         /**

           *@ejb.interface-methodview-type   ="remote"

           */

        publicabstractvoid setDName(String name);

       

         /**

           *@ejb.interface-methodview-type   ="remote"

           *@ejb.persistence      column-name="loc"

           */

        publicabstract String getLoc();

         /**

           *@ejb.interface-methodview-type   ="remote"

           */

        publicabstractvoid setLoc(String loc) ;

    注解1:在每個(gè)方法前加@ejb.interface-methodview-type   ="remote"的作用是在自動(dòng)生成remote接口時(shí)生成相應(yīng)的方法,如:

          public java.lang.Integer getDeptNo( )

          throwsjava.rmi.RemoteException;

          publicvoid setDeptNo( java.lang.Integer deptno )

          throwsjava.rmi.RemoteException;

          你也可以自己手動(dòng)把這些方法加到remote接口里!

    注解2:在某個(gè)方法前加@ejb.persistence      column-name="loc"的作用是在自動(dòng)生成weblogic-cmp-rdbms-jar.xmlejb-jar.xml兩個(gè)部署文件時(shí)生成如下紅色代碼部分,你也可以自己手寫(xiě)紅色代碼部分。

    <weblogic-rdbms-jar>

       <weblogic-rdbms-bean>

          <ejb-name>Dept</ejb-name>

          <data-source-name></data-source-name>

          <table-name>Dept</table-name>

          <field-map> <!--bean屬性和數(shù)據(jù)庫(kù)列的映射-->

    <cmp-field>deptNo</cmp-field>

             <dbms-column>deptNo</dbms-column>

          </field-map>

          <field-map>

             <cmp-field>dName</cmp-field>

             <dbms-column>dName</dbms-column>

          </field-map>

          <field-map>

             <cmp-field>loc</cmp-field>

             <dbms-column>loc</dbms-column>

          </field-map>

       </weblogic-rdbms-bean>

    <weblogic-rdbms-jar>

    <ejb-jar >

       <enterprise-beans>

          <entity >

             <description><![CDATA[Description for Dept]]></description>

             <display-name>Name for Dept</display-name>

             <ejb-name>Dept</ejb-name>

             <home>com.entity.cmp.interfaces.DeptHome</home>

             <remote>com.entity.cmp.interfaces.Dept</remote>

             <ejb-class>com.entity.cmp.ejb.Dept</ejb-class>

             <persistence-type>Container</persistence-type>

             <prim-key-class>com.entity.cmp.interfaces.DeptPK

    </prim-key-class>

             <reentrant>False</reentrant>

             <cmp-version>2.x</cmp-version>

             <abstract-schema-name>Dept</abstract-schema-name>

             <!--bean屬性定義,上面<cmp-field>和這里的<field-name>應(yīng)一致-->

             <cmp-field >

    <description><![CDATA[]]></description>

                <field-name>deptNo</field-name>

             </cmp-field>

             <cmp-field >

                <description><![CDATA[]]></description>

                <field-name>dName</field-name>

             </cmp-field>

             <cmp-field >

                <description><![CDATA[]]></description>

                <field-name>loc</field-name>

             </cmp-field>

          </entity>

    </ejb-jar >

    </enterprise-beans>

    第二步添加自己的 ejbCreate

    /**

         *用于實(shí)現(xiàn)數(shù)據(jù)持久化(插入數(shù)據(jù)庫(kù))

         * @ejb.create-method

        **/

       public Integer ejbCreate(Integer deptid,String deptName,String deptLoc )

    {

           setDeptNo(deptid);

           setDName(deptName);

           setLoc(deptLoc);

           returnnull;

        }

    第三步添加相應(yīng)的參數(shù)相同的ejbPostCreateejbCreate

        publicvoid ejbPostCreate(Integer deptid,String deptName,String deptLoc ){ }

    3.     XDoclet自動(dòng)生成接口文件、部署描述文件

    3.1.  為工程配置XDoclet

    1.         右鍵單擊工程名字,打開(kāi)工程的properties窗口。

    選擇菜單Properties > MyEclipse > XDoclet

    2.        build選項(xiàng)卡中選擇 Use dynamic build specification jdk1.4.2

    3.        單擊Add Standard,選擇Standard EJB

    4.        單擊Standard EJB,展開(kāi)ejbdoclet樹(shù)菜單,取消dataobjectentitycmpentitypkvalueobject選項(xiàng)如下圖:

    5   為服務(wù)器配置XDoclet,該配置是為了自動(dòng)生成weblogic-ejb-jar.xmlweblogic-cmp-rdbms-jar.xml文件。

    右擊ejbdoclet 選擇 Add

    我這里用的是weblogic8.1,所以選擇weblogic

    l         設(shè)置屬性destDir = src/META-INF (weblogic-ejb-jar.xmlweblogic-cmp-rdbms-jar.xml生成位置)

    l         設(shè)置屬性datasoruce =你在weblogic中配置的數(shù)據(jù)源jndi名稱。

    生成weblogic-cmp-rdbms-jar.xml中的:

    <data-source-name>aptechJNDI</data-source-name>

    5.3.  運(yùn)行XDoclet生成文件

    在工程上右鍵MyEclipse->Run XDoclet

    生成前后工程目錄應(yīng)該類似為:

    同時(shí)增加了weblogic-ejb-jar.xmlweblogic-cmp-rdbms-jar.xml,和ejb-jar.xml三個(gè)部署文件

    生成遠(yuǎn)程接口,home接口和實(shí)用類。

    l         注意:DeptHome.javahome接口前有個(gè)紅色的叉,我們需要修改它,把com.entity.cmp.interfaces.DeptPK改成Integer,因?yàn)槲覀兊?/span>bean的主鍵很簡(jiǎn)單就是deptno,在數(shù)據(jù)庫(kù)中是個(gè)number(2)類型的,所以用Integer就可以了,而不用在定義一個(gè)com.entity.cmp.interfaces.DeptPK

    public com.entity.cmp.interfaces.Dept findByPrimaryKey(com.entity.cmp.interfaces.DeptPK pk)

          throws javax.ejb.FinderException,java.rmi.RemoteException;

    l         修改ejb-jar.xml

    1.       <entity >添加紅色代碼部分,指定某列為主鍵;把<prim-key-class>的值改成java.lang.Integer和主鍵的類型一致。

    <entity >

             <description><![CDATA[Description for Dept]]></description>

             <display-name>Name for Dept</display-name>

             <ejb-name>Dept</ejb-name>

             <home>com.entity.cmp.interfaces.DeptHome</home>

             <remote>com.entity.cmp.interfaces.Dept</remote>

             <ejb-class>com.entity.cmp.ejb.Dept</ejb-class>

             <persistence-type>Container</persistence-type>

             <prim-key-class>java.lang.Integer</prim-key-class>

             <reentrant>False</reentrant>

             <cmp-version>2.x</cmp-version>

             <abstract-schema-name>Dept</abstract-schema-name>

             <cmp-field >

                <description><![CDATA[]]></description>

                <field-name>deptNo</field-name>

             </cmp-field>

             <cmp-field >

                <description><![CDATA[]]></description>

                <field-name>dName</field-name>

             </cmp-field>

             <cmp-field >

                <description><![CDATA[]]></description>

                <field-name>loc</field-name>

             </cmp-field>

             <primkey-field>deptNo</primkey-field>

          </entity>

    2.<assembly-descriptor >中添加紅色部分,配置事務(wù)屬性

    <assembly-descriptor >

    <container-transaction>

          <method>

            <ejb-name>Dept</ejb-name>

            <method-name>*</method-name>

          </method>

          <trans-attribute>Required</trans-attribute>

        </container-transaction>

    </assembly-descriptor >

    5.4.  部署EJB

    1.        MyEclipse >Add and Remove Project Deployments

    2.        點(diǎn)擊add,添加部署服務(wù)器weblogic

    Entity Bean編寫(xiě)到此結(jié)束

    編寫(xiě)客戶端程序

    1.         新建一個(gè)java project

    2.         為工程配置classpath

    l         右鍵單擊該工程名 > build path > configer builder path > add class folder 選擇

    上面創(chuàng)建的ejb工程的classes目錄點(diǎn)擊ok

    右擊上面創(chuàng)建的ejb工程的src目錄選擇export(導(dǎo)出)> 選擇jar file >如下圖單擊select the export destination 欄目的browse選擇存儲(chǔ)地址。然后右鍵單擊該工程名 > build path > configer builder path > add external jars 選擇你剛導(dǎo)出的jar文件,加入到classpath

    l         然后右鍵單擊該工程名 > build path > configer builder path > add external jars 選擇D:"Program Files"bea"weblogic81"server"lib"weblogic.jar,加入到java class path

    3.         創(chuàng)建一個(gè)classClient.java

    publicclass Client {

        protected String serverUrl;

        protected String jndiName;

        protected DeptHome home;

        /**

         *構(gòu)造方法:根據(jù)服務(wù)器地址端口和ejb部署的jndiname初始化類域,獲得EJBHome

         *@paramurl

         *@paramjndiName

         *@throwsNamingException

         */

        public Client(String url, String jndiName) throws NamingException {

           this.jndiName = jndiName;

           this.serverUrl = url;

           home = lookupHome();

        }

        /**

         *獲得初始化上下文環(huán)境(javax.naming.Context)實(shí)例從服務(wù)器JNDItree.

         */

        private Context getInitialContext() throws NamingException {

           try {

               // Get an InitialContext

               Hashtable h = new Hashtable();

               h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");

               h.put(Context.PROVIDER_URL, serverUrl);

               returnnew InitialContext(h);

           } catch (NamingException ne) {

               log("我們無(wú)法通過(guò)該地址:"

                      + serverUrl

                      + "獲得一個(gè)到 WebLogic server 的連接!/"

                      + "We were unable to get a connection to the WebLogic server at "

                      + serverUrl);

               log("請(qǐng)確保該服務(wù)器是啟動(dòng)的。/Please make sure that the server is running.");

               throw ne;

           }

        }

        /**

         *通過(guò)JNDI服務(wù)查找beanhome接口,并返回/Lookupthebean'shomeinterfaceusingJNDI.

         */

        private DeptHome lookupHome() throws NamingException {

           Context ctx = getInitialContext();

           try

           {

               Object home = (DeptHome) ctx.lookup(jndiName);

               return (DeptHome) PortableRemoteObject.narrow(home, DeptHome.class);

           } catch (NamingException ne) {

                log("客戶端無(wú)法獲得EJBHome"

                      + "請(qǐng)確保你已經(jīng)用"""+ jndiName+"""這個(gè)JNDI name"

                      + serverUrl

                      + "WebLogic server上部署了此ejb");

                log("The client was unable to lookup the EJBHome. Please make sure " +

                        "that you have deployed the ejb with the JNDI name " +

                        "ejb/DeptHome on the WebLogic server at "+serverUrl);

               throw ne;

           }

        }

       

       

        /**

         *打印日志

         *

         *@params

         */

        privatestaticvoid log(String s) {

           System.out.println(s);

        }

       

       

       

        publicstaticvoid main (String args[])

        {

           log("開(kāi)始客戶端測(cè)試:");

          

           String url = "t3://localhost:7001";

           String jndi = "ejb/Dept"// 來(lái)自weblogic-ejb-jar.xml<jndi-name>ejb/Dept</jndi-name>

           Client client = null;

            // 如果給了main參數(shù)則用main方法的參數(shù)

           if(args.length==1)

           {          

              url = args[0];

           }

          

          

           try

           {

              

               client = new Client(url,jndi);

               DeptHome home = client.home;

               log("獲得DeptHome");

               PortableRemoteObject.narrow(home.create(new Integer(1),"java","zhengzhou"), Dept.class);

               log("成功創(chuàng)建編號(hào)為1的部門(mén)!");

               log("開(kāi)始執(zhí)行home.findByPrimaryKey根據(jù)主鍵(部門(mén)編號(hào))1執(zhí)行部門(mén)查詢!");

               Dept dept;

               dept = (Dept) PortableRemoteObject.narrow(home.findByPrimaryKey(new Integer(1)),Dept.class);

               Integer no = dept.getDeptNo();

               String name = dept.getDName();

               String loc = dept.getLoc();

               log("部門(mén)編號(hào)"t部門(mén)名字"t位置");

               log(no +""t"+name +""t"+loc);

              

               log("game over");

           } catch (NamingException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           } catch (ClassCastException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           } catch (RemoteException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           } catch (CreateException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           } catch (FinderException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           }

          

        }

    posted on 2008-04-08 19:13 whistler 閱讀(2865) 評(píng)論(5)  編輯  收藏


    FeedBack:
    # re: MyEclipse開(kāi)發(fā)EJB之CMP實(shí)體bean[未登錄](méi)
    2008-07-02 17:46 | 張樹(shù)坤
    非常感謝您的這篇文章,最近手頭上有一個(gè)EJB2.0的項(xiàng)目,需要用到,所以一直在找相關(guān)資料,這篇寫(xiě)的相當(dāng)?shù)脑敿?xì),謝謝。
    另外我還想多問(wèn)一句?

    如何在CMP Bean中定義自己想要實(shí)現(xiàn)的業(yè)務(wù)方法呢。
    比如我想查詢所有的記錄SelectAllDept()方法,應(yīng)該怎么寫(xiě)
    是否要定義@ejb.finder
    等。
    期待回復(fù)。

      回復(fù)  更多評(píng)論
      
    # re: MyEclipse開(kāi)發(fā)EJB之CMP實(shí)體bean
    2008-11-27 16:45 | fengda2870
    網(wǎng)上關(guān)于EJB的教程比較少
    找了好久才找到
    非常感謝您的這篇文章
      回復(fù)  更多評(píng)論
      
    # re: MyEclipse開(kāi)發(fā)EJB之CMP實(shí)體bean[未登錄](méi)
    2009-03-29 02:09 | 111
    PortableRemoteObject 從哪來(lái)的

    InitialContext 從哪來(lái)的


    能不能寫(xiě)清楚點(diǎn)。


    不過(guò)還是謝謝了。  回復(fù)  更多評(píng)論
      
    # re: MyEclipse開(kāi)發(fā)EJB之CMP實(shí)體bean
    2009-03-29 12:28 | 222
    開(kāi)始客戶端測(cè)試:
    javax.naming.CommunicationException [Root exception is java.net.ConnectException: t3://localhost:7001: Destination unreachable; nested exception is:
    java.net.ConnectException: Connection refused: connect; No available router to destination]
    at weblogic.jndi.internal.ExceptionTranslator.toNamingException(ExceptionTranslator.java:47)
    at weblogic.jndi.WLInitialContextFactoryDelegate.toNamingException(WLInitialContextFactoryDelegate.java:651)
    at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:320)
    at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:253)
    at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:135)
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.init(Unknown Source)
    at javax.naming.InitialContext.<init>(Unknown Source)
    at Client.getInitialContext(Client.java:38)
    at Client.lookupHome(Client.java:62)
    at Client.<init>(Client.java:29)
    at Client.main(Client.java:110)
    Caused by: java.net.ConnectException: t3://localhost:7001: Destination unreachable; nested exception is:
    java.net.ConnectException: Connection refused: connect; No available router to destination
    at weblogic.rjvm.RJVMFinder.findOrCreate(RJVMFinder.java:200)
    at weblogic.rjvm.ServerURL.findOrCreateRJVM(ServerURL.java:125)
    at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:310)
    ... 10 more


    classpath里面也加了weblogic.jar的路徑

    以上問(wèn)題運(yùn)行之后出現(xiàn)的,請(qǐng)問(wèn)該如何解決。  回復(fù)  更多評(píng)論
      
    # re: MyEclipse開(kāi)發(fā)EJB之CMP實(shí)體bean
    2009-11-10 10:31 | landor
    非常好,照著例子,一步一步的做,再參照
    http://xdoclet.sourceforge.net/xdoclet/tags/ejb-tags.html#@ejb_persistence__0__1_的說(shuō)明,很快做了個(gè)例子,哈哈  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    <2009年11月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    留言簿(2)

    我參與的團(tuán)隊(duì)

    文章檔案(22)

    搜索

    •  

    最新評(píng)論

    主站蜘蛛池模板: 日韩电影免费在线观看| 一级成人a毛片免费播放| 免费成人福利视频| 国产精品免费小视频| 亚洲av鲁丝一区二区三区| 亚洲色成人四虎在线观看| 成人无码a级毛片免费| 美女黄网站人色视频免费国产| 亚洲av无码乱码国产精品| 国产亚洲精品精品精品| 5g影院5g天天爽永久免费影院| 亚洲精品tv久久久久| 亚洲国产精品免费观看| 暖暖免费在线中文日本| 免费人成网站在线播放| 久久久久精品国产亚洲AV无码| 免费在线黄色电影| 无码不卡亚洲成?人片| 亚洲AV成人一区二区三区在线看| 成人性做爰aaa片免费看| 久久精品国产亚洲5555| 福利片免费一区二区三区| 91精品免费久久久久久久久| 亚洲级αV无码毛片久久精品| 在线91精品亚洲网站精品成人| 四虎成人精品一区二区免费网站| 亚洲理论在线观看| 久久不见久久见免费视频7 | 亚洲卡一卡2卡三卡4麻豆| 久久青草91免费观看| 亚洲高清国产拍精品26U| 色www永久免费网站| 久久亚洲高清综合| xvideos永久免费入口| 一本色道久久88亚洲综合| 久久精品亚洲日本波多野结衣 | 久久免费精品视频| 亚洲成人免费在线| 2021在线永久免费视频| 亚洲欧洲春色校园另类小说| 精品免费人成视频app|