<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 167,  comments - 30,  trackbacks - 0
         摘要:   閱讀全文
    posted @ 2017-09-04 16:33 David1228 閱讀(305) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-08-02 11:41 David1228 閱讀(320) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-07-24 19:10 David1228 閱讀(11391) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-07-19 18:10 David1228 閱讀(3433) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-06-06 23:10 David1228 閱讀(292) | 評論 (0)編輯 收藏
    Netty客戶端與服務端通信
    posted @ 2017-06-06 23:09 David1228 閱讀(244) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-05-30 19:26 David1228 閱讀(3283) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2017-05-30 19:25 David1228 閱讀(1254) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2016-12-22 23:01 David1228 閱讀(4616) | 評論 (2)編輯 收藏
         摘要:   閱讀全文
    posted @ 2016-11-04 23:44 David1228 閱讀(2297) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2016-07-28 17:57 David1228 閱讀(401) | 評論 (0)編輯 收藏
         摘要: JVM調優總結 + jstat 分析jstat -gccause pid 1 每格1毫秒輸出結果jstat -gccause pid 2000 每格2秒輸出結果不斷的在屏幕打印出結果  S0     S1     E     &n...  閱讀全文
    posted @ 2016-01-03 23:26 David1228 閱讀(2997) | 評論 (2)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-12-27 16:49 David1228 閱讀(1089) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-10-31 12:37 David1228 閱讀(669) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-10-30 20:20 David1228 閱讀(2879) | 評論 (0)編輯 收藏
    轉載文章:http://www.qixing318.com/article/by-lua-adhesive-nginx-ecological-environment.html
    posted @ 2015-09-08 13:22 David1228 閱讀(512) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-09-08 09:34 David1228| 編輯 收藏
         摘要:   閱讀全文
    posted @ 2015-07-29 13:48 David1228 閱讀(5555) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2014-12-03 23:56 David1228 閱讀(28338) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-11-19 11:48 David1228 閱讀(23742) | 評論 (1)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-11-18 18:01 David1228 閱讀(2901) | 評論 (4)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-10-31 17:32 David1228 閱讀(705) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-10-14 09:50 David1228 閱讀(21753) | 評論 (6)編輯 收藏
    Hibernate不支持left join帶on的條件查詢。
    解決辦法:使用原生SQL或者使用HQL方式需要修改hbm文件(如果項目中大部分不適用級聯配置情況下)
    需求是查詢網絡信息,網絡信息中關聯了分區、網絡IP(1個網絡--N個網絡IP),網橋信息.
    HQL:
    public void queryVnets(Page page) {
            StringBuffer hql = new StringBuffer();
            hql.append("select new Map(vn.id as id, vn.vnName as vnName, b.name as vnType, ");
            hql.append("vn.vnIptype as vnIptype, vn.vnIp as vnIp,vn.vnNat as vnNat, vn.vnFlag as vnFlag, ");
            hql.append("vn.vnetFlag as vnetFlag, (case when sum(vmvn.state)='0' then 0 else 1 endas vnState, ");
            hql.append("vn.useType as useType, vn.createTime as createTime, ");
            hql .append("zone.oneName as oneName, zone.oneHypervisor as oneHypervisor, zone.oneSeq as oneSeq) ");
            hql.append("from VnetTable vn, ZoneTable zone, BridgeTable b ");
            hql.append("left join fetch vn.VnTables vmvn where zone.id = vn.zoneId and vn.vnType = b.id ");

            ... ...
            hql.append(" group by vn.id");
            if (vnState != null && !"".equals(vnState)) {
                if ("0".equals(vnState)) {
                    hql.append(" having sum(vmvn.state)=0");
                } else if ("1".equals(vnState)) {
                    hql.append(" having sum(vmvn.state)!=0");
                }
            }
        }

    hbm配置文件:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.base.mapping.VnetTable" table="vnet_table" >
            <id name="id" type="java.lang.String">
                <column name="ID" length="32" />
                <generator class="uuid.hex" />
            </id>
            <property name="vnId" type="java.lang.Long">
                <column name="VN_ID">
                    <comment>創建虛擬網絡時得到的ID</comment>
                </column>
            </property>
             ...
            <property name="zoneId" type="java.lang.String">
                <column name="ZONE_ID" length="32">
                    <comment>分區ID</comment>
                </column>
            </property>
            <property name="vlanId" type="java.lang.Integer">
                <column name="VLAN_ID">
                    <comment>VLAN_ID</comment>
                </column>
            </property>
            <set name="vnTables" lazy="false" order-by="id asc" inverse="false" fetch="join" cascade="all">
                <key column="VN_NID"/>
                <one-to-many class="com.base.mapping.VnTable"/>
            </set>
        </class>
    </hibernate-mapping>

    理解inverse和cascade,可以參考:http://blog.csdn.net/wkcgy/article/details/6271321
    總結: 
    <one-to-many>中,建議inverse=”true”,由“many”方來進行關聯關系的維護 
    <many-to-many>中,只設置其中一方inverse=”false”,或雙方都不設置 
    Cascade,通常情況下都不會使用。特別是刪除,一定要慎重。
    操作建議 
      一般對many-to-one和many-to-many不設置級聯,這要看業務邏輯的需要;對one-to-one和one-to-many設置級聯。
      many-to-many關聯關系中,一端設置inverse=”false”,另一端設置為inverse=”true”。在one-to-many關聯關系中,設置inverse=”true”,由多端來維護關系表










    posted @ 2013-09-12 11:57 David1228 閱讀(16680) | 評論 (2)編輯 收藏
    -- 以下兩個查詢效率相當,查詢時間均為0.0xx秒,~ 但是Hibernate HQL不支持from后面接子查詢,可以直接使用SQL方式解決,ibatis當然可以用了。
    SELECT count(*from (
    SELECT sum(t2.STATE) as vnSum, t1.ID FROM
    vnetinfo_table t1, vm_vn_table t2 
    where t1.ID = t2.VN_NID and t1.ZONE_ID = '4028a49c3facdf26013fae12531b286e' GROUP BY t1.ID) t where t.vnSum = 0;

    SELECT count(*) FROM vnetinfo_table v ,(
    SELECT sum(t2.STATE) as vnSum, t1.ID as idd FROM
    vnetinfo_table t1, vm_vn_table t2 
    where t1.ID = t2.VN_NID and t1.ZONE_ID = '4028a49c3facdf26013fae12531b286e' GROUP BY t1.ID) t
    where v.ID = t.idd and t.vnSum = 0;

    -- 查詢效率太低了,查詢時間均為0.5xx秒左右。要比以上兩個SQL耗時很多倍。~ Hibernate支持在where后用子查詢作為查詢條件。
    SELECT count(*) FROM vnetinfo_table v WHERE v.id in 
    (SELECT CASE WHEN SUM(t2.STATE)=0 THEN t1.ID ELSE '' END
    FROM vnetinfo_table t1, vm_vn_table t2 
    where t1.ID = t2.VN_NID and t1.ZONE_ID = '4028a49c3facdf26013fae12531b286e' GROUP BY t1.ID);

    -- 使用join方式替換in 查詢時間均為0.09x秒左右。明顯提高了效率,但是Hibernate HQL任然不支持在這種聯合子查詢方式。
    SELECT count(*) FROM vnetinfo_table v INNER JOIN (SELECT CASE WHEN SUM(t2.STATE)=0 THEN t1.ID ELSE '' END as idd
    FROM vnetinfo_table t1, vm_vn_table t2 
    WHERE t1.ID = t2.VN_NID and t1.ZONE_ID = '4028a49c3facdf26013fae12531b286e' GROUP BY t1.ID) t ON v.ID = t.idd and t.idd IS not NULL;

    附:Mysql中關于Exists用法的介紹請參見:http://www.nowamagic.net/librarys/veda/detail/639
    posted @ 2013-08-21 13:47 David1228 閱讀(3757) | 評論 (2)編輯 收藏
    md5sum命令詳解:
    linux下的shell命令 ,制作md5碼 也用于軟件的md5校驗
    MD5算法常常被用來驗證網絡文件傳輸的完整性,防止文件被人篡改。MD5 全稱是報文摘要算法(Message-Digest Algorithm 5),此算法對任意長度的信息逐位進行計算,產生一個二進制長度為128位(十六進制長度就是32位)的“指紋”(或稱“報文摘要”),不同的文件產生相同的報文摘要的可能性是非常非常之小的。
    在linux或Unix上,md5sum是用來計算和校驗文件報文摘要的工具程序。一般來說,安裝了Linux后,就會有md5sum這個工具,直接在命令行終端直接運行。
    1、使用md5sum來產生指紋(報文摘要)命令如下:
    md5sum filename > filename.md5 或者
    md5sum filename >>filename.md5
    也可以把多個文件的報文摘要輸出到一個md5文件中,這要使用通配符*,比如某目錄下有幾個iso文件,要把這幾個iso文件的摘要輸出到iso.md5文件中,命令如下:
    md5sum *.iso > iso.md5
    2、使用md5報文摘要驗證文件,方法有二:
    把下載的文件file和該文件的file.md5報文摘要文件放在同一個目錄下,然后用如下命令進行驗證:
    md5sum -c file.md5
    然后如果驗證成功,則會輸出:正確結果。
    實戰案例:
    需求:虛擬機存在多份備份,當進行備份恢復時,要求檢查源備份壓縮文件的完整性。那么可以通過md5這種方式來驗證。
    壓縮備份文件并生成md5碼,部分shell腳本如下:
    #----------------------------------
    log "Compressing and moving $SRC_PATH"
    exec_and_log "$SSH $SRC_HOST mkdir -p ${SRC_PATH}_compress"
    for file in `$SSH $SRC_HOST ls $SRC_PATH | grep -v $SN_SIGN`
    do
         exec_and_log "$SSH $SRC_HOST cd $SRC_PATH;sudo chmod -R +r $SRC_PATH/*;tar -Sczvf ${SRC_PATH}_compress/${file}.tgz ${file}"
    done
    #----------------------------------

    #--------------md5 begin-----------------
    log "Create backup.md5"
    exec_and_log "$SSH $SRC_HOST $MD5SUM ${SRC_PATH}_compress/*.tgz > ${SRC_PATH}_compress/backup.md5"
    #--------------md5 end-----------------

    #其中 exec_and_log是另一個公共腳本中定義的。shell中可以通過點(.)的方式將腳本引入。該函數內如下:
    # Executes a command, if it fails returns error message and exits
    # If a second parameter is present it is used as the error message when
    # the command fails
    function exec_and_log
    {
        message=$2

        EXEC_LOG_ERR=`$1 2>&1 1>/dev/null`
        EXEC_LOG_RC=$?

        if [ $EXEC_LOG_RC -ne 0 ]; then
            log_error "Command \"$1\" failed: $EXEC_LOG_ERR"

            if [ -n "$2" ]; then
                error_message "$2"
            else
                error_message "Error executing $1: $EXEC_LOG_ERR"
            fi
            exit $EXEC_LOG_RC
        fi
    }

    # Logs a message, alias to log_info
    function log
    {
        log_info "$1"
    }

    # Log function that knows how to deal with severities and adds the
    # script name
    function log_function
    {
        echo "$1: $SCRIPT_NAME: $2" 1>&2
    }

    # Logs an info message
    function log_info
    {
        log_function "INFO" "$1"
    }

    # Logs an error message
    function log_error
    {
        log_function "ERROR" "$1"
    }

    # This function is used to pass error message to the mad
    function error_message
    {
        (
            echo "ERROR MESSAGE --8<------"
            echo "$1"
            echo "ERROR MESSAGE ------>8--"
        ) 1>&2
    }

    生成的backup.md5內容:
    $ md5sum *.tgz > backup.md5 
    2c07174d451a687bc0e401b1dc7d84b8  checkpoint.1376892493.tgz
    57a18d7f6eed36565b9012e519985130  checkpoint.1376903188.tgz
    b652990806e58a81b41dc1b23db9adda  checkpoint.1376904023.tgz
    f4e7adb46a8fde2643e082875cc60e21  checkpoint.1376904289.tgz
    ad2a59902652e2896b35507417b7016f  checkpoint.tgz
    4bd43eac64f238bb35c7194816da7d23  deployment.0.tgz
    ee3d9266cf92f7540cc75a94343bc20a  deployment.7.tgz
    fcd5aae37354b5cb66f4b90544eaa5c3  disk.0.tgz
    c1ef6d911b441660ec2d1e44b5a56f66  disk.1.iso.tgz
    25eae70a31a7c7cff3baade4cd65fe82  disk.1.tgz

    檢查備份文件是否完整:
    exec_and_log "$SSH $SRC_HOST $MD5SUM -c ${SRC_PATH}/backup.md5"

    檢測結果:
    $ md5sum -c backup.md5 
    checkpoint.1376892493.tgz: OK
    checkpoint.1376903188.tgz: OK
    checkpoint.1376904023.tgz: OK
    checkpoint.1376904289.tgz: OK
    checkpoint.tgz: OK
    deployment.0.tgz: OK
    deployment.7.tgz: OK
    disk.0.tgz: OK
    disk.1.iso.tgz: OK
    disk.1.tgz: OK
    posted @ 2013-08-20 11:34 David1228 閱讀(2440) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-08-20 09:46 David1228 閱讀(393) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-08-20 09:44 David1228 閱讀(393) | 評論 (0)編輯 收藏
         摘要:   閱讀全文
    posted @ 2013-07-24 16:11 David1228 閱讀(33411) | 評論 (0)編輯 收藏
         摘要: 根據官方的說法,在ibatis3,也就是Mybatis3問世之前,Spring3的開發工作就已經完成了,所以Spring3中還是沒有對Mybatis3的支持。因此由Mybatis社區自己開發了一個Mybatis-Spring用來滿足Mybatis用戶整合Spring的需求。下面就將通過Mybatis-Spring來整合Mybatis跟Spring的用法做一個簡單的介紹。MapperFactoryB...  閱讀全文
    posted @ 2013-07-10 18:07 David1228 閱讀(21427) | 評論 (2)編輯 收藏

    不得不承認的是,在目前的web應用開發中,Spring的應用越來越廣泛,其地位變得相當重要。而在最近推出的Spring 3.2版本中,又引入了一些新的值得關注的特性。本文中將介紹其中一些值得關注的新特性。

    一 不再需要web.xml

     在新的Spring 3.2中,可以不再需要web.xml這個文件了,這得益于Servlet 3.0的新特性。

    其中,可以使用@WebServlet在需要調用的servlet中,使用注解去設置servlet中的映射關系。這樣的話,就可以不再象以往那樣要通過在web.xml中對servlet進行配置,十分方便。

    此外,Servlet 3.0提供了既能在容器中動態注冊servlet的方法,也提供了通過實現

    ServletContainerInitializer接口的方法實現在容器啟動階段為容器動態注冊Servlet、Filter和listeners。容器會在應用的啟動階段,調用所有實現ServletContainerInitializer接口類中的onStartup()方法。而Spring 3.2中,則進一步簡化了這點,只需要實現WebApplicationInitializer接口就可以了,其中提供了一個相關的實現類--AbstractContextLoaderInitializer,它可以動態注冊DispatcherServlet。這意味著,只要spring-webmvc.jar放置在web應用的web-inf/lib中,就可以調用Dispatcher servlet了。可以參考如下的例子(來自Spring文檔):

    1. public class MyWebApplicationInitializer implements WebApplicationInitializer { 
    2.  
    3.     @Override 
    4.     public void onStartup(ServletContext container) { 
    5.         ServletRegistration.Dynamic registration = container.addServlet("dispatcher"new DispatcherServlet()); 
    6.         registration.setLoadOnStartup(1); 
    7.         registration.addMapping("/example/*"); 
    8.     } 
    9.  

    二 支持Java編程式配置在Spring mvc 3.2中,一個不錯的特性就是在之前版本中支持使用Java代碼配置各種依賴注入的基礎上,進一步簡化了配置。關于使用Java編程式配置的好處,可以通過下面這個鏈接文章的介紹去學習

    http://blog.frankel.ch/consider-replacing-spring-xml-configuration-with-javaconfig)。
    在Spring mvc 3.2中,提供了AbstractContextLoaderInitialize的一個子類AbstractAnnotationConfigDispatcherServletInitializer去實現零XML配置的效果,只需要創建的類繼承AbstractAnnotationConfigDispatcherServletInitializer就可以了,如下代碼所示:

    1. public  
    2.  
    3. class  
    4.  
    5. SugarSpringWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 
    6.  
    7.     @Override 
    8.     protected Class<?>[] getRootConfigClasses() { 
    9.         return new Class[] { JavaConfig.class }; 
    10.     } 
    11.  
    12.     @Override 
    13.     protected Class<?>[] getServletConfigClasses() { 
    14.         return new Class[] { WebConfig.class }; 
    15.     } 
    16.  
    17.     @Override 
    18.     protected String[] getServletMappings() { 
    19.         return new String[] { "/" }; 
    20.     } 
    21.  

    功能更強大的Spring Test 框架現在,單元測試顯得越來越重要了,每一個類都建議做好對應的單元測試。在Spring 3.2版本之前,如果要對Spring MVC進行單元測試的話,必須顯式去調用某個控制器類中的某個方法,而不能直接單元測試相關的mapping映射。而在Spring mvc 3.2中,重新整合和增強了測試框架的功能,支持直接用/*這樣的映射方式去測試某個控制器中的類。同時,之前的開源項目(https://github.com/SpringSource/spring-test-mvc也被收錄到Spring mvc 3.2中去了。此外,還新增加了對返回(return),重定向(redirect)model等的測試改進,下面是一個例子:

    1. public class SayHelloControllerIT extends AbstractTestNGSpringContextTests { 
    2.   
    3.     private MockMvc mockMvc; 
    4.   
    5.     @BeforeMethod 
    6.     public void setUp() { 
    7.   
    8.         mockMvc = webAppContextSetup((WebApplicationContext) applicationContext).build(); 
    9.     } 
    10.   
    11.     @Test(dataProvider = "pathParameterAndExpectedModelValue"
    12.     public void accessingSayhelloWithSubpathShouldForwardToSayHelloJspWithModelFilled(String path, String value) throws Exception { 
    13.   
    14.         mockMvc.perform(get("/sayHello/Jo")).andExpect(view().name("sayHello")).andExpect(model().attribute("name""Jo")); 
    15.     } 

    本文的示例代碼可以在: http://blog.frankel.ch/wp-content/resources/spring-3-2-sweetness/spring-sweet-1.0.0.zip中下載。

    原文鏈接:http://java.dzone.com/articles/spring-32-sweetness

    posted @ 2013-07-10 11:48 David1228 閱讀(2345) | 評論 (0)編輯 收藏
         摘要: 本文轉載自:http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html場景問題  舉個生活中常見的例子——組裝電腦,我們在組裝電腦的時候,通常需要選擇一系列的配件,比如CPU、硬盤、內存、主板、電源、機箱等。為討論使用簡單點,只考慮選擇CPU和主板的問題。  事實上,在選擇CPU的時候,面臨一系列的...  閱讀全文
    posted @ 2013-07-04 17:07 David1228 閱讀(400) | 評論 (0)編輯 收藏
    shell中可能經常能看到:>/dev/null 2>&1 

    命令的結果可以通過%>的形式來定義輸出

    分解這個組合:“>/dev/null 2>&1” 為五部分。

    1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
    2:/dev/null 代表空設備文件
    3:2> 表示stderr標準錯誤
    4:& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1
    5:1 表示stdout標準輸出,系統默認值是1,所以">/dev/null"等同于 "1>/dev/null"

    因此,>/dev/null 2>&1 也可以寫成“1> /dev/null 2> &1”

    那么本文標題的語句執行過程為:
    1>/dev/null :首先表示標準輸出重定向到空設備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。
    2>&1 :接著,標準錯誤輸出重定向 到 標準輸出,因為之前標準輸出已經重定向到了空設備文件,所以標準錯誤輸出也重定向到空設備文件。

    最常用的方式有:
        
    command > file 2>file  與command > file 2>&1

    它們有什么不同的地方嗎?
          首先command > file 2>file 的意思是將命令所產生的標準輸出信息,和錯誤的輸出信息送到file 中.command  > file 2>file 這樣的寫法,stdout和stderr都直接送到file中, file會被打開兩次,這樣stdout和stderr會互相覆蓋,這樣寫相當使用了FD1和FD2兩個同時去搶占file 的管道。
          而command >file 2>&1 這條命令就將stdout直接送向file, stderr 繼承了FD1管道后,再被送往file,此時,file 只被打開了一次,也只使用了一個管道FD1,它包括了stdout和stderr的內容。
          從IO效率上,前一條命令的效率要比后面一條的命令效率要低,所以在編寫shell腳本的時候,較多的時候我們會command > file 2>&1 這樣的寫法。
     
    以上轉載自:http://sjolzy.cn/shell-in-the-dev-null-2-gt-amp-1-Detailed.html

    -
    -----------------------------------------------------------------------------------------------------
    那么,有這么個需求,我如何能判斷遠程主機上的某個文件是否存在呢,我能想到的有兩種方法,一種方法可以使用expect腳本,但是需要遠程主機上安裝expect包,但是只需要知道用戶名和密碼就可以了;第二種方法是要求兩臺主機之間做好ssh互信,然后如admin,那么通過shell可以直接判斷,但是文件宿主權限也需要是admin用戶下的。
    第二種方法腳本如下:
    #!/bin/bash

    ssh dst_host sh -s 2>&1 1>/dev/null <<EOF
    ls $NEW_DST_DIR
    EOF
    IS_EXIST=$?
    if [ "$IS_EXIST"x = "0"x ]; then
       echo "-The file exists------------------------------"
    else
       echo "No file-------------------------------"
    fi

    --大衛





    posted @ 2013-07-02 14:45 David1228 閱讀(957) | 評論 (0)編輯 收藏
    OpenNebula中主機添加一切正常。
    執行$onehost list 主機CPU、內存資源可以正常被監控到。但是,創建虛擬機后,虛擬機狀態很長一段時間一直處于pend狀態。而OpenNebula的mm_sched調度虛擬機的周期是缺省30秒調度一次,根據調度算法適配一臺合適的主機,主機是新添加的而且是有足夠資源的,為什么不能部署呢?
    我們可以通過查看虛擬機的調度日志$ONE_LOCATION/var/sched.log發現如下錯誤信息:
    Tue Feb 21 [HOST][E]: Exception raised: Unable to transport XML to server and get XML response back.
     HTTP response: 504 Tue Feb 22 14:27:39 2011 [POOL][E]: Could not retrieve pool info from ONE。
    解決方法:
    在OpenNebula官方的Wiki中可以找到原因,原因是所添加的主機使用了HTTP代理上網了,所以OpenNebula讀取了系統的http_proxy環境變量,此時就需要關閉http_proxy。

    I can create VMs, but sched.log shows the error "Could not retrieve pool info from ONE". What's wrong?

    If the scheduler does not deploy the pending VMs, and messages like these are found in sched.log

    [HOST][E]: Exception raised: Unable to transport XML to server and get XML response back.  HTTP response code is 404, not 200 [POOL][E]: Could not retrieve pool info from ONE

    Then you need to unset the http_proxy environment variable, or set the no_proxy accordingly.

    wiki參考地址(這里匯總了使用或部署one過程中可能遇到的問題以及解決辦法):http://wiki.opennebula.org/faq#listing_vms_takes_a_lot_of_time_why

    大家對于Opennebula的安裝部署感興趣的話,可以參考vpsee的博客(在Centos上安裝和部署Opennebula),講解的很詳細。

    vpsee已經試玩了下OpenNebula4.0,由于項目原因,目前我們還在用OpenNebula3.8.1,后面也會測試升級到OpenNebula4.0看看新功能。
    升級過程同樣也參考下vpsee的OpenNebula3.x升級到OpenNebula4.0,^^ 這么好的資源優先借鑒。

    posted @ 2013-06-24 18:01 David1228 閱讀(1082) | 評論 (0)編輯 收藏
    啟動和停止OpenNebula shell腳本如下:
    給這個腳本起個名字吧,叫做oned

    #!/bin/bash
    #
    # chkconfig: 345 80 15
    # description: Startup script for the one .

    # Source function library.

    . /etc/rc.d/init.d/functions

    APP_USER=oneadmin
    APP_HOME=/opt/nebula/ONE/

    RETVAL=0

    start(){
            checkrun
            if [ $RETVAL -eq 1 ]; then
                    echo "Starting oned"
                    su - $APP_USER -c "$APP_HOME/bin/one start"
        else
           echo "oned is already running."

            fi
    }

    stop(){
            su - $APP_USER -c "$APP_HOME/bin/oneuser list" > /dev/null 2>&1
            result=$?
            if [ $result -eq 0 ]; then

                    echo "Shutting down oned"
                    su - $APP_USER -c "$APP_HOME/bin/one stop"

            elif [ $result -eq 255 ]; then

                    echo "Shutting down oned"
                    pkill -9 -u oneadmin

        fi
    }
       
    checkrun(){
            su - $APP_USER -c "$APP_HOME/bin/oneuser list" > /dev/null 2>&1
            if [ $? -eq 0 ]; then
                 RETVAL=0
                 return $RETVAL
        else
                 RETVAL=1
                 return $RETVAL
            fi
    }

    status(){
            checkrun
            if [ $RETVAL -eq 0 ]; then
                    echo "oned is running."
            else
                echo "oned is stopped."
                exit 1
            fi
    }

    case "$1" in
    start)
            start
            RETVAL=$?
            ;;
    stop)
            stop
            RETVAL=$?
            ;;
    restart)
            stop
            start
            RETVAL=$?
            ;;
    status)
            status
            ;;
    *)
            echo "Usage: $0 {start|stop|restart|status}"
            esac
    echo $RETVAL
    exit 0
    Linux中如何設置服務開機自啟動,可以參考http://os.51cto.com/art/201301/377515.htm

    1. 首先查看服務器默認的運行級別是多少? 目的是在對應運行級別下建立服務的軟連接。
     1> 執行命令#runlevel
     [root@compute-63-14]# runlevel
     N 3
     2> 查看/etc/inittab
     [root@compute-63-14 tomcat6]# cat /etc/inittab 
     # inittab is only used by upstart for the default runlevel.
     ... ... 
     id:3:initdefault:
     
    2. 將寫好的oned腳本拷貝到/etc/init.d/目錄下

    3. 在/etc/rc.d/rc3.d中建立軟鏈接
    cd /etc/init.d/rc.d/rc3.d
    ln -s ../init.d/oned S99oned
    S99oned是其軟鏈接,S開頭代表加載時自啟動

    以上已測試過,沒有問題,同時有興趣可以試試第二、三種方式。
    posted @ 2013-06-04 11:18 David1228 閱讀(422) | 評論 (0)編輯 收藏
    VNCServer X 桌面默認為 twm, 這時連接進去只能看到終端界面,而看不到遠程桌面界面。可修改 /root/.vnc/xstartup 文件,將其改為 GNOME KDE 桌面:
    GNOME

    [root @ test vnc-4_1_2-x86_linux] # vi /root/.vnc/xstartup
    #
    /bin/sh
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot –solid grey
    vncconfig –iconic &
    xterm –geometry 80x24+10+10 –ls –title “$VNCDESKTOP Desktop” &
    gnome-session &

    KDE:
    [root @ test vnc-4_1_2-x86_linux] # vi /root/.vnc/xstartup
    #
    /bin/sh
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot –solid grey
    vncconfig –iconic &
    xterm –geometry 80x24+10+10 –ls –title “$VNCDESKTOP Desktop” &
    startkde &
    修改完畢后須重新啟動 VNCServer
    [root @ test vnc-4_1_2-x86_linux] # vncserver –kill :1 && vncserver :1
    [root @ test vnc-4_1_2-x86_linux] # vncviewer 192.168.98.32:1
    連接后即可使用 GNOME KDE 桌面啦(就像 WinXP 的遠程桌面一般),也可以通過 WEB 訪問,在瀏覽器中輸入http://192.168.0.252:5801 即可,VNC 默認的端口號為5801

    轉載:http://shaoruisky.blog.163.com/blog/static/92610707201151224518579/
    posted @ 2013-03-24 13:07 David1228 閱讀(2812) | 評論 (0)編輯 收藏
    Spring2.5繼續堅持了這個發展趨向,特別是為那些使用Java 5或更新版本java的開發人員提供了進一步簡化而強大的新特性。這些新特性包括:注解驅動的依賴性注入(annotation-driven dependency injection),使用注解而非XML元數據來自動偵測classpath上的Spring組件,注解對生命周期方法的支持,一個新的web控制器模型將請求映射到加注解的方法上,在測試框架中支持Junit4,Spring XML命名空間的新增內容,等等。
    項目中使用的spring2.5版本。如果想要使用spring提供的注解功能.
    applicationContext.xml配置文件中增加如下配置:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <!-- Using annontations -->
    <context:annotation-config></context:annotation-config>
    新增以下三項才可以使用注解功能
    xmlns:context="http://www.springframework.org/schema/context"
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <context:annotation-config></context:annotation-config>
    或者<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/> 注冊一個單獨的Spring post-processor.
    一個沒有實現任何接口的業務類,配置如下:
    public class LogService extends Service{
    public LogBiz(){}
    @Resource //默認按名稱查找bean. 如果找不到,則按類型匹配bean.
    private BaseDao dao;
    }
    tomcat啟動錯誤1:
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'logBiz': Injection of resource fields failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.ccms.base.dao.BaseDAO] is defined: expected single matching bean but found 40: [baseDAO, loginDAO, logDAO]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:291)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:876)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:437)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:383)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:353)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
    ... 32 more
    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.ccms.base.dao.BaseDAO] is defined: expected single matching bean but found 40: [baseDAO, loginDAO, logDAO]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:583)
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:418)
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:497)
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:145)
    at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:79)
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:288)
    ... 42 more
    使用@Resource默認按名稱查找bean. 如果找不到,則按類型匹配bean.而名稱dao沒有找到,所以會根據BaseDAO匹配,但是BaseDAO是一個接口:
    <bean id="loginDAO" class="com.test.dao.loginDAO" parent="baseDAO" />
    <bean id="logDAO" class="com.test.dao.logDAO" parent="baseDAO" />
    <bean id="baseDAO" class="com.ccms.base.dao.BaseDAOImpl">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    <property name="simpleJdbcTemplate">
    <ref bean="simpleJdbcTemplate" />
    </property>
    </bean>
    有兩個實現了BaseDAO接口的類,所以spring就不知道應該使用哪一個了。直接拋出異常。
    解決方法1:
    我們可以看到baseDAO名稱是唯一的, 所以如果想要按照名稱匹配,則直接寫baseDAO就可以了
    @Resource
    private BaseDAO baseDAO;
    解決方法2:
    @Autowired //默認按照類型匹配,同樣應為有兩個子類bean,所以拋出異常。
    @Qualifier("loginDAO") //限定bean
    private BaseDAO dao;
    參考博客:
    http://doc.chinaunix.net/java/200801/240056.shtml
    http://stackoverflow.com/questions/10534053/autowiring-two-beans-implementing-same-interface-how-to-set-default-bean-to-au
    posted @ 2013-03-21 10:22 David1228 閱讀(2493) | 評論 (0)編輯 收藏
         摘要: jdk并發部分,如果英文理解有點小難,可以參考http://www.yiibai.com/java6/java/util/concurrent/package-summary.html本篇轉自:http://victorzhzh.iteye.com/blog/1011635很多時候我們希望任務可以定時的周期性的執行,在最初的JAVA工具類庫中,通過Timer可以實現定時的周期性的需求,但是有一定的...  閱讀全文
    posted @ 2013-03-18 18:58 David1228 閱讀(1767) | 評論 (0)編輯 收藏

    <2013年3月>
    242526272812
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章檔案

    新聞分類

    新聞檔案

    相冊

    收藏夾

    Java

    Linux知識相關

    Spring相關

    云計算/Linux/虛擬化技術/

    友情博客

    多線程并發編程

    開源技術

    持久層技術相關

    搜索

    •  

    積分與排名

    • 積分 - 358547
    • 排名 - 154

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV无码成人精品区在线观看| xvideos永久免费入口| 国产亚洲精品一品区99热| 天天干在线免费视频| 日本免费人成视频在线观看| 羞羞视频免费网站含羞草| 亚洲成a人片在线看| 亚洲午夜免费视频| 亚洲永久精品ww47| 免费中文字幕在线| 精品国产免费观看| 久久久久国产精品免费免费搜索| 日韩精品内射视频免费观看| 一区二区三区在线免费观看视频| 久久亚洲AV成人无码国产电影| tom影院亚洲国产一区二区| 亚洲人成在线影院| 亚洲色自偷自拍另类小说| 亚洲国产精品成人久久蜜臀| 午夜免费不卡毛片完整版| 一二三四免费观看在线电影 | 特级无码毛片免费视频尤物| 二级毛片免费观看全程| 免费中文字幕视频| 污污视频免费观看网站| 国产午夜亚洲精品不卡免下载| 亚洲人成人网毛片在线播放| 亚洲高清中文字幕| 久久精品国产亚洲精品2020| 久久亚洲精品无码AV红樱桃| 亚洲人成在线播放网站岛国| 亚洲自偷自拍另类12p| 亚洲午夜免费视频| 亚洲欧洲日本精品| 亚洲国产中文在线视频| 亚洲人成影院77777| 国产亚洲福利在线视频| 亚洲av无码专区亚洲av不卡| 久久亚洲色WWW成人欧美| 猫咪免费人成在线网站 | 亚洲精品国产综合久久一线|