亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用Eclipse開發CMP

2019-11-18 11:20:36
字體:
來源:轉載
供稿:網友

內容摘要:

Eclipse作為目前成功的開源IDE之一受眾多java開發人員的喜愛,但是其內部并不直接支持EJB的開發一直為廣大開發人員所詬病,并且大大增加了EJB初學者使用Eclipse開發EJB的難度;JBoss作為目前最為成功的EJB容器,由于文檔的缺乏,初學者往往抓不住要點,對部署和調試時產生的錯誤往往束手無策。本文使用JBoss Group提供的Eclipse插件JBoss-IDE 1.1.0進行CMP開發,希望能夠帶領大家一窺Eclipse下開發EJB的神秘面目。

一.配置篇
1.  Eclipse插件的配置
    首先將下載的JBossIDE文件org.jboss.ide.eclipse_1.1.0.bin.dist.zip直接解壓縮至Eclipse2.1所在目錄下,Eclipse目錄結構如下圖所示:

假如操作正確,將出現“確認文件夾替換窗口”,點擊“全部”即可。等到Eclipse下次啟動時,插件將自動加載。

2.  JBoss3.07的配置

    這里需要對JBoss進行配置的地方有兩處,一處為JBoss的日志信息選項,使得我們今后在部署EJB時能夠得到關于部署的具體信息;另一處為JBoss中的數據源,使得我們可以使用容器持久化治理的EntityBean對數據庫中的數據進行操作。

    (1)首先我們講述日志信息選項的更改,進入JBoss所在目錄下的server/default/conf目錄,找到文件log4j.xml,將其用文本編輯器打開,將屬性作如下修改:

修改一:

  <!-- Limit JBoss categories to INFO

  <category name="org.jboss">

    <PRiority value="INFO"/>

  </category>

  -->

修改為:

  <!-- Limit JBoss categories to INFO -->

  <category name="org.jboss">

    <priority value="INFO"/>

  </category>

修改二:

  <!-- ============================== -->

  <!-- Append messages to the console -->

  <!-- ============================== -->

  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">

    <param name="Threshold" value="INFO"/>

    <param name="Target" value="System.out"/>

修改為:

  <!-- ============================== -->

  <!-- Append messages to the console -->

  <!-- ============================== -->

  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">

    <param name="Threshold" value="DEBUG"/>

    <param name="Target" value="System.out"/>

將這些屬性進行修改之后,當我們部署CMP EntityBean的時候將能看見JBoss針對所部署的CMP EntityBean自動產生的SQL插入語句與CMP EntityBean中包含的EJB-QL語句;并且在EntityBean被使用時發生的SQL查詢語句。

(2)接著我們講述數據源的配置,第一步:我們進入JBoss的文件夾下的docs/examples/jca目錄,用文本編輯器打開MySQL-service.xml,將其中的部分內容作如下修改:

<attribute name="JndiName">MySqlDS(數據源名稱)</attribute>

<attribute name="ManagedConnectionFactoryProperties">

<properties>

        <config-property

name="ConnectionURL" type="java.lang.String">jdbc:mysql://localhost:3306/resultmanager

(數據庫URL)

</config-property>

        <config-property

name="DriverClass" type="java.lang.String">com.mysql.jdbc.Driver

(數據庫驅動程序)

</config-property>

<config-property

name="UserName" type="java.lang.String">DataBase(數據庫用戶)

</config-property>

<config-property

name="PassWord" type="java.lang.String">

sailing(數據庫用戶密碼)

</config-property>

</properties>

</attribute>

將修改好的內容保存后,復制mysql-service.xml文件至JBoss文件夾下server/default/deploy 目錄,此時deploy目錄中的文件如下圖所示:

第二步,我們將含有MySQL JDBC 2.0.14驅動程序的jar文件復制到JBoss安裝目錄的server/default/lib目錄下,此時lib目錄中的文件如下圖所示:

現在我們已經完成了前期的配置工作,接下來我們將講述CMP EntityBean的開發。

二:開發篇

1.  程序介紹:程序中含有兩個EntityBean,分別為StudentBean和ResultBean。StudentBean中包含學生的基本信息:student_ID(學號,主鍵),name(名字);ResultBean中包含學生的成績信息:result_ID(成績的編號,主鍵),catalogname(科目名稱),score(成績得分),student_ID_FK(與StudentBean相關聯的外鍵)。實體關系圖如下:

數據庫建立腳本如下:

#

# Table strUCture for table 'result'

#

CREATE TABLE `result` (

  `result_ID` int(5) unsigned NOT NULL default '0',

  `catalogname` varchar(50) NOT NULL default '0',

  `score` int(5) unsigned NOT NULL default '0',

  `student_ID_FK` int(5) unsigned default '0',

  PRIMARY KEY  (`result_ID`)

) TYPE=MyISAM;

#

# Table structure for table 'student'

#

CREATE TABLE `student` (

  `student_ID` int(5) unsigned NOT NULL default '0',

  `name` varchar(50) NOT NULL default '0',

  PRIMARY KEY  (`student_ID`)

) TYPE=MyISAM;

2.  建立工程:選擇FileàNewàProject…,出現對話框,如圖所示:

選中Java Project,點擊Next按鈕,出現對話框:

在Project name中填入工程名稱ResultManager,下面的對話框為工程文件的存放路徑,選擇默認即可。填寫完畢后點擊Next按鈕,出現下圖:

接著選擇右上偏中的Libraries標簽,如圖:

選擇右方的add External JARs…按鈕,將JBoss目錄中client目錄下的所有jar文件選中,加入到當前工程中:

點擊Finish按鈕,結束工程的建立。

建立完成的工程結構如下圖(文中涉及工程結構的圖均不包含導入工程的JAR文件)

3.  建立StudentBean EntityBean:(1)選擇FileàNewàClass,在彈出的對話框中按照下圖進行填寫:

完成后選擇Finish。Eclipse將為我們自動產生實現接口中方法的默認實現代碼。此時的工程文件夾結構如圖所示:

(2)編寫StudentBean EntityBean:由于XDoclet中的ejb和JBoss標簽有著良好的自解釋性,所以很輕易看出其代表的意思(由于本文主要講述工具的使用方法,所以省去關于CMP原理及XDoclet中包含標簽的介紹)。StudentBean代碼如下所示:

package edu.njut.resultmanager.ejb;

import java.rmi.RemoteException;

import javax.ejb.EJBException;

import javax.ejb.EntityBean;

import javax.ejb.EntityContext;

import javax.ejb.RemoveException;

/**

 * @author sailing

 * @ejb.bean

 *         name = "Student"

 *         display-name = "Student EntityBean"

 *         description = "Student CMP EntityBean"

 *         view-type = "both"

 *         jndi-name = "Student"

 *         local-jndi-name = "StudentLocal"

 *         type = "CMP"

 *         cmp-version = "2.x"

 *         primkey-field = "student_ID"

 *        

 * @ejb.persistence

 *         table-name = "student"

 *

 * @jboss.persistence

 *           datasource = "java:/MySqlDS"

 *           datasource-mapping = "mySQL"

 *

 * @ejb.finder

 *         query = "SELECT OBJECT(o) FROM Student o"

 *         result-type-mapping = "Local"

 *         signature = "java.util.Collection findAll()"

 *

 * @ejb.finder

 *         query = "SELECT DISTINCT OBJECT(o) FROM Student o WHERE o.name=?1"

 *         result-type-mapping = "Local"

 *         signature = "java.util.Collection findByName(java.lang.String name)"

 *

 */

public abstract class StudentBean implements EntityBean {

    private javax.ejb.EntityContext _entityContext;

    //------CMP Fields------

    /**

     * @ejb.persistence

     *         column-name = "student_ID"

     *

     * @ejb.interface-method

     *         view-type = "both"

     * @ejb.pk-field

     */

    public abstract java.lang.Integer getStudent_ID();

    /**

     * set student's ID

     * @param id student's ID

     */

    public abstract void setStudent_ID(java.lang.Integer id);

    /**

     * @ejb.persistence

     *         column-name = "name"

     *

     * @ejb.interface-method

     *         view-type = "both"

     */

    public abstract java.lang.String getName();

    /**

     * set student's name

     * @param name student's name

     */

    public abstract void setName(java.lang.String name);

    //------CMR Fields------

    /**

     * @ejb.relation

     *         name = "student-result"

     *         role-name = "student-has-result"

     *         target-ejb = "Result"

     *         target-multiple = "no"

     *         target-role-name = "result -belong-student"

     *         target-cascade-delete = "yes"

     *       

     * @jboss.target-relation

     *          related-pk-field = "student_ID"

     *          fk-column = "student_ID_FK"

     *          fk-constraint = "yes"

     */

    public abstract java.util.Collection getResults();

    /**

     * @ejb.interface-method

     *         view-type = "both"

     * @param results student's results

     */

    public abstract void setResults(java.util.Collection results);

    //------EJB CreateMethod------

    /**

     * @ejb.create-method

     */

    public java.lang.Integer ejbCreate(java.lang.Integer studentID,

        java.lang.String name) throws javax.ejb.CreateException {

        setStudent_ID(studentID);

        setName(name);

        //EJB 2.0 spec says return null for CMP ejbCreate methods.

        return null;

    }

    public void ejbPostCreate(java.lang.Integer studentID, java.lang.String name) {}

    //-----------EJB callback method-------------

    /* (non-Javadoc)

     * @see javax.ejb.EntityBean#ejbActivate()

     */

    public void ejbActivate() throws EJBException, RemoteException {

    }

    /* (non-Javadoc)

     * @see javax.ejb.EntityBean#ejbLoad()

     */

    public void ejbLoad() throws EJBException, RemoteException {

    }

    /* (non-Javadoc)

     * @see javax.ejb.EntityBean#ejbPassivate()

     */

    public void ejbPassivate() throws EJBException, RemoteException {

    }

    /* (non-Javadoc)

     * @see javax.ejb.EntityBean#ejbRemove()

     */

    public void ejbRemove()

        throws RemoveException, EJBException, RemoteException {

    }

    /* (non-Javadoc)

     * @see javax.ejb.EntityBean#ejbStore()

     */

    public void ejbStore() throws EJBException, RemoteException {

    }

    /* (non-Javadoc)

     * @see javax.ejb.EntityBean#setEntityContext(javax.ejb.EntityContext)

     */

    public void setEntityContext(EntityContext arg0)

        throws EJBException, RemoteException {

    }

    /* (non-Javadoc)

     * @see javax.ejb.EntityBean#unsetEntityContext()

     */

    public void unsetEntityContext() throws EJBException, RemoteException {

    }

}

注重:按照JBoss-IDE說明文檔中所描述,在Java編輯器中按下ctrl+space將出現編寫XDoclet標簽的提示,但在中文版的操作系統中ctrl+space為切換中英文輸入法,這里產生了快捷鍵的沖突。為了解決這個問題,我們必須對Eclipse中的快捷鍵做出修改。方法為:WindowsàPreferencesàWorkbechàKeysàEditàContent Assist,選中Ctrl+Space[conflict],將Key sequence框中的Ctrl+Space改為Ctrl+Alt+Space,這樣你就可以在Java編輯器中通過快捷鍵Ctrl+Alt+Space快速完成標簽的編寫了。修改完成后如下圖所示:

4.  剩余類文件的編寫:由于剩余的類文件的編寫與StudentBean EntityBean大相徑庭,這里便不再列出了,具體的代碼可以在隨文檔的源代碼中找到。當所有文件編寫完成后,工程的目錄結構如下圖:

注重,這里在SequencesessionBean的代碼中出現了錯誤,是由于在SequenceSessionBean中調用了即將由XDoclet自動生成的本地對象(SequenceLocal)和本地主方法(SequenceLocalHome)造成的,當通過XDoclet自動生成了相應Bean文件的各個相關類文件后錯誤就將消失。

5.  使用XDoclet生成部署描述符以及相關類文件:(1)用鼠標右鍵單擊工程名稱,在彈出菜單中選擇Properties選項,如圖:

在彈出的對話框中選擇XDoclet Configurations選項

(2)在Define the XDoclet Configurations… 下方的空白區域中單擊鼠標右鍵,在彈出的菜單中選擇add。

在彈出的對話框中填上EJB(名稱可以隨意填寫)。

(3)在選中剛剛添加的“EJB”前提下,用鼠標右鍵單擊左下方的空白區域,在彈出菜單中選擇Add Doclet選項

在彈出菜單中選擇ejbdoclet,點擊OK。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕精品一区二区精品| 18久久久久久| 国产综合在线视频| 日韩一区二区三区在线播放| 亚洲国产精品国自产拍av秋霞| 综合欧美国产视频二区| 亚洲欧美国产制服动漫| 欧美电影《睫毛膏》| 黄色一区二区在线观看| 国产精品爽爽爽爽爽爽在线观看| 一本一本久久a久久精品牛牛影视| 精品久久久久久久久久久| 久久99精品久久久久久琪琪| 欧美电影《睫毛膏》| 国产精品欧美在线| 成人黄色生活片| 日韩av快播网址| 欧美在线播放视频| 日本成人精品在线| 日韩欧美在线字幕| 亚洲一区二区三区成人在线视频精品| 午夜精品久久久久久99热软件| xxav国产精品美女主播| 久久精品人人爽| 久久久精品国产| 欧美激情亚洲视频| 中文字幕亚洲一区二区三区五十路| 亚洲第一页自拍| 国产精品狼人色视频一区| 欧美性色视频在线| 69影院欧美专区视频| 亚洲最大av网站| 亚洲精品suv精品一区二区| 8x拔播拔播x8国产精品| 色偷偷888欧美精品久久久| 一夜七次郎国产精品亚洲| 日韩av在线不卡| 欧美成人精品一区二区三区| www.亚洲男人天堂| 国产精品aaaa| 成人网页在线免费观看| 日韩av手机在线| 亚洲xxxxx性| 国产69精品99久久久久久宅男| 日韩久久精品电影| 欧美人与物videos| 中文字幕在线观看日韩| 国产欧美精品在线播放| 亚洲人成电影网站色xx| 国产在线精品成人一区二区三区| 久久亚洲电影天堂| 91国产精品视频在线| 日韩高清不卡av| 日韩av在线看| 91免费综合在线| 成人av在线网址| 5278欧美一区二区三区| 日韩激情视频在线播放| 在线视频一区二区| 91在线视频免费| 在线亚洲国产精品网| 亚洲国产91精品在线观看| 福利二区91精品bt7086| 91麻豆国产语对白在线观看| 亚洲精品成人久久久| 欧美精品18videos性欧| 亚洲欧美中文日韩v在线观看| 国产精品极品美女在线观看免费| 最近2019年手机中文字幕| 97精品国产91久久久久久| 精品久久久久久电影| 亚洲欧美另类人妖| 亚洲精品白浆高清久久久久久| 欧美成人激情在线| 日韩精品福利在线| 欧美日韩xxxxx| 日韩视频中文字幕| 久国内精品在线| 日韩亚洲欧美中文高清在线| 亚洲午夜精品久久久久久性色| 久久99久久99精品中文字幕| 91欧美精品成人综合在线观看| 欧美在线观看视频| 这里只有精品视频| 日韩精品免费观看| 亚洲欧美中文日韩v在线观看| 亚洲欧洲av一区二区| 国产97在线|日韩| 欧美专区在线观看| 国内外成人免费激情在线视频| 国产91精品久久久| 亚洲国产日韩一区| 亚洲第一天堂av| 欧美老女人xx| 欧美在线视频播放| 国产伦精品一区二区三区精品视频| 亚洲电影免费观看高清完整版在线观看| 91国产精品电影| 国产精品日日做人人爱| 日韩av有码在线| 亚洲激情视频网站| 国产欧美日韩高清| 日韩高清免费观看| 欧美一级淫片丝袜脚交| 亚洲一区二区三区香蕉| 精品少妇v888av| 亚洲人免费视频| 日韩激情视频在线| 久久久久久亚洲精品不卡| 日本高清视频一区| 久久精品视频一| 亚洲激情在线观看| 久久99国产精品久久久久久久久| 亚洲激情视频在线| 欧美大片网站在线观看| 欧美有码在线观看| 久久男人的天堂| 国产欧美一区二区三区在线看| 国产精品欧美在线| 91伊人影院在线播放| 欧美丰满片xxx777| 亚洲成人久久电影| 97香蕉超级碰碰久久免费的优势| 欧美国产亚洲精品久久久8v| 欧美精品18videosex性欧美| www.久久久久久.com| 国产精品久久久999| 国产精品草莓在线免费观看| 尤物99国产成人精品视频| 国产精品黄页免费高清在线观看| 日日狠狠久久偷偷四色综合免费| 国产999精品久久久| 中文国产亚洲喷潮| 成人黄色免费网站在线观看| 国产成人高潮免费观看精品| 91精品久久久久久久久| 亚洲精品wwwww| 亚洲欧美日韩中文在线| 国产欧美日韩精品专区| 亚洲第一区在线| 69久久夜色精品国产69乱青草| 国产精品一久久香蕉国产线看观看| 日韩美女中文字幕| 亚洲欧美国产另类| 欧美放荡办公室videos4k| 亚洲精品不卡在线| 国产精品久久久久久久久久东京| 国产精品久久久久久久久久ktv| 日韩中文字幕在线免费观看| 国产精品一区久久久| 欧美日韩福利电影| 青青草原成人在线视频| 欧美又大粗又爽又黄大片视频| 欧美在线一级视频| 欧美最猛黑人xxxx黑人猛叫黄| 一个人www欧美| 日韩成人在线视频观看| 久久久久免费精品国产| 中文字幕在线日韩| 久久香蕉国产线看观看网| 国产精品嫩草影院一区二区| 一区二区在线视频播放| 精品呦交小u女在线| 色综合久久中文字幕综合网小说|