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

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

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

    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,我會加你的.

    posted @ 2006-08-11 18:03 Kerwin Weng 閱讀(7158) | 評論 (29)編輯 收藏

    Spring或Hibernate其實都提供了透明處理Clob的方法
    只是個人覺得用Spring的做法比hibernate更透明一點(hibernate2.16);
    具體做法為:
    1.在sessionFactory中加入lobHandler的注射:

    <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
    ??????? <property name="dataSource" ref="dataSource"/>
    ????????<property name="lobHandler" ref="lobHandler"/>
    ??????? <property name="mappingResources">
    ??????????????????<value>xxx.hbm.xml</value>
    ??????????????????.....
    ?????????</property>
    </bean>

    2.定義這個lobHandler,值得注意的是這里有Oracle的版本區別:

    <bean id="lobHandler" lazy-init="true"?? class="org.springframework.jdbc.support.lob.OracleLobHandler">
    ??????? <property name="nativeJdbcExtractor">
    ??????????? <ref bean="nativeJdbcExtractor"/>
    ??????? </property>
    </bean>

    <bean id="nativeJdbcExtractor" lazy-init="true"?? class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>

    因為Oracle9i處理Clob的方式和別的數據庫很不一樣,甚至與Oracle10g都不兼容,所以這里要用spring提供的SimpleNativeJdbcExtractor.如果使用Oracle10g的話,可以直接使用:

    <bean id="lobHandler" lazy-init="true"? class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>

    對應的應該使用Oracle10g對應的JDBC驅動.

    4.在領域對象的hbm中對應的Clob字段應該使用這樣的定義:

    <property name="context" column="context" type="org.springframework.orm.hibernate.support.ClobStringType" length="1048576000"/>

    這里的length是字節了,不是長度哦,最大可以設到2G.對應的,該字段在領域對象中直接申明成String就可以了.當對這個字段寫入長數據時直接調用其set方法就可以了,Spring會自己幫你做余下的處理,讓你透明的處理Clob字段.

    5.業務邏輯層對該字段的操作必須需要在有事務管理的方法中使用,否則會報:
    java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with 'jtaTransactionManager' on LocalSessionFactoryBean required 這個錯誤

    posted @ 2006-04-08 18:48 Kerwin Weng 閱讀(5909) | 評論 (17)編輯 收藏

    [整合]在RedhatAS4.0環境下利用mod_ajp整合apache-2.2.0和tomcat-5.5.12

    今天偶然在網上發現apache-2.2.0增加了一個proxy-ajp模塊,看了看它可以完全代替原來的mod-jk把tomcat和apache結合到一起。于是我就下載下來試了一下真的很方便比原來的方法簡單多了。下面就說明一下我的安裝步驟。tomcat和jdk的安裝網上太多的教程我在這里就不再介紹了。大家可以去查看其他的教程。

    首先從[url]http://www.apache.org[/url]的網站上下載apache-2.2.0的源代碼。apache-2.2.0的版本做了些改動大家需要注意一下。首先apr和apr-util需要單獨的安裝,還有配置文件由原來的一個變為現在的多個不過這樣也好,可以清楚的知道那部分配置在那個配置文件里方便修改。安裝步驟如下:

    解壓apache的源代碼
    # tar xvjf httpd-2.2.0.tar.bz2
    # cd httpd-2.2.0

    安裝apr
    # cd srclib/apr
    # ./configure --prefix=/server/soft/apr
    # make
    # make install

    安裝apr-util
    # cd ../apr-util/
    # ./configure --prefix=/server/soft/apr-util --with-apr=/server/soft/apr
    # make
    # make install
    # cd ../../

    安裝apache
    # ./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite=share    --enable-proxy=share --enable-proxy-ajp=share --enable-dav=share --with-apr=/server/soft/apr --with-apr-util=/server/soft/apr-util/
    # make
    # make install

    # /server/soft/apache/bin/httpd -l //看看是否有proxy-ajp這個模塊
    如果有這個模塊證明proxy-ajp模塊安裝成功,可以進行與tomcat的結合了。

    # vi /server/soft/apache/conf/httpd.conf
    把"#Include conf/extra/httpd-vhosts.conf" 前面的"#"去掉然后編輯
    /server/soft/apache/conf/extra/httpd-vhosts.conf

    編輯為如下的代碼
    <VirtualHost *:80>
        ServerAdmin [email]admin@easyea.com[/email]
        ProxyPass / ajp://localhost:8009/
        ProxyPassReverse / ajp://localhost:8009/
        ServerName localhost
        ServerAlias [url]www.easyea.com[/url]
        ErrorLog logs/easyea.com-error_log
        CustomLog logs/easyea.com-access_log common
    </VirtualHost>

    然后先啟動tomcat,再啟動apache
    # /server/soft/apache/bin/apachctl start
    打開瀏覽器看看是否看到了tomcat的歡迎頁面,如果是說明apache和tomcat的結合成功

    轉自[url=http://blog.easyea.com/louis/2005/12/17/86.htm]http://blog.easyea.com/louis/2005/12/17/86.htm[/url]

    posted @ 2006-03-05 20:16 Kerwin Weng 閱讀(445) | 評論 (0)編輯 收藏

    僅列出標題
    共3頁: 上一頁 1 2 3 
    主站蜘蛛池模板: 国产青草亚洲香蕉精品久久| 日韩精品无码免费专区午夜不卡 | 亚洲精品乱码久久久久久久久久久久 | 免费观看激色视频网站bd| 亚洲码欧美码一区二区三区| 久久国产成人亚洲精品影院| 2021精品国产品免费观看| 亚洲AV无码一区二区乱子仑| 国产AV无码专区亚洲AVJULIA| AV免费网址在线观看| 9i9精品国产免费久久| 亚洲图片激情小说| 国产国拍亚洲精品福利 | 一个人免费观看视频在线中文| 亚洲韩国在线一卡二卡| 国产在线观看免费完整版中文版| 精品国产一区二区三区免费| 国产精品无码亚洲精品2021| 亚洲嫩模在线观看| 亚洲国产精品自产在线播放| 成人免费福利视频| 99久久成人国产精品免费| 亚洲精品永久在线观看| 亚洲精品综合一二三区在线| 免费少妇a级毛片| 无码人妻一区二区三区免费手机| 免费看无码特级毛片| 视频一区在线免费观看| 亚洲av永久无码精品三区在线4| 国产亚洲精品看片在线观看| 在线免费视频一区| 24小时在线免费视频| 在线视频网址免费播放| 另类图片亚洲校园小说区| 亚洲成AV人片久久| 亚洲AV成人无码久久精品老人| 免费A级毛片无码久久版| 免费看美女让人桶尿口| 日本h在线精品免费观看| 免费黄网站在线看| 中文字幕无线码免费人妻|