Habitat Framework

          專注于Java EE企業級開發
          posts - 13, comments - 81, trackbacks - 0, articles - 5
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          因為在項目中要用到多數據源,所以這次必須采用JTA這種分布式事務管理方案,后來決定選JOTM這個JTA的開源實現,網上關于JOTM的文章很多了,就不贅述了,貼下我的配置吧(carol.properties就免了吧):

          <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/>
           <!--JOTM-->
           <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
              <property name="userTransaction">
                  <ref local="jotm"/>
              </property>
           </bean>
            
           <bean id="abstractTransactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager">
             <ref bean="transactionManager"/>
            </property>
            <property name="transactionAttributeSource">
             <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
            </property>
           </bean>

           <bean id="abstractTmsSessionProxy" abstract="true">
            <property name="sessionFactory" ref="tmsSessionFactory"/>
           </bean>
           
           <bean id="abstractWmsSessionProxy" abstract="true">
            <property name="sessionFactory" ref="wmsSessionFactory"/>
           </bean>
           
           <bean id="abstractFmsSessionProxy" abstract="true">
            <property name="sessionFactory" ref="fmsSessionFactory"/>
           </bean>
           


           <!-- WMS data source -->
           <bean id="innerDataSourceWms" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
            <property name="transactionManager">
             <ref local="jotm"/>
            </property>
            <property name="driverName">
             <value>oracle.jdbc.OracleDriver</value>
            </property>
            <property name="url">
             <value>jdbc:oracle:thin:@10.4.1.110:1521:testdb</value>
            </property>
            <property name="user">
             <value>t_wms</value>
            </property>
            <property name="password">
             <value>111</value>
            </property>
           </bean>

           <bean id="dataSourceWms" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
            <property name="dataSource">
             <ref local="innerDataSourceWms"/>
            </property>
            <property name="transactionManager">
             <ref local="jotm"/>
            </property>
            <property name="maxSize">
             <value>10</value>
            </property>
            <property name="user">
             <value>t_wms</value>
            </property>
            <property name="password">
             <value>111</value>
            </property>
           </bean>
           
              <bean id="wmsSessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
                  <property name="dataSource" ref="dataSourceWms"/>
                  <property name="lobHandler" ref="lobHandler"/>
                  <property name="mappingResources">
                      <list>
                              ........

                      </list>
                  </property>
                  <property name="hibernateProperties">
                      <props>
                          <prop key="hibernate.dialect">net.sf.hibernate.dialect.Oracle9Dialect</prop>
                          <prop key="hibernate.hbm2ddl.auto">update</prop>
                      </props>
                  </property>
            <property name="jtaTransactionManager">
             <ref bean="jotm"/>
            </property>
              </bean>
           
           <!--TMS data source-->
           <bean id="innerDataSourceTms" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
            <property name="transactionManager">
             <ref local="jotm"/>
            </property>
            <property name="driverName">
             <value>oracle.jdbc.OracleDriver</value>
            </property>
            <property name="url">
             <value>jdbc:oracle:thin:@10.4.1.110:1521:testdb</value>
            </property>
            <property name="user">
             <value>t_tms</value>
            </property>
            <property name="password">
             <value>111</value>
            </property>
           </bean>

           <bean id="dataSourceTms" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
            <property name="dataSource">
             <ref local="innerDataSourceTms"/>
            </property>
            <property name="transactionManager">
             <ref local="jotm"/>
            </property>
            <property name="maxSize">
             <value>10</value>
            </property>
            <property name="user">
             <value>t_tms</value>
            </property>
            <property name="password">
             <value>111</value>
            </property>
           </bean>


              <bean id="tmsSessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
                  <property name="dataSource" ref="dataSourceTms"/>
                  <property name="lobHandler" ref="lobHandler"/>
                  <property name="mappingResources">
                      <list>
                            ....
                      </list>
                  </property>
                  <property name="hibernateProperties">
                      <props>
                          <prop key="hibernate.dialect">net.sf.hibernate.dialect.Oracle9Dialect</prop>
                          <prop key="hibernate.hbm2ddl.auto">update</prop>
                      </props>
                  </property>
            <property name="jtaTransactionManager">
             <ref bean="jotm"/>
            </property>
              </bean>
           
           
           <!--FMS data source-->
           <bean id="innerDataSourceFms" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
            <property name="transactionManager">
             <ref local="jotm"/>
            </property>
            <property name="driverName">
             <value>oracle.jdbc.OracleDriver</value>
            </property>
            <property name="url">
             <value>jdbc:oracle:thin:@10.4.1.110:1521:testdb</value>
            </property>
            <property name="user">
             <value>t_fms</value>
            </property>
            <property name="password">
             <value>111</value>
            </property>
           </bean>

           <bean id="dataSourceFms" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
            <property name="dataSource">
             <ref local="innerDataSourceFms"/>
            </property>
            <property name="transactionManager">
             <ref local="jotm"/>
            </property>
            <property name="maxSize">
             <value>10</value>
            </property>
            <property name="user">
             <value>t_fms</value>
            </property>
            <property name="password">
             <value>111</value>
            </property>
           </bean>

              <bean id="fmsSessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
                  <property name="dataSource" ref="dataSourceFms"/>
            <property name="lobHandler" ref="lobHandler"/>
                  <property name="mappingResources">
                      <list>
                            .....
                      </list>
                  </property>
                  <property name="hibernateProperties">
                      <props>
                          <prop key="hibernate.dialect">net.sf.hibernate.dialect.Oracle9Dialect</prop>
              <prop key="hibernate.hbm2ddl.auto">update</prop>
                      </props>
                  </property>
            <property name="jtaTransactionManager">
             <ref bean="jotm"/>
            </property>
              </bean>

          由于前期使用中的發現XAPool這個包里面有類老是報連接方面的錯誤,于是在參考了一篇網上的文章后把xapool和包裝連接的配置都去掉了,結果導致的是多數據源的事務根本無法實現,后來仔細想想,覺得很詭異,xapool就是jotm實現多數據源事務的關鍵所在,怎么能不用?

          于是仔細研究了下,發現很多問題,首先,JOTM需要的依賴--CAROL包沒有JDK1.5的版本,需要自己下載源碼并編譯成新的ow_carol-all.jar
          Xapool倒是有JDK1.5的版本xapool-1.5.0,但是跑起來老是報錯,于是去下了xapool的源文件,發現居然源碼都不能編譯通過,還有JDK1.5的保留字在里面,真不知道作者是怎么發布出1.5.0的.于是自己改掉關鍵字,并修補了一些檢查不太嚴格的檢測,并重新打了個版本.結果跑起來還是會報錯,不過是oracle報游標用盡的錯誤.

          搜了一把就發現原來是Oracle9i有名的內存溢出bug導致:Xapool對PreparedStatement進行了Cache,同時Oracle有一個出名的內存漏洞,PreparedStatement使用之后必須關閉,如果不關閉連續進行SQL查詢會造成前面SQL的游標不能釋放;

          參考了網上的修改方案(xapool1.4的),又自己研究了半天,最后終于成功了,Xapool1.5的修改如下:
          修改StandardConnectionPoolDataSource類的public static final int DEFAULT_PREPAREDSTMTCACHESIZE = 0,(當然也可以用配置的方式來注入)
          這樣就關閉了PreparedStatement的Cache,而且也不會造成什么1.4中關閉連接時的異常等等.

          最后根據實際情況,設置好dataSourceXXX這幾個bean的lifeTime,sleepTime,maxSize,checkLevelObject屬性(具體意義和設置方法可以參考網上的說明)
          就終于可以正式使用了,測試了下,情況還不錯:)


          最近有很多朋友都說他們配置不成功,可能是某些細節造成的吧,因為這套系統現在正在TCL總部順利的運轉著,所有我相信這個方法還是可行的,如果大家有什么問題需要我幫助,我很樂意幫忙,有人說要我自己改的xapool1.5,因為再我改好后不久,1.6就已經發布了,所有我就沒有貼出來了,有問題的朋友可以直接留言我你的msn,我會加你的.


          評論

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2007-03-26 22:50 by goldpigbaby
          老大:
          我用mssql5.1+oracle10g,oracle可以實現事務控制但是mysql就是不行,不知試過mysql沒有?

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2007-03-26 23:48 by hunteva
          試過啊,

          mysql安裝的時候可以選擇使用事務支持或非事務性數據庫的

          確定你安裝的是帶事務支持的嗎?

          不成功的原因可能有很多,多檢查下,或提供你的詳細信息

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2007-04-09 22:59 by goldpigbaby
          我本想把我的application_context.xml給貼上來,但是太多貼不上。我留下msn希望向你請叫一下,我的msn:anttree911@hotmail.com

          # 5555555555555  回復  更多評論   

          2007-08-02 00:13 by 看了很多也不知道怎么做啊!
          看來你是可以啊。....希望能得到你的幫助啊!
          我的msn是gmm2003_csdn@hotmail.com
          十分感謝啊!已經一周了啊都沒有解決啊

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2007-09-10 10:36 by andyao
          你好,我也遇到一樓的問題,mysql 事務不rollback,每次都commit,無論其他的是否成功。能否將你修改的jar文件發一份給我,我試一下

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2007-09-25 15:34 by divid
          求助:
          我現在用jotm
          spring+hibernate+jotm+sql server2005
          現在事務也不能回滾
          留下qq:32419852
          希望你得到你的幫助.

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇[未登錄]  回復  更多評論   

          2007-09-27 09:34 by Chen
          求助...
          我也遇到同樣多數據源,需要事務來管理的問題,上面的基本都看懂了......只是具體的程序的寫法上出了點問題.....請教......Msn:ak47acao@163.com

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2007-09-29 17:14 by Kerwin Weng
          @divid
          加了你,但是沒有讓我通過啊@divid

          首先確定你的數據庫是否支持分布式事務,如Mysql5.0,Connecter/J5.0之前就不支持,如果不支持請看andyao的這篇文章http://www.javaeye.com/post/378945

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2007-10-18 21:15 by superkid
          發現在調用hibernate的dao時,執行完flush(),就提交到數據庫中了,全局事務好像沒有起到作用.我的msn:zlc702@hotmail.com,謝謝

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2007-11-27 13:27 by niehaomin
          niehaomin@hotmail.com

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2008-01-05 18:55 by Hannibal
          不用jta時單個數據庫下mysql可以實現事務,但用jtom+hibernate+spring+mysql不能實現回滾。
          jingdi@gmail.com

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇[未登錄]  回復  更多評論   

          2008-03-04 14:06 by paul
          今天遇到個問題,希望向您請教!我的msn:e3002@163.com

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2008-04-02 01:33 by okj
          老大你好,我也遇到這個問題,我的數據庫全是Oracle10

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2008-04-02 01:34 by okj
          您好我的Email: okj2006@126.com

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2008-05-30 15:26 by cmaster
          老兄,我正在配這個,把你的carol包和xapool包發一份我吧,我老報找不到jar包的錯誤,chsboy@hotmail.com謝謝了

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2008-06-11 15:10 by 劉玉海
          老兄!你好啊!我正在用這個jotm啊!遇到了好多問題,還真虧了看了您這片文章啊!不過我還是遇到一個問題啊!我的測試程序就是一個類加載了spring的2個配置文件啟動后,執行完成了,可是仍然有線程在運行 ,一直這樣不停止,是因為全局事務的原因嗎?而且我還遇到個怪問題啊!下面是拋出的異常!
          麻煩老兄幫忙看看! 我的MSN:lyhit_830@hotmail.com

          謝謝了!

          Hibernate: select DOWNLOADRECORDSEQUENCE.nextval from dual
          java.sql.SQLException: Cannot get connection for URL
          jdbc:oracle:thin:@192.168.100.81:1521:nstldb
          : 調用中無效的參數
          at org.enhydra.jdbc.standard.StandardDataSource.getConnection(StandardDataSource.java:216)
          at org.enhydra.jdbc.standard.StandardXADataSource.getFreeConnection(StandardXADataSource.java:472)
          at org.enhydra.jdbc.standard.StandardXAConnection.getConnection(StandardXAConnection.java:138)
          at org.enhydra.jdbc.pool.StandardPoolDataSource.getConnection(StandardPoolDataSource.java:209)
          at org.enhydra.jdbc.pool.StandardPoolDataSource.getConnection(StandardPoolDataSource.java:164)
          at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
          at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
          at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
          at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)
          at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87)
          at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:222)
          at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2224)
          at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2660)
          at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
          at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
          at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
          at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
          at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
          at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
          at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
          at org.springframework.orm.hibernate3.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:126)
          at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:48)
          at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:835)
          at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:645)
          at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
          at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:319)
          at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
          at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
          at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:630)
          at com.nstl.metadata.bo.DownloadrecordBO$$EnhancerByCGLIB$$2c29d289.save(<generated>)
          at com.nstl.metadata.exportTfo.bo.ExportTfoBO.recordDownloadRecord(ExportTfoBO.java:313)
          at com.nstl.metadata.exportTfo.bo.ExportTfoBO.pubTfo(ExportTfoBO.java:273)
          at com.nstl.metadata.exportTfo.bo.ExportTfoBO.exportTfoByTableName(ExportTfoBO.java:140)
          at com.nstl.metadata.exportTfo.bo.ExportTfoBO.main(ExportTfoBO.java:525)

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2008-06-11 15:12 by 劉玉海
          destroy-method="shutdown" 我的數據源也提示找不到這個屬性方法.

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2008-06-11 15:14 by 劉玉海
          class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown" 此處不能配置這個destroy-method 否則報錯.

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇[未登錄]  回復  更多評論   

          2008-06-11 16:33 by Kerwin Weng
          抱歉啊,我很久都沒有更新了,關于這個錯誤我之前用的hibernate是沒有的,建議你Google一下

          Jotm的配置其實是十分麻煩的,我發現在不同的環境下,成功率不會很高,看看以上的留言就知道了-_-!

          十分抱歉的是由于我最近一年來的工作主要專注在RoR方面,所以確實對于各位的問題有點力不從心,很多都沒有回復

          所以,我建議遇到困難的朋友盡量可以看看這里:http://www.javaeye.com/post/378945
          andyao提供了更簡單可靠的分布式事務保障方式,我個人也覺得比Jotm好,希望大家不妨考慮考慮

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2008-12-04 15:31 by hqhe_nj
          高手,我的錯誤是這樣的:
          2008-12-04 13:52:12,165 INFO [org.enhydra.jdbc.xapool] - <GenericPool:cleanUp done min=2 max=50 count=2>
          2008-12-04 13:52:26,020 ERROR [org.enhydra.jdbc.xapool] - <StandardXADataSource:getFreeConnection ERROR: Failed while autocommiting a connection: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.>
          2008-12-04 13:52:26,048 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - <Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]>
          2008-12-04 13:52:26,071 INFO [org.springframework.jdbc.support.SQLErrorCodesFactory] - <SQLErrorCodes loaded: [DB2, Derby, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]>
          2008-12-04 13:52:26,075 WARN [org.springframework.jdbc.support.SQLErrorCodesFactory] - <Error while extracting database product name - falling back to empty error codes>
          org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
          Caused by:
          java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
          不知道錯在哪里,我的MSN:hqhe_nj@hotmail.com

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇[未登錄]  回復  更多評論   

          2008-12-04 15:43 by Kerwin Weng
          看起來像是連接被提前關閉了,可以檢查下數據庫端的設置,是否關閉空連接的時間小過xapool為保持空連接而要發起一個查詢的間隔時間

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2008-12-22 16:00 by laogao
          提交了數據 提示保存成功 ,可是數據庫查不到數據,也沒報異常,不知道事務是否又提交?

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇[未登錄]  回復  更多評論   

          2008-12-22 16:15 by Kerwin Weng
          可能性太多了,可以通過查詢數據庫狀態來查看是否有事務沒有提交,具體方法請Google下

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2009-01-20 11:39 by
          能給我發下您改的xapool1.5包么? 我的msn:xgy_accp@hotmail.com

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2009-12-02 19:11 by 李年豐
          我的QQ175353552,能給我發下您改的xapool1.5包么? 感謝大恩大德啊

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2010-02-23 13:55 by joyjiang
          能給我發下您改的xapool1.5包么?
          我的msn: joy_jiang2000@hotmail.com

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2011-11-01 18:17 by sscel
          大哥:也給我發一份你的lib目錄下的jar包,我的郵箱是:1620968451@qq.com

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2011-12-04 12:51 by kira
          最近也在做 jotm,問題一直解不了.也發我一份你的lib目錄下的jar包,carol包的源碼一直沒找到 ..謝謝. email : 763091466@qq.com

          # re: 使用Spring+Hibernate+JOTM+Oracle9i集成解決方案的遭遇  回復  更多評論   

          2012-04-20 11:19 by xinyu
          大哥你好,小弟最近在弄JOTM,同樣mysql事務也無效,我的mysql驅動是5.1的,請您也給我發一份lib目錄下的jar包吧,謝謝您了,email:39843200@qq.com
          主站蜘蛛池模板: 楚雄市| 乐清市| 股票| 同德县| 长白| 佛山市| 浦城县| 房产| 安阳市| 和顺县| 盐山县| 东山县| 扎鲁特旗| 县级市| 科尔| 阿坝| 江孜县| 桂东县| 宜君县| 宾阳县| 渝北区| 泗洪县| 巩留县| 定陶县| 洪洞县| 德昌县| 凌海市| 屏东市| 遂川县| 依兰县| 石门县| 文山县| 怀柔区| 襄樊市| 盈江县| 北川| 平罗县| 桃园县| 裕民县| 敦煌市| 巴彦淖尔市|