隨筆-46  評論-64  文章-2  trackbacks-0
           

          ???????? 最近準備畢業(yè)設計的開題報告,原來設想手機控制端使用J2ME,但是mentor給我思路說可以考慮使用OSGI,一番開導,完全打亂了我原來的想法,思路當然也開闊不少,我決定研究一下OSGI的可行性。

          ???????? 先介紹一下OSGI,如很多人一樣,對OSGI這個名詞的了解關注適于Eclipse,常見的解釋“OSGi 聯(lián)盟建立于 1999 年,是一個非贏利機構,旨在建立一個開放的服務規(guī)范。OSGi 規(guī)范為網(wǎng)絡服務定義了一個標準的、面向組件的計算環(huán)境,它最初的目的就是為各種嵌入式設備提供通用的軟件運行平臺,屏蔽設備操作系統(tǒng)與硬件區(qū)別的中間件平臺,通過這個平臺,可以對不同軟件商提供的應用(OSGi 中稱為 Bundle)進行組件的生命周期管理的能力,如應用組件可以從運行中被安裝、升級或者移除而不需要中斷設備的操作,應用組件可以動態(tài)的發(fā)現(xiàn)和使用其他庫或者應用程序。由于 OSGi 技術具有服務組件模塊化、動態(tài)加載應用等優(yōu)點,正被越來越多的領域關注,如嵌入設備制造業(yè)、汽車制造業(yè)、企業(yè)應用等。目前,OSGi 聯(lián)盟發(fā)布的最新的 OSGi 服務規(guī)范為 4.0。

          ?????????? 看了OSGI的WhitePaper說OSGI應用于多種領域,見下圖osgi areas.PNG
          ??????? 我就想在我的Nokia6670手機里使用OSGI,照理來講肯定是可以搞定的,因為WhitePaper說了不少嘛,但是目前對OSGI的了解僅限于使用Eclipse開發(fā)幾個Bundle的簡單協(xié)作,自己想想直接把這個部署到手機里貌似不太可能,然后又Google的N多資料,終于發(fā)現(xiàn)一個CLDC設備上OSGI的實現(xiàn),來自ProSystmBedded Server CLDC Edition,貌似有個評估版可以下載,我發(fā)現(xiàn)可以在我的Nokia機器上使用OSGI framework的希望了。還有Google到的信息是Knopflerfish的一個OSGI platform實現(xiàn)貌似是可以在SonyEricsson P900機器上跑起來了的。
          ??????? 郁悶的臺灣南海的地震把什么海底光纜搞掛了,這幾天國外網(wǎng)站都上不了,osgi,Knopflerfish,ProSyst都上不去,所以不能獲取進一步深入學習資料,網(wǎng)頁都打不開非常郁悶啊!

          ????????不知道有沒有人部署過這樣的OSGI在手機里的應用,總覺得這個OSGI的WhitePaper說的都是抽象層面上的,我想學習的是怎么樣把這個用起來。說OSGI規(guī)范化***,但是不知道如何用起來啊。。。希望有研究OSGI的人和我交流交流。

          ?????? osgi architecture.PNG


          ???????? J2ME + WebService是個簡單的架構,J2ME開發(fā)手機上的Application,WebService提供手機和Server的信息交互。考慮過用.NET實現(xiàn)WebService,J2ME調用。這個系統(tǒng)結構相對容易被更多人了解且容易實現(xiàn)。

          ???????? 兩種實現(xiàn),相對來說更想嘗試OSGI,但是OSGI卻相對來說陌生一點,現(xiàn)在很多關于OSGI的資料也訪問不了,矛盾啊。。。

          posted @ 2006-12-29 22:47 jht 閱讀(1056) | 評論 (3)編輯 收藏

          ?????????到公司實習近五個月了,主要從事C++開發(fā),困擾于復雜的專家系統(tǒng)的陳舊代碼,不能說代碼寫的不好,肯定比我寫出來的C++代碼好,但是卻很難讓人讀懂,邏輯復雜,而且又缺乏Code的維護,文檔也沒有,所有系統(tǒng)特性完全由前人口傳聲授,搞得很頭大。。。
          ?????????
          ?????????當然也學習到不少東西,比如如何分析復雜的代碼,經(jīng)歷種種挫敗打擊之后,我總結出如下規(guī)律,面對一個復雜的系統(tǒng),你完全不知道它是干什么的,首先從大的角度把握系統(tǒng)的業(yè)務特性,主要完成后哪些操作,企業(yè)級別應用不外乎數(shù)據(jù)庫的CRUD,非要區(qū)分出不同之處個人認為就是各種應用如何把著簡單的四種操作弄得更復雜啦!具體方法無非轉圈再轉圈!

          ?????????然后拆解出系統(tǒng)層次架構的模型,在紙上畫出層次實現(xiàn)框圖有助于快速把握系統(tǒng)的層次模型。

          ?????????分解出層次模型之后的下一步就是關注BusinessLogic層東西,如何系統(tǒng)層析模型不好,例如BL和DAO混雜,首先要做的是想辦法如何重構這樣的模型,因為不重構這樣的系統(tǒng)很快你就會感覺這個項目沒有盡頭了,在痛苦中煎熬啊。在寫Code之前,一定要理解BL的東西,Code誰都會寫,但是要高效完成Coding工作,理解你要寫什么是前提,我自己在這個方面吃虧不少,寫出來Code,自己也不知道是干什么的,項目結束了,現(xiàn)在強烈鄙視自己了

          ?????????
          ?????????重新開始BLOG生涯了,原因:鞏固自己學習到的知識,并且將自己學習的體會于大家分享,也許我的些許經(jīng)驗能給迷茫當中的人帶來幫助,不吝嗇自己的只言片語,哪怕是不夠成熟的。另一方面,表達出自己的理解和思想,或許會獲得大家不同的評價,你有一個思想我有一個思想,交換,我們就有兩個思想了!當然,自己錯誤的理解馬上能得到大家的糾正,這對自己知識的構建是非常好有幫助的!

          ?????????下一階段學習計劃 Spring,Hibernate,有空也玩玩AJAX

          ?????????

          posted @ 2006-12-16 20:34 jht 閱讀(278) | 評論 (0)編輯 收藏
                這篇文章在網(wǎng)上已經(jīng)被轉了無數(shù)次了,轉貼負責的有圖,不負責的圖也丟了……  
                再轉一次吧,我想也不為多,全當成自己的學習資料收集了
               
                以下內容轉貼,因為轉爛了,所以作者已經(jīng)不詳了……

          最近我作了數(shù)據(jù)庫JSP的頻繁連接,在此給出數(shù)據(jù)庫連接池的必要性,對于JSP來說一個很好的J2EE服務器是很必要的,JBOOS,WebLogic都是很好的解決方案。


          一般情況下,在使用開發(fā)基于數(shù)據(jù)庫的WEB程序時,傳統(tǒng)的模式基本是按以下步驟:
            1. 在主程序(如Servlet、Beans)中建立數(shù)據(jù)庫連接。
            2. 進行SQL操作,取出數(shù)據(jù)。
            3. 斷開數(shù)據(jù)庫連接。
            使用這種模式開發(fā),存在很多問題。首先,我們要為每一次WEB請求(例如察看某一篇文章的內容)建立一次數(shù)據(jù)庫連接,對于一次或幾次操作來講,或許你覺察不到系統(tǒng)的開銷,但是,對于WEB程序來講,即使在某一較短的時間段內,其操作請求數(shù)也遠遠不是一兩次,而是數(shù)十上百次(想想全世界的網(wǎng)友都有可能在您的網(wǎng)頁上查找資料),在這種情況下,系統(tǒng)開銷是相當大的。事實上,在一個基于數(shù)據(jù)庫的WEB系統(tǒng)中,建立數(shù)據(jù)庫連接的操作將是系統(tǒng)中代價最大的操作之一。很多時候,可能您的網(wǎng)站速度瓶頸就在于此。
            其次,使用傳統(tǒng)的模式,你必須去管理每一個連接,確保他們能被正確關閉,如果出現(xiàn)程序異常而導致某些連接未能關閉,將導致數(shù)據(jù)庫系統(tǒng)中的內存泄露,最終我們將不得不重啟數(shù)據(jù)庫。
            針對以上問題,我們首先想到可以采用一個全局的Connection對象,創(chuàng)建后就不關閉,以后程序一直使用它,這樣就不存在每次創(chuàng)建、關閉連接的問題了。但是,同一個連接使用次數(shù)過多,將會導致連接的不穩(wěn)定,進而會導致WEB SERVER的頻頻重啟。故而,這種方法也不可取。實際上,我們可以使用連接池技術來解決上述問題。首先,介紹一下連接池技術的基本原理。顧名思義,連接池最基本的思想就是預先建立一些連接放置于內存對象中以備使用:
              
          如圖所示,當程序中需要建立數(shù)據(jù)庫連接時,只須從內存中取一個來用而不用新建。同樣,使用完畢后,只需放回內存即可。而連接的建立、斷開都有連接池自身來管理。同時,我們還可以通過設置連接池的參數(shù)來控制連接池中的連接數(shù)、每個連接的最大使用次數(shù)等等。通過使用連接池,將大大提高程序效率,同時,我們可以通過其自身的管理機制來監(jiān)視數(shù)據(jù)庫連接的數(shù)量、使用情況等。下面我們以一個名為ConnectionPool的連接池為例來看看連接池的實現(xiàn)。先看看ConnectionPool的基本屬性:
            m_ConnectionPoolSize:連接池中連接數(shù)量下限
            m_ConnectionPoolMax:連接池中連接數(shù)量上限
            m_ConnectionUseCount:一個連接的最大使用次數(shù)
            m_ConnectionTimeout:一個連接的最長空閑時間
            m_MaxConnections = -1:同一時間的最大連接數(shù)
            m_timer:定時器
            這些屬性定義了連接池與其中的每個連接的有效狀態(tài)值。連接池的自我管理,實際上就是通過定時的對每個連接的狀態(tài)、連接的數(shù)量進行判斷而進行相應操作。其管理流程如下:

          通過上圖,我們可以定義出ConnectionPool要完成管理所需要的基本接口:
          public class ConnectionPool implements TimerListener{
            public boolean initialize() //連接池初始化
            public void destroy() //連接池的銷毀
            public synchronized java.sql.Connection getConnection() //取一個連接
            public synchronized void close() //關閉一個連接
            private synchronized void removeFromPool() //把一個連接從連接池中刪除
            private synchronized void fillPool() //維護連接池大小
            public synchronized void TimerEvent() //定時器事件處理函數(shù)
          }
            通過這幾個接口,已經(jīng)可以完成連接池的基本管理。在TimeEvent()函數(shù)中完成連接池的狀態(tài)檢驗工作,fillPool()時連接池至少保持最小連接數(shù)。因為我們要保存每一個連接的狀態(tài),所以還需要一個數(shù)據(jù)庫連接對象:
          class ConnectionObject{
            public java.sql.Connection con; public boolean inUse; //是否被使用標志
            public long lastAccess; //最近一次開始使用時間
            public int useCount; //被使用次數(shù)
          }
          加入了ConnectionObject對象后,在ConnectionPool中操作的應該只是ConnectionObject,而其他進程需要的只是ConnectionObject的con屬性,因此我們再加入一個類,作為其他進程獲得與返回連接的接口: CLASS Conn{
            GetConnection(); //從連接池中取出一個有效連接
            CloseConnection(); //返回連接,此時并沒有關閉連接,只是放回了連接池
            DestroyPool(); //銷毀連接池
          }
            最后我們的整個系統(tǒng)總的架構如下:
               
          通過上面的介紹,我們可以看出,連接池技術的關鍵就是其自身的管理機制,以上的管理流程只是本人一點見解,關鍵是想向大家介紹一種思路,在此基礎上,您可以進一步完善連接池技術為您所用。


          posted @ 2006-03-14 14:36 jht 閱讀(302) | 評論 (0)編輯 收藏
          Adapter模式
          使用Adapter模式的目的:把一個類的接口轉換成客戶端需要的接口。
          適用場合:
             當你想使用一個現(xiàn)有類的功能,但是它的接口不能滿足你的需要
             當你想創(chuàng)建一個循環(huán)使用的類,用于使一些沒有相互聯(lián)系的類,或者是未知的將來會引進的類之間協(xié)調合作完成某些功能。也就是說,這些類不必要具備一致的接口
             當你要使用數(shù)個現(xiàn)有的的子類,但是要對每一個子類進行接口的改寫變得很不切實際。
           
          具體的例子
             變壓器(Adapter),變壓器把一種電壓變換成另一種電壓。美國的生活用電電壓是110V,而中國的電壓是220V。如果要在中國使用美國電器,就必須有一個能把220V電壓轉換成110V電壓的變壓器。這個變壓器就是一個Adapter。
           
          客戶買回了美國的電器Machine,工作電壓110V,電器插頭為3相(陰、陽、地級),所以需要一個電壓和相級的轉換器或者說是適配器來使這個Machine能在中國使用。
          一、類的Adapter模式
          package Adapter;

          interface 電器需要使用
          {
              
          public void 兩相插口();
              
          public void 電壓_110V();
          }


          class 中國_供電
          {
              
          protected int v;
              
          public 中國_供電()
              
          {
                  v
          =220;
                  System.out.println(
          "中國供電提供的電壓是:" +v+"V");
              }

              
          //返回中國電壓的值
              public int voltage()
              
          {
                  
          return v;
              }

          }

          class 變壓器_相位轉換器 extends 中國_供電 implements 電器需要使用 
          {

              
          public void 兩相插口() {
                  System.out.println(
          "變壓器_相位轉換器——提供三相到兩相轉換操作,返回兩相插口");
                  
              }


              
          public void 電壓_110V() {
                  v 
          = this.voltage()/2;
                  System.out.println(
          "變壓器_相位轉換器——轉換后提供電壓為:"+v+"V");
              }

              
          }


          public class ClassAdapter {

              
          public static void main(String[] args) {
                  變壓器_相位轉換器 device 
          = new 變壓器_相位轉換器();
                  
                  device.電壓_110V();
                  device.兩相插口();
                  
                  System.out.println(
          "經(jīng)過變壓器_相位轉換器的包裝(Warpper),在美國買來的電器能夠使用啦!^0^");

              }


          }


          二、對象的Adapter模式
          package Adapter;

          interface 電器需要使用_a
          {
              
          public void 兩相插口();
              
          public void 電壓_110V();
          }


          class 中國_供電_a
          {
              
          protected int v;
              
          public 中國_供電_a()
              
          {
                  v
          =220;
                  System.out.println(
          "中國供電提供的電壓是:" +v+"V");
              }

              
          //返回中國電壓的值
              public int voltage()
              
          {
                  
          return v;
              }

          }

          class 變壓器_相位轉換器_a implements 電器需要使用_a 
          {
              中國_供電_a supply 
          = new 中國_供電_a();

              
          public void 兩相插口() {
                  System.out.println(
          "變壓器_相位轉換器——提供三相到兩相轉換操作,返回兩相插口");
                  
              }


              
          public void 電壓_110V() {
                  supply.v 
          = supply.voltage()/2;
                  System.out.println(
          "變壓器_相位轉換器——轉換后提供電壓為:"+supply.v+"V");
              }

              
          }


          public class ObjectAdapter {

              
              
          public static void main(String[] args) {
                  變壓器_相位轉換器_a device 
          = new 變壓器_相位轉換器_a();
                  
                  device.電壓_110V();
                  device.兩相插口();
                  
                  System.out.println(
          "經(jīng)過變壓器_相位轉換器的包裝(Warpper),在美國買來的電器能夠使用啦!^0^");

              }


          }


          posted @ 2006-02-24 21:13 jht 閱讀(1012) | 評論 (0)編輯 收藏

          設計模式學習(一) 工廠模式之簡單工廠

          Creational Pattern:

          *creates objects for you rather than having you instantiate objects directly

          *gives your program more flexibility in deciding which objects need to be created for a given case

           

          工廠模式有以下三種形態(tài):

          簡單工廠(Simple Factory)模式:又稱靜態(tài)工廠方法(Static Factory Method)模式

          工廠方法(Factory Method)模式:又稱多態(tài)性工廠(Polymorphic Factory)模式

          抽象工廠(Abstract Factory)模式:又稱工具箱(Kit Toolkit)模式

           

          簡單工廠模式其實是普通工廠模式的一個特例,今天就從這里開始吧。

          其結構可以簡單地表示如下:


          SimpleFactory.jpg沒用
          Visio畫,大家見諒呀


              我們從一個實際的例子來看這個簡單工廠模式

          假設一個農場,專門向市場銷售各種水果,假設只提供良種的水果,蘋果和葡萄,我們?yōu)樗O計一個抽象類Fruit,所有水果都必須實現(xiàn)這個接口

          package simple_Factory;
          //水果抽象出來的接口
          public interface Fruit {
              
          void grow();
              
          void harvest();
          }


          public class Apple implements Fruit {

              
          private int treeAge;

              
          public void grow() {
                  log(
          "Apple is glowing");
                  
              }


              
          private void log(String string) {
                  System.out.println(string);        
              }


              
          public void harvest() {
                  log(
          "Apple has been harvested.");
              }

              
              
          public int getTreeAge() {
                  
          return treeAge;
              }


              
          public void setTreeAge(int treeAge) {
                  
          this.treeAge = treeAge;
              }


          }


          public class Grape implements Fruit {

              
          private boolean seedless;
              
          public void grow() {
                  log(
          "Grape is growing------");
              }


              
              
          public void harvest() {
                  log(
          "Grape has been harvested.");
              }

              
          private void log(String string) {
                  System.out.println(string);        
              }


              
          public boolean isSeedless() {
                  
          return seedless;
              }


              
          public void setSeedless(boolean seedless) {
                  
          this.seedless = seedless;
              }


          }


          public class OtherFruits implements Fruit {

              
          public void grow() {        
              }


              
          public void harvest() {        
              }


          }

           

          FruitFactory類,水果加工廠,根據(jù)需要(不同參數(shù)代表不同的水果需求)給市場供給水果。

           

          package simple_Factory;

          //水果加工廠,根據(jù)需要給市場供給水果
          public class FruitFactory {
              
          public static Fruit supplyFruit(String need)
              
          {
                  
          if(need.equalsIgnoreCase("apple"))
                      
          return new Apple();
                  
          else if(need.equalsIgnoreCase("grape"))
                      
          return new Grape();
                  
          else
                      
          return new OtherFruits();        
              }

          }

          測試方法:
          package simple_Factory;

          public class Test {

              
          /**
               * 
          @param args
               
          */

              
          public static void main(String[] args) {
                  Fruit a 
          = FruitFactory.supplyFruit("apple");
                  Fruit b 
          = FruitFactory.supplyFruit("Grape");
                  Fruit c 
          = FruitFactory.supplyFruit("others");
                  
                  a.grow();a.harvest();
                  b.grow();b.harvest();
                  c.grow();c.harvest();
              }

          }


              自己弄懂和講給別人懂還是有很大差距的,第一篇文章雖然寫好了,但是感覺不夠好,不知道能不能給初學者一點點幫助呢……

              自強不息,繼續(xù)努力!
          posted @ 2006-02-21 22:03 jht 閱讀(2193) | 評論 (7)編輯 收藏
          僅列出標題
          共5頁: 上一頁 1 2 3 4 5 
          主站蜘蛛池模板: 武宣县| 同仁县| 阜新市| 高安市| 黄平县| 临海市| 延安市| 邵东县| 荆门市| 静宁县| 乌鲁木齐县| 定日县| 徐水县| 蛟河市| 晋江市| 内乡县| 太康县| 灌云县| 邹平县| 南陵县| 阿巴嘎旗| 昂仁县| 南江县| 金门县| 镇江市| 英超| 阳朔县| 定南县| 杭锦后旗| 开远市| 肇州县| 渭源县| 古丈县| 武威市| 永丰县| 巴南区| 福泉市| 承德县| 法库县| 正蓝旗| 龙井市|