• 沒有找到結果。

本專題應用程式層是以模組的機制依照其支援功能之服務元件做切 割,讓整體應用程式在管理上更為簡便,在程式實作期間,也能達到分工合 作的目的,而主程式則提供給模組其本身的基本功能,如主選單項目 (Menubar Item)、工具列按鈕(Toolbar Button)或跳出選單項目(Popup Menu Item)的加入,另外,主程式也提供模組的掛載(load)與卸載(unload) 動作,達到模組管理的便利性及彈性。

因為每個模組中皆定義其本身所擁有的視覺元件、服務元件及其他模組 資源,所以必須利用特定方式將這些資源完整描述,而本專題所使用的方式 是採用類似Java Applet、Java Web Start、WAR、EAR 或類似格式的程式 檔案包裝,以下為一個模組目錄架構及其中必須包含的描述檔清單:

n /classes

這個目錄裡存放的是模組中所有的程式類別檔案,模組載入器在讀 取這個模組目錄或檔案會先將這個目錄設到類別路徑(Class Path) 中以進行類別的載入。

n /meta-inf

這個目錄裡存放的是描述模組資源的描述檔(Module Description File),這個檔案的功能在於記錄此模組中定義的各類資源;若模組 開發者欲新增自有的設定檔則可以將這些檔案存放在此目錄中。

n /meta-inf/module.xml

這個檔案是整個模組最為重要的模組描述檔,其內容主要包含模組 類別路徑、名稱、描述說明、作者、主要版本編號、次要版本編號、

最後修改日期、語言設定及模組資源;另外,這個檔案定義與主程 式間元件新增或刪除的動作,如主選單、工具列按鈕或跳出選單等。

n /meta-inf/lang/lang-*.xml

這個目錄中裡存放的檔案為模組之視覺元件所呈現的文字語系,若 使用者欲進行語言的變更,則僅需要重新讀取指定文字對應檔的內 部,之後對程式進行重新載入,例如英文語系的檔案名稱為 lang-English.xml、繁體中文為 lang-TraditionalChinese.xml、簡 體中文為lang-SimplifiedChinese.xml。

下圖為(1)模組描述檔與(2)文字對應檔的範例:

模組描述檔範例

<?xml version="1.0" encoding="utf-8"?>

<module className="jemi.app.client.module.mail.MailModule">

<name>MailModule</name>

<description>This is a module for MailService</description>

<author>JEMI Development Team</author>

<version>1.0</version>

<language>TraditionalChinese</language>

<modified>2003/4/7 20:00:00 PST</modified>

<menubar>

<menu name="Contact" mnemonic="C">

<menu-item name="MailBox" mnemonic="H"/>

</menu>

</menubar>

<toolbar>

<toolbar-button/>

</toolbar>

<popupmenu>

<menu-item name="MailService" mnemonic="M" trigger="login">

<menu-item name="AudioMail" mnemonic="M" />

<menu-item name="VideoMail" mnemonic="M" />

<menu-item name="BinaryMail" mnemonic="M"/>

<menu-item name="TextMail" mnemonic="M"/>

</menu-item>

</popupmenu>

</module>

主程式開始進行初始化期間會讀取模組目錄中的子目錄或是副檔案 為.jar 的包裝檔並進行每個模組的掛載,若讀取模組描述檔發生格式錯誤或 其他未知情況時,目前處理的模組會發出例外事件告知錯誤的發生及其說 明,下圖為模組載入器在執行期間的流程圖。

文字對應檔範例

<?xml version="1.0" encoding="utf-8"?>

<language>

<name>TraditionalChinese</name>

<description>Language Definition for Traditional-Chinese</description>

<text name="jemi.app.client.main.Menu.MailService" value="多媒體留言(M)"/>

<text name="jemi.app.client.main.MenuItem.MailService.AudioMail" value="語音"/>

<text name="jemi.app.client.main.MenuItem.MailService.VideoMail" value="影像"/>

<text name="jemi.app.client.main.MenuItem.MailService.BinaryMail" value="圖片"/>

<text name="jemi.app.client.main.MenuItem.MailService.TextMail" value="文字"/>

<text name="jemi.app.client.main.MenuItem.Contact.MailBox" value="收件匣"/>

<text name="jemi.app.client.main.MenuItem.Add" value="新增"/>

<text name="jemi.app.client.main.MenuItem.Delete" value="刪除"/>

<text name="jemi.app.client.main.MenuItem.Forward" value="轉送"/>

<text name="jemi.app.client.main.MenuItem.Reply" value="回覆"/>

<text name="jemi.app.client.main.MenuItem.Play" value="播放"/>

</language>

取得模組清單

模組除了支援對主程式視覺元件的建立與摧毀,另外,對於其他類型的 檔案皆以模組資源(Module Resource)表示,模組發展者可以利用此物件將 特定設定檔或視覺元件所須的圖示檔進行讀取,以避免模組在無法確定特定

ModuleResource

getModule() : Module getName() : String getType() : String getPath() : String getResourceSize() : int

getResourceAsStream() : InputStream getResourceAsBytes() : byte[]

Module

下圖為模組物件之UML 示意圖:

Module

getModules() : Module[]

getMain() : Main getName() : String setName() : void getDescription() : String setDescription() : void getAuthor() : String setAuthor() : void getMajorVersion() : int setMajorVersion() : void getMinorVersion() : int setMinorVersion() : void getModified() : Date setModified() : void getLanguage() : String setLanguage() : void getText() : String addText() : void removeText() : void

getResourceNames() : String[]

hasResource() : boolean getResource() : ModuleResource load() : void

unload() : void

ModuleLoader

4.4 視訊會議系統

相關文件