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

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

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

      Sparta Yew

         簡約、職業、恒久
    隨筆 - 15, 文章 - 1, 評論 - 276, 引用 - 0
    數據加載中……

    Spring3中XmlBeanDefinitionReader類的玩笑

        
        sparta-紫杉 2010-8-23 18:14

        開發環境:spring3.0.2 + struts2.1.8 + hibernate3.3.1 + jdk1.6 + weblogic10.3 + oracle92 + c3p0-0.9.1 + Eclipse3.4.2

        在此開發環境下的項目中,各項配置完畢,之前好好的,但在增加了CXF開發Web Services的功能之后,啟動Weblogic10.3一半時,總是提示“c3p0不能加載 oracle.jdbc.driver.OracleDriver”,ClassNotFoundException: oracle.jdbc.driver.OracleDriver.

        開始以為是新增加的采用CXF開發Web Services的功能之后,其中的CXF引用的相關包和Hibernate使用的包有沖突,于是檢查,但lib下沒有asm,也沒有cglib_1.XX.jar,因此并不是jar包有沖突。

        后來以為CXF所帶的jar所版本太低(2.0.4,目前已經出了2.2.10),于是首先將所有與CXF有關的所有jar包全部刪除。再試驗,仍然出現這種問題,極度崩潰中。

        于是從其他方面入手,找啊找, 終于在applicationContext.xml中發現如下語句:

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

          
    <property name="driverClass">
                   
    <!--下面<value>oracle.jdbc.driver.OracleDriver</value>語句為兩行,導致異常。-->
                   
    <value>oracle.jdbc.driver.OracleDriver
                   
    </value>
          
    </property>

          
    <property name="jdbcUrl">
                   
    <value>jdbc:oracle:thin:@192.168.0.72:1521:ORA9
                   
    </value> 
          
    </property>
            ……
    </bean>

        
        當看到這段代碼時,就已經豁然開朗了,基本已經認定就是由于<value>oracle.jdbc.driver.OracleDriver</value>值不在一行的原因(因為之前碰到過這個問題),于是將上述修改為下述:

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

              
    <property name="driverClass">
                       
    <!--下面<value>oracle.jdbc.driver.OracleDriver</value>語句為一行是正常的。-->
                       
    <value>oracle.jdbc.driver.OracleDriver</value>
              
    </property>

              
    <property name="jdbcUrl">
                       
    <value>jdbc:oracle:thin:@192.168.0.72:1521:ORA9</value>
              
    </property>
            ……
    </bean>


        哈哈,看出區別來了嗎?一行代碼之差就會造成截然不同的兩種運行結果。原因很簡單,在增加CXF之前,編寫的代碼均是采用一行來編寫的,在增加了CXF之后,為了使XML配置文件的代碼更加整齊,于是我在Eclipse中Ctrl + Shift + F了一下,結果配置文件中的配置代碼<value>oracle.jdbc.driver.OracleDriver</value>就由一行成為了分開的兩行,直接導致了配置的失效。Spring的XmlBeanDefinitionReader類的loadBeanDefinitions()方法跟我們開了一個不大不小的玩笑。于是筆者將兩行的<value>oracle.jdbc.driver.OracleDriver</value>代碼修改為一行之后,當再啟動Weblogic,問題奇跡般的解決了。

        看來,Spring對于XML的解析還是欠缺一些智能化,對于不在同一行的尾標簽不能正確識別,不能不說是一種缺陷,或者說是一種Bug。在日益追求靈活編碼的程序員身上還是會造成一些不必要的麻煩。記得在Struts2中也出現過此類問題,當時筆者迫不得已針對源碼進行了修改。不妨大膽猜測一下,在Spring和Struts中使用的XML解析類均是通用的吧,抑或是這種通用的XML解析是基于“約定優于配置”的原則。但在我看來,這至少是一種缺陷,其中的是非成敗只有留給Spring人去評說。



                -東營 sparta-紫杉 原創,轉載請注明出處 :)
                http://www.tkk7.com/SpartaYew/
                SpartaYew@163.com
     
                
    QQ:22086526

    posted on 2011-05-18 21:56 sparta-紫杉 閱讀(1233) 評論(0)  編輯  收藏 所屬分類: SSH2

    主站蜘蛛池模板: 蜜芽亚洲av无码精品色午夜| 美女视频黄的免费视频网页| 久久精品国产亚洲77777| 亚洲国产成人久久综合区| 天天摸夜夜摸成人免费视频| 99精品视频免费观看| 91在线视频免费观看| 四虎成人精品国产永久免费无码| 亚洲国产av一区二区三区丶| 亚洲av日韩av无码| 亚洲欧洲精品无码AV| 国产亚洲美日韩AV中文字幕无码成人| 国产成人免费高清激情视频| 91香蕉成人免费网站| 日本在线看片免费人成视频1000| 两性色午夜视频免费网| 国产亚洲精品仙踪林在线播放| 国产成人亚洲综合一区 | 理论秋霞在线看免费| 亚洲六月丁香婷婷综合| 亚洲精品美女久久久久| 久久亚洲日韩精品一区二区三区| 国产AV无码专区亚洲Av| 精品久久久久久亚洲| 亚洲日韩精品A∨片无码| 亚洲真人无码永久在线| 亚洲三区在线观看无套内射| 77777亚洲午夜久久多人| 国精无码欧精品亚洲一区| 国产V亚洲V天堂A无码| 亚洲A∨无码无在线观看| 亚洲成人在线网站| 久久精品国产精品亚洲毛片| 亚洲视频一区在线播放| 亚洲伊人精品综合在合线| 亚洲人成7777| 亚洲精华国产精华精华液好用| 亚洲精品久久久久无码AV片软件| 亚洲欧美不卡高清在线| 青青视频免费在线| 成全视成人免费观看在线看|