2011年6月14日

          一個SWT應用程序的基本組成部分為顯示界面(Display)、命令界面(Shell,使命令進入并使運行初始化)和窗口部件(Widgets)。Display負責管理事件循環和控制UI線程和其他線程之間的通訊。Shell是應用程序中被操作系統窗口管理器管理的窗口。每個SWT應用程序至少需要一個Display和大于等于1個的Shell實例。


          圖1:從不同的角度看SWT應用程序


            圖1從不同的角度展示了SWT應用程序。左側的圖是一個簡化的UI對象的繼承圖。中間的圖展示了UI對象的容器結構(containment structure)。右側的圖則是創建后的UI外觀。

            如果一個應用程序使用了多個線程,那么每個線程都使用的是Display對象分配給它自己的實例。程序員可以使用靜態方法Display.getCurent()來得到Display對象的當前活動的實例。

            Shell用于在特定的操作系統中表現窗口。Shell可以最大化、最小化或正?;?。Shell有兩種類型。第1種是高層shell,它是Display的子窗口,同時它也是一個主窗口。第2類是對話shell,這種shell要依賴于其他的shell窗口存在。shell窗口最終成為上述那種類型,要看在創建shell時傳遞給shell構造函數的是什么風格位(style bits)。一個shell的默認值是DialogShell。也就是說,如果不帶參數,那默認就是一個對話shell。而如果給參數賦予了一個Display對象,則該shell將是一個高層shell。

            一些窗口部件的屬性必須在創建它們的初期就要被設置。這些窗口部件的屬性就是前面所說的風格位(style bits)。在SWT的類中,風格位被定義為常數。例如,Button button = new Button( shell, <styleBits> )??梢允褂没颍∣R)操作符“|”來設置多個風格位。例如,如果想設置一個帶邊界的壓下按鈕,需要傳遞SWT.PUSH | SWT.BORDER作為風格位參數。

           

          本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/bnlovebn/archive/2011/06/14/6543693.aspx

          posted @ 2011-06-14 14:33 重歸本壘(Bing) 閱讀(376) | 評論 (0)編輯 收藏
           

          找到AppData\Local\Genuitec\Common\configuration\com.genuitec.pulse2.client.common.provisioning中的文件rmb-2042360.latest.snapshot,在文件rmb-2042360.latest.snapshot中找到你要刪除的插件名。把這行刪除即可。

          posted @ 2011-06-14 11:32 重歸本壘(Bing) 閱讀(3666) | 評論 (1)編輯 收藏

          2011年6月12日

          最近orcale數據只有一臺可以服務,導致hibernate 連接數據庫每個13分鐘就會報“APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks”的錯誤.
          原因是 hibernate 使用c3p0連接orcale數據后不會釋放 , c3p0的最大連接數為100,但顯然c3p0有Bug,導致數據庫連接池不夠用,導致進程鎖死。
          后換Proxool后,觀察正常。

          下面轉引其它網友文章說明c3p0 、 Proxool、 dbcp  的區別
          1<!-- JDBC驅動程序 -->   
          2<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</property> <!-- 數據庫用戶名 -->   
          3<property name="connection.username">root</property> <!-- 數據庫密碼 -->

          上面的一段配置,在c3p0dbcp中,都是必需的,因為hibernate會根據上述的配置來生成connections,再交給c3p0dbcp管理.

          1 C3P0

          只需在hibernate.cfg.xml中加入
          1<property name="c3p0.min_size">5</property>   
          2<property name="c3p0.max_size">30</property>   
          3<property name="c3p0.time_out">1800</property>   
          4<property name="c3p0.max_statement">50</property>   
          5

          還有在classespath中加入c3p0-0.8.4.5.jar


          2 dbcp

          在hibernate.cfg.xml中加入
           1<property name="dbcp.maxActive">100</property>   
           2<property name="dbcp.whenExhaustedAction">1</property>   
           3<property name="dbcp.maxWait">60000</property>   
           4<property name="dbcp.maxIdle">10</property>   
           5   
           6<property name="dbcp.ps.maxActive">100</property>   
           7<property name="dbcp.ps.whenExhaustedAction">1</property>   
           8<property name="dbcp.ps.maxWait">60000</property>   
           9<property name="dbcp.ps.maxIdle">10</property>  
          10

          還有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar.

          3 proxool

          由于數據庫connection在較長時間沒有訪問下會自動斷開連接,導致瀏覽出錯,增加proxool作為數據庫pool。它有自動連接功能。
          1)、從http://proxool.sourceforge...下載proxool,釋放proxool.jar到WEB-INF/lib

          2)、在hibernate.cfg.xml中增加:
          1<property name="hibernate.proxool.pool_alias">dbpool</property>   
          2<property name="hibernate.proxool.xml">proxool.xml</property>   
          3<property name="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>  
          4

          3)、在與hibernate.cfg.xml同級目錄(src根目錄下)增加proxool.xml文件:
           1<?xml version="1.0" encoding="utf-8"?>   
           2<!-- the proxool configuration can be embedded within your own application's.    
           3 Anything outside the "proxool" tag is ignored. -->   
           4<something-else-entirely>   
           5 <proxool>   
           6   <alias>dbpool</alias>   
           7   <!--proxool只能管理由自己產生的連接-->   
           8   <driver-url>   
           9     jdbc:mysql://127.0.0.1:3306/wlsh?characterEncoding=GBK&useUnicode=true&autoReconnect=true     </driver-url>   
          10   <driver-class>com.mysql.jdbc.Driver</driver-class>   
          11   <driver-properties>   
          12       <property name="user" value="root" />   
          13       <property name="password" value="123456" />   
          14   </driver-properties>   
          15   <!-- proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀-->   
          16   <house-keeping-sleep-time>90000</house-keeping-sleep-time>   
          17   <!-- 最少保持的空閑連接數-->   
          18   <prototype-count>5</prototype-count>   
          19   <!-- 允許最大連接數,超過了這個連接,再有請求時,就排在隊列中等候,最大的等待請求數由maximum-new-connections決定-->   
          20   <maximum-connection-count>100</maximum-connection-count>   
          21   <!-- 最小連接數-->   
          22   <minimum-connection-count>10</minimum-connection-count>   
          23 </proxool>   
          24</something-else-entirely>  
          25

          于在hibernate3.0中,已經不再支持dbcp了,hibernate的作者在hibernate.org中,明確指出在實踐中發現dbcp有 BUG,在某些種情會產生很多空連接不能釋放,所以拋棄了對dbcp的支持。至于c3p0,有評論說它的算法不是最優的,因為網上查資料得知:有網友做了一個實驗,在同一項目中分別用了幾個常用的連接池,然后測試其性能,發現c3p0占用資源比較大,效率也不高。所以,基于上述原因,proxool不少行家推薦使用,而且暫時來說,是負面評價是最少的一個。在三星中也有項目是用proxool的。從性能和出錯率來說,proxool稍微比前兩種好些。C3P0,穩定性似乎不錯,在這方面似乎有很好的口碑。至于性能,應該不是最好的,算是中規中矩的類型。
            Proxool的口碑似乎很好,不大見到負面的評價,從官方資料上來看,有許多有用的特性和特點,也是許多人推薦的。
          posted @ 2011-06-12 13:51 重歸本壘(Bing) 閱讀(5269) | 評論 (0)編輯 收藏

          2010年4月12日

          1、was6.1基于j2ee1.4。
          2、was6.1ND版中有Edge Components產品。
          3、was6.1各版本都有一些基本的功能。
          posted @ 2010-04-12 10:41 重歸本壘(Bing) 閱讀(317) | 評論 (0)編輯 收藏

          2008年12月21日

               摘要: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html>     <head>         ...  閱讀全文
          posted @ 2008-12-21 02:56 重歸本壘(Bing) 閱讀(3840) | 評論 (2)編輯 收藏

          2008年9月26日

          <span id="spnTime"></span><script language="javascript">
          var http = new XMLHttpRequest;
          http.open(
          "HEAD""."false);
          http.send(
          null);
          var curDate = new Date;
          var offsetTime = curDate - Date.parse(http.getResponseHeader("Date"));
          setInterval(
          function()
          {
              curDate.setTime(
          new Date - offsetTime);
              document.getElementById(
          "spnTime").innerHTML = curDate.toLocaleString();
          }
          1000);
          </script>
          posted @ 2008-09-26 08:42 重歸本壘(Bing) 閱讀(328) | 評論 (0)編輯 收藏

          2008年9月23日

           

          <!-- 把下列代碼加入到head區內 -->
          <style>




          #tablist a
          {
          text-decoration
          : none;
          padding
          : 2px 0.2em;
          border
          : 1px solid #778;
          background
          : white;
          }


          #tablist  a:link, #tablist  a:visited
          {
          color
          : navy;
          }


          #tablist  a:hover
          {
          color
          : black;
          background
          : lightyellow;
          border-color
          : navy;
          }


          #tablist  a.current
          {
          background
          : lightyellow;
          }

          </style>


          <!-- 把下列代碼加入到body區內 -->
          <label id="tablist">
          <href="http://www.yahoo.com">Yahoo</a>
          <href="http://www.google.com">Google</a>
          <href="http://www.sina.com">退出</a>
          </label>
          posted @ 2008-09-23 11:53 重歸本壘(Bing) 閱讀(251) | 評論 (0)編輯 收藏

          2008年6月13日

          1、源代碼包的安裝    
            gzip   -d   apache_1.3.20.tar.gz   (解壓)    
            tar   xvf   apache_1.3.20.tar   (解包)    
            cd   apache_1.3.20    
            ./configure   (配置)   ----./configure   --help(查看configure選項)    
            make   (編譯)    
            make   install   (安裝)    
            make   clean   (卸載)    
             
            注:典型的源代碼包可以這樣安裝,但不都是這樣,如webmin    
            要執行其目錄下./setup.sh進入交互式配置安裝    
            卸載用uninstall程序    
            具體如果不清楚看要安裝的包下的README文件    
             
            2、RPM包的安裝    
            RPM軟件包的一個例子:    
            foo-1.0-1.i386.rpm    
            其中包括軟件包的名稱(foo),版本號(1.0),發行號(1),和硬件平臺(i386)。    
            (1)安裝    
            #   rpm   -ivh   foo-1.0-1.i386.rpm    
            foo    
            #######################    
            A.   軟件包已被安裝    
            #   rpm   -ivh   foo-1.0-1.i386.rpm    
            foo   package   foo-1.0-1   is   already   installed    
            error:   foo-1.0-1.i386.rpm   cannot   be   installed    
            如果你仍舊要安裝該軟件包,你可以在命令行上使用--replacepkgs   選項,這將忽略該錯誤信息。    
            B.   文件沖突    
            如果要安裝的軟件包中有一個文件已在安裝其它軟件包時安裝,會出現以下錯誤信息:    
            #   rpm   -ivh   foo-1.0-1.i386.rpm    
            foo   /usr/bin/foo   conflicts   with   file   from   bar-1.0-1    
            error:   foo-1.0-1.i386.rpm   cannot   be   installed    
            要想讓RPM   忽略該錯誤信息,   請使用--replacefiles   命令行選項    
            C.未解決依賴關系    
            RPM軟件包可能依賴于其它軟件包,   在安裝了特定的軟件包之后才能安裝該軟件包。    
            #   rpm   -ivh   bar-1.0-1.i386.rpm    
            failed   dependencies:    
            foo   is   needed   by   bar-1.0-1    
            你必須安裝完所依賴的軟件包,才能解決這個問題。如果想強制安裝   (但是,這樣安裝后的軟件包未必能正常運行),請使用-nodeps   命令行選項。    
             
            (2)   卸載    
            #   rpm   -e   foo    
            注意:這里使用軟件包的名字foo,而不是軟件包文件的名字“foo-1.0-1.i386.rpm”.    
            如果其它軟件包依賴于你要卸載的軟件包,卸載時則會產生錯誤信息。如:    
            #   rpm   -e   foo    
            removing   these   packages   would   break   dependencies:    
            foo   is   needed   by   bar-1.0-1    
            要想RPM忽略該錯誤信息繼續卸載的話   (但是,依賴于該軟件包的程序可能無法運行),   請使用-nodeps   命令行選項。    
            (3)升級    
            #   rpm   -Uvh   foo-2.0-1.i386.rpm    
            foo    
            ###############################    
            當使用舊版本的軟件包來升級新版本的軟件時,會產生以下錯誤信息:    
            #   rpm   -Uvh   foo-1.0-1.i386.rpm    
            foo   package   foo-2.0-1   (which   is   newer)   is   already   installed    
            error:   foo-1.0-1.i386.rpm   cannot   be   installed    
            要使RPM   堅持這樣“升級”,可使用--oldpackage   命令行參數。    
            (4)查詢    
            #   rpm   -q   foo    
            foo-2.0-1    
            軟件包指定選項:    
            -a   查詢所有已安裝的軟件包.    
            -f   <file>   將查詢包含有文件<file>的軟件包    
            -p   <packagefile>    
            查詢軟件包文件名為<packagefile>的軟件包    
            信息選擇選項:    
            -i   顯示軟件包信息,如描述,   發行號,   尺寸,   構建日期,   安裝日期,   平臺,   以及其它各類信息。    
            -l   顯示軟件包中的文件列表。    
            -s   顯示軟件包中所有文件的狀態。    
            -d   顯示被標注為文檔的文件列表(man   手冊,   info   手冊,   README's,   etc).    
            -c   顯示被標注為配置文件的文件列表。這些是要在安裝完畢以后加以定制的文件(sendmail.cf,   passwd,   inittab,   etc)。    
            對于那些要顯示文件列表的文件,可以增加-v   命令行選項以獲得如同   ls   -l   格式的輸出。    
            (5)驗證    
            驗證軟件包是通過比較軟件包中安裝的文件和軟件包中的原始文件信息來進行的。除了其它一些東西,驗證主要是比較文件的尺寸,   MD5   校驗碼,   文件權限,   類型,   屬主和用戶組等。    
            rpm   -V命令用來驗證一個軟件包,如    
            rpm   -V   foo    
            驗證包含特定文件的軟件包:    
            rpm   -Vf   /bin/vi    
            驗證所有已安裝的軟件包:    
            rpm   -Va    
            根據一個RPM來驗證某個軟件包:    
            rpm   -Vp   foo-1.0-1.i386.rpm    
            如果你擔心RPM數據庫已被破壞,就可以使用這種方式。如果一切校驗均正常將不會產生任何輸出。如果有不一致的地方,就會顯示出來。    
            輸出格式是8位長字符串,c   用以指配置文件,接著是文件名.   8位字符的每一個用以表示文件與RPM數據庫中一種屬性的比較結果。“.”   (點)表示測試通過。    
            以下字符表示某種測試的失敗:    
            5   MD5   校驗碼    
            S   文件尺寸    
            L   符號連接    
            T   文件修改日期    
            D   設備    
            U   用戶    
            G   用戶組    
            M   模式e   (包括權限和文件類型)    
            如果有信息輸出,應當認真加以考慮,是刪除,重新安裝,還是修正出現的問題。    
            (6)RPM應用的幾個例子    
            A.   如你誤刪了一些文件,   但是不能肯定到底刪除了哪些文件。如果你想驗證一下整個系統看看都丟失了哪些文件的話,可以鍵入:    
            rpm   –Va    
            B.若是一些文件丟失了或已被損壞,   就可以重新安裝或先卸載再安裝該軟件包。如果碰到了一個自己不認識的文件,要想查處它屬于哪個軟件包,可以輸入以下命令:    
            rpm   -qf   /usr/X11R6/bin/xjewel    
            而輸出的結果會是:    
            xjewel-1.6-1    
            C.   如果發生綜合以上兩個例子的情況,如文/usr/bin/paste出了問題。你想驗證一下擁有該文件的軟件包,可又不知道軟件包的名字,這時可以簡單的鍵入:    
            rpm   -Vf   /usr/bin/paste    
            這樣相應的軟件包就會被驗證。    
            D.   如果你想了解一個正在使用的程序的詳細信息,可以鍵入如下命令來獲得擁有該程序的軟件包中的文檔信息:    
            rpm   -qdf   /usr/bin/ispell    
            輸出結果為:    
            /usr/man/man4/ispell.4    
            /usr/man/man4/english.4    
            …………………………………………………………    
             
            E.   如果你發現了一個新的koules   RPM,但是不知道它是什么東西,可以鍵入如下命令:    
            rpm   -qip   koules-1.2-2.i386.rpm    
            F.   現在你想了解koules   RPM   所安裝的文件??梢枣I入:    
            rpm   -qlp   koules-1.2-2.i386.rpm    
            圖形管理工具:kpackage    
             
            3、shell或java腳本安裝    
            基于圖形界面的安裝,一般基于SHELL或Java語言編寫,主要應用于一些辦公軟件和制圖軟件及安裝程序,如staroffice、oracle的安裝,很容易,和windows一樣     
             
          posted @ 2008-06-13 17:47 重歸本壘(Bing) 閱讀(9204) | 評論 (0)編輯 收藏

          2008年6月4日

          Struts2+spring2時應注意action的單實例問題
          注意要設置,action bean 的 scope 的值。因為spring的bean默認為單實例,故一定要設scope的值但不能為singleton。
          posted @ 2008-06-04 15:25 重歸本壘(Bing) 閱讀(708) | 評論 (0)編輯 收藏
           

          如何使用spring的作用域:

          <bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>

          這里的scope就是用來配置spring bean的作用域,它標識bean的作用域。

          在spring2.0之前bean只有2種作用域即:singleton(單例)、non-singleton(也稱prototype), Spring2.0以后,增加了session、request、global session三種專用于Web應用程序上下文的Bean。因此,默認情況下Spring2.0現在有五種類型的Bean。當然,Spring2.0對Bean的類型的設計進行了重構,并設計出靈活的Bean類型支持,理論上可以有無數多種類型的Bean,用戶可以根據自己的需要,增加新的Bean類型,滿足實際應用需求。

          1、singleton作用域

          當一個bean的作用域設置為singleton, 那么Spring IOC容器中只會存在一個共享的bean實例,并且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一實例。換言之,當把一個bean定義設置為singleton作用域時,Spring IOC容器只會創建該bean定義的唯一實例。這個單一實例會被存儲到單例緩存(singleton cache)中,并且所有針對該bean的后續請求和引用都將返回被緩存的對象實例,這里要注意的是singleton作用域和GOF設計模式中的單例是完全不同的,單例設計模式表示一個ClassLoader中只有一個class存在,而這里的singleton則表示一個容器對應一個bean,也就是說當一個bean被標識為singleton時候,spring的IOC容器中只會存在一個該bean。

          配置實例:

          <bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>

          或者

          <bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>

          2、prototype

          prototype作用域部署的bean,每一次請求(將其注入到另一個bean中,或者以程序的方式調用容器的

          getBean()

          方法)都會產生一個新的bean實例,相當與一個new的操作,對于prototype作用域的bean,有一點非常重要,那就是Spring不能對一個prototype bean的整個生命周期負責,容器在初始化、配置、裝飾或者是裝配完一個prototype實例后,將它交給客戶端,隨后就對該prototype實例不聞不問了。不管何種作用域,容器都會調用所有對象的初始化生命周期回調方法,而對prototype而言,任何配置好的析構生命周期回調方法都將不會被調用。清除prototype作用域的對象并釋放任何prototype bean所持有的昂貴資源,都是客戶端代碼的職責。(讓Spring容器釋放被singleton作用域bean占用資源的一種可行方式是,通過使用bean的后置處理器,該處理器持有要被清除的bean的引用。)

          配置實例:

          <bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>

          或者

          <beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/>

          3、request

          request表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP request內有效,配置實例:

          request、session、global session使用的時候首先要在初始化web的web.xml中做如下配置:

          如果你使用的是Servlet 2.4及以上的web容器,那么你僅需要在web應用的XML聲明文件web.xml中增加下述ContextListener即可:

           

           

          <web-app>



          <listener>

          <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>

          </listener>



          </web-app>

          <!--
          ,如果是Servlet2.4以前的web容器,那么你要使用一個javax.servlet.Filter的實現:
          -->
          <web-app>

          ..

          <filter>

             
          <filter-name>requestContextFilter</filter-name> 

              
          <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>

          </filter> 

          <filter-mapping>

              
          <filter-name>requestContextFilter</filter-name> 

              
          <url-pattern>/*</url-pattern>

          </filter-mapping>



          </web-app>

           

          接著既可以配置bean的作用域了:

          <bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>

          4、session

          session作用域表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP session內有效,配置實例:

          配置實例:

          和request配置實例的前提一樣,配置好web啟動文件就可以如下配置:

          <bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/>

          5、global session

          global session作用域類似于標準的HTTP Session作用域,不過它僅僅在基于portlet的web應用中才有意義。Portlet規范定義了全局Session的概念,它被所有構成某個portlet web應用的各種不同的portlet所共享。在global session作用域中定義的bean被限定于全局portlet Session的生命周期范圍內。如果你在web中使用global session作用域來標識bean,那么web會自動當成session類型來使用。

          配置實例:

          和request配置實例的前提一樣,配置好web啟動文件就可以如下配置:

          <bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/>

          6、自定義bean裝配作用域

          在spring2.0中作用域是可以任意擴展的,你可以自定義作用域,甚至你也可以重新定義已有的作用域(但是你不能覆蓋singleton和prototype),spring的作用域由接口org.springframework.beans.factory.config.Scope來定義,自定義自己的作用域只要實現該接口即可,下面給個實例:

          我們建立一個線程的scope,該scope在表示一個線程中有效,代碼如下:

           

          publicclass MyScope implements Scope 

              privatefinal ThreadLocal threadScope 
          = new ThreadLocal() {

                    
          protected Object initialValue() {

                      returnnew HashMap(); 

                    }
           

              }


              
          public Object get(String name, ObjectFactory objectFactory) 

                  Map scope 
          = (Map) threadScope.get(); 

                  Object object 
          = scope.get(name); 

                  
          if(object==null

                    object 
          = objectFactory.getObject(); 

                    scope.put(name, object); 

                  }
           

                  
          return object; 

              }
           

              
          public Object remove(String name) 

                  Map scope 
          = (Map) threadScope.get(); 

                  
          return scope.remove(name); 

              }


              publicvoid registerDestructionCallback(String name, Runnable callback) 


              }


              
          public String getConversationId() {

                 
          // TODO Auto-generated method stub

                 returnnull;

              }
           

                   }

          posted @ 2008-06-04 15:21 重歸本壘(Bing) 閱讀(478) | 評論 (0)編輯 收藏
          僅列出標題  下一頁
           
          Web Page Rank Icon
          主站蜘蛛池模板: 固阳县| 通榆县| 镇远县| 遂宁市| 邵阳市| 新沂市| 诸暨市| 祁阳县| 靖远县| 海淀区| 浑源县| 巴林左旗| 德兴市| 思茅市| 颍上县| 德保县| 惠来县| 伊春市| 府谷县| 蓬溪县| 白城市| 龙陵县| 阳新县| 保亭| 舞钢市| 平山县| 玉林市| 土默特左旗| 炎陵县| 德阳市| 肃北| 东宁县| 龙南县| 玛曲县| 运城市| 安徽省| 乌拉特中旗| 阜南县| 桐庐县| 井研县| 凤阳县|