圖改日加上,,公司上網(wǎng)速度讓人哪個漢阿

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

1.        File > New > Project.

或在Package Explorer 中點右鍵,,單擊new,選擇Project

ctrl+new 選擇 EJB Project

2.        選擇J2EE目錄下 EJB Project

3.        選擇 Next >.

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

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

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

或在Package Explorer 中點右鍵,,單擊new,,選擇Other

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

2.        展開MyEclipse > ejb 文件夾,選擇> EJB2 Entity Bean,。

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

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

5.             輸入ejb name: dept

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

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

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

9.             添加自己的代碼:

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

    /**

       *@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:在每個方法前加@ejb.interface-methodview-type   ="remote"的作用是在自動生成remote接口時生成相應的方法,,如:

      public java.lang.Integer getDeptNo( )

      throwsjava.rmi.RemoteException;

      publicvoid setDeptNo( java.lang.Integer deptno )

      throwsjava.rmi.RemoteException;

      你也可以自己手動把這些方法加到remote接口里,!

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

<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ù)庫列的映射-->

<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>應一致-->

         <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

/**

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

     * @ejb.create-method

    **/

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

{

       setDeptNo(deptid);

       setDName(deptName);

       setLoc(deptLoc);

       returnnull;

    }

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

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

3.     XDoclet自動生成接口文件、部署描述文件

3.1.  為工程配置XDoclet

1.         右鍵單擊工程名字,,打開工程的properties窗口,。

選擇菜單Properties > MyEclipse > XDoclet

2.        build選項卡中選擇 Use dynamic build specification jdk1.4.2

3.        單擊Add Standard,,選擇Standard EJB,。

4.        單擊Standard EJB,展開ejbdoclet樹菜單,,取消dataobjectentitycmp,,entitypkvalueobject選項如下圖:

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

右擊ejbdoclet 選擇 Add

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

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

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

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

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

5.3.  運行XDoclet生成文件

在工程上右鍵MyEclipse->Run XDoclet

生成前后工程目錄應該類似為:

同時增加了weblogic-ejb-jar.xml,,weblogic-cmp-rdbms-jar.xml,和ejb-jar.xml三個部署文件

生成遠程接口,,home接口和實用類,。

l         注意:DeptHome.javahome接口前有個紅色的叉,我們需要修改它,,把com.entity.cmp.interfaces.DeptPK改成Integer,因為我們的bean的主鍵很簡單就是deptno,,在數(shù)據(jù)庫中是個number(2)類型的,所以用Integer就可以了,,而不用在定義一個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 >中添加紅色部分,配置事務屬性

<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.        點擊add,,添加部署服務器weblogic,。

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

編寫客戶端程序

1.         新建一個java project

2.         為工程配置classpath

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

上面創(chuàng)建的ejb工程的classes目錄點擊ok,。

右擊上面創(chuàng)建的ejb工程的src目錄選擇export(導出)> 選擇jar file >如下圖單擊select the export destination 欄目的browse選擇存儲地址,。然后右鍵單擊該工程名 > build path > configer builder path > add external jars 選擇你剛導出的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)建一個classClient.java

publicclass Client {

    protected String serverUrl;

    protected String jndiName;

    protected DeptHome home;

    /**

     *構造方法:根據(jù)服務器地址端口和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)實例從服務器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("我們無法通過該地址:"

                  + serverUrl

                  + "獲得一個到 WebLogic server 的連接!/"

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

                  + serverUrl);

           log("請確保該服務器是啟動的,。/Please make sure that the server is running.");

           throw ne;

       }

    }

    /**

     *通過JNDI服務查找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("客戶端無法獲得EJBHome,。"

                  + "請確保你已經(jīng)用"""+ jndiName+"""這個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("開始客戶端測試:");

      

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

       String jndi = "ejb/Dept"// 來自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)建編號為1的部門!");

           log("開始執(zhí)行home.findByPrimaryKey根據(jù)主鍵(部門編號)1執(zhí)行部門查詢,!");

           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("部門編號"t部門名字"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();

       }

      

    }