lizhibo

          2011年7月5日 #

          OFBiz開發(fā)的幾個(gè)重要(配置)文件

                OFBiz是一個(gè)非常好的企業(yè)級(jí)開發(fā)框架,實(shí)現(xiàn)了多層的松耦合結(jié)構(gòu),其中一部分松耦合就是通過配置文件實(shí)現(xiàn)的,這里就要提到一些配置文件和開發(fā)文件。

          1、首先是entityengine.xml文件,這個(gè)文件是配置數(shù)據(jù)源的,也包括數(shù)據(jù)庫連接池、事務(wù)實(shí)現(xiàn)類的配置和字段類型配置文件。企業(yè)級(jí)系統(tǒng)的開發(fā)一般都離不開數(shù)據(jù)庫,那么在OFBiz中,數(shù)據(jù)庫的配置就在這個(gè)配置文件里面,先配置一個(gè)group-map,然后配置其對(duì)應(yīng)的數(shù)據(jù)源:

          <delegator name="default" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main"
             distributed-cache-clear-enabled
          ="false">
                  
          <group-map group-name="org.ofbiz" datasource-name="ofbiz"/>
                  
          <group-map group-name="com.aicent" datasource-name="portal"/>
              
          </delegator>

              
          <datasource name="ofbiz"
                      helper-class
          ="org.ofbiz.entity.datasource.GenericHelperDAO"
                      field-type-name
          ="mysql"
                      check-on-start
          ="false"
                      add-missing-on-start
          ="false"
                      check-pks-on-start
          ="false"
                      use-foreign-keys
          ="true"
                      join-style
          ="ansi-no-parenthesis"
                      alias-view-columns
          ="false"
                      drop-fk-use-foreign-key-keyword
          ="true"
                      table-type
          ="InnoDB" 
                      character-set
          ="latin1"
                      collate
          ="latin1_swedish_ci">
                  
          <read-data reader-name="seed"/>
                  
          <read-data reader-name="seed-initial"/>
                  
          <read-data reader-name="demo"/>
                  
          <read-data reader-name="ext"/>
                  
          <inline-jdbc
                          
          jdbc-driver="com.mysql.jdbc.Driver"
                  jdbc-uri
          ="jdbc:mysql://localhost/ofbiztrunk"
                          jdbc-username
          ="root"
                          jdbc-password
          ="123456"
                          isolation-level
          ="ReadCommitted"
                          pool-minsize
          ="2"
                          pool-maxsize
          ="20"/>
                  
          <!-- <jndi-jdbc jndi-server-name="localjndi" jndi-name="java:/MySqlDataSource" isolation-level="Serializable"/> -->
              
          </datasource>

          datasource配置里面有一個(gè)field-type-name="mysql",到entitymodel.xml配置文件就知道是干嗎用的了。

          2.entitymodel.xml & entitygroup.xml
            OFBiz本質(zhì)上來說還是面向數(shù)據(jù)庫的設(shè)計(jì),entitymodel.xml的配置entity的,entity實(shí)體對(duì)應(yīng)數(shù)據(jù)庫里面的table,實(shí)體的field對(duì)應(yīng)數(shù)據(jù)庫里面的字段,如下是一個(gè)entity配置:

          <entity entity-name="Customerinfo" package-name="com.aicent.ccb" no-auto-stamp="true"
                  title
          ="customerinfo">
                  
          <field name="id" type="int10" ></field>
                  
          <field name="name" type="varchar128"></field>
                  
          <field name="customernameshort" type="varchar16"></field>
                  
          <field name="country" type="varchar64"></field>
                  
          <field name="businessaddr" type="text"></field>
                  
          <field name="mailaddr" type="text"></field>
                  
          <field name="billaddr" type="text"></field>
                  
          <field name="phone" type="varchar32"></field>
                  
          <field name="fax" type="varchar32"></field>
                  
          <field name="website" type="varchar128"></field>
                  
          <field name="note" type="text"></field>
          </entity>

          里面有一個(gè)type,這個(gè)type對(duì)應(yīng)數(shù)據(jù)庫字段的類型(日期型,字符串型,整型等),這個(gè)對(duì)于關(guān)系在哪里呢?就在剛才說的field-type-name里面配置,如果配置為mysql,那么entitygengine.xml中mysql的
          field-type指向的文件是:

          <field-type name="mysql" loader="fieldfile" location="fieldtypemysql.xml"/>

          在fieldtypemysql.xml中,就可以找到如int10,varchar128表示的實(shí)際mysql字段類型了:

           1 <fieldtypemodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           2         xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/fieldtypemodel.xsd">
           3   <!-- ===================== field-type-def ==================== -->
           4     <!-- General Types --> 
           5     <field-type-def type="blob" sql-type="BLOB" java-type="java.sql.Blob"></field-type-def>
           6     
           7     <field-type-def type="date-time" sql-type="DATETIME" java-type="java.sql.Timestamp"></field-type-def>
           8     <field-type-def type="date" sql-type="DATE" java-type="java.sql.Date"></field-type-def>
           9     <field-type-def type="time" sql-type="TIME" java-type="java.sql.Time"></field-type-def>
          10     
          11     <field-type-def type="currency-amount" sql-type="DECIMAL(18,2)" java-type="java.math.BigDecimal"><validate method="isSignedDouble" /></field-type-def>
          12     <field-type-def type="currency-precise" sql-type="DECIMAL(18,3)" java-type="java.math.BigDecimal"><validate method="isSignedDouble" /></field-type-def>
          13     <field-type-def type="fixed-point" sql-type="DECIMAL(18,6)" java-type="java.math.BigDecimal"><validate method="isSignedDouble" /></field-type-def>
          14     <field-type-def type="floating-point" sql-type="DECIMAL(18,6)" java-type="Double"><validate method="isSignedDouble" /></field-type-def>
          15     <field-type-def type="numeric" sql-type="DECIMAL(20,0)" java-type="Long"><validate method="isSignedLong" /></field-type-def>
          16     <field-type-def type="integer" sql-type="INTEGER" java-type="Integer"></field-type-def>
          17     
          18     <field-type-def type="id" sql-type="VARCHAR(20)" java-type="String"></field-type-def>
          19     <field-type-def type="id-long" sql-type="VARCHAR(60)" java-type="String"></field-type-def>
          20     <field-type-def type="id-vlong" sql-type="VARCHAR(250)" java-type="String"></field-type-def>
          21     
          22     <field-type-def type="indicator" sql-type="CHAR(1)" java-type="String"></field-type-def>
          23     <field-type-def type="very-short" sql-type="VARCHAR(10)" java-type="String"></field-type-def>
          24     <field-type-def type="short-varchar" sql-type="VARCHAR(60)" java-type="String"></field-type-def>
          25     <field-type-def type="long-varchar" sql-type="VARCHAR(255)" java-type="String"></field-type-def>
          26     <field-type-def type="very-long" sql-type="LONGTEXT" java-type="String"></field-type-def>
          27    
          28     <field-type-def type="comment" sql-type="VARCHAR(255)" java-type="String"></field-type-def>
          29     <field-type-def type="description" sql-type="VARCHAR(255)" java-type="String"></field-type-def>
          30     <field-type-def type="name" sql-type="VARCHAR(100)" java-type="String"></field-type-def>
          31     <field-type-def type="value" sql-type="VARCHAR(255)" java-type="String"></field-type-def>
          32     
          33     <!-- customize field type definitions for ccb -->
          34     <field-type-def type="text" sql-type="TEXT" java-type="String"></field-type-def>
          35     
          36     <field-type-def type="char" sql-type="CHAR(1)" java-type="String"></field-type-def>
          37     <field-type-def type="char125" sql-type="CHAR(125)" java-type="String"></field-type-def>
          38     <field-type-def type="varchar16" sql-type="VARCHAR(16)" java-type="String"></field-type-def>
          39     <field-type-def type="varchar20" sql-type="VARCHAR(20)" java-type="String"></field-type-def>
          40     <field-type-def type="varchar24" sql-type="VARCHAR(24)" java-type="String"></field-type-def>
          41     <field-type-def type="varchar50" sql-type="VARCHAR(50)" java-type="String"></field-type-def>
          42     <field-type-def type="varchar64" sql-type="VARCHAR(64)" java-type="String"></field-type-def>
          43     <field-type-def type="varchar128" sql-type="VARCHAR(128)" java-type="String"></field-type-def>
          44 </fieldtypemodel>

          OFBiz這里為什么不在entitymodel里面直接使用字段在數(shù)據(jù)庫中的類型,而這么繞呢?我想至少有兩個(gè)目的:首先是公司企業(yè)開發(fā)時(shí)可以針對(duì)使用的字段類型有一個(gè)規(guī)范,所有的字段都采用這個(gè)配置文件中的字段類型,而不是開發(fā)人員自己隨意定義數(shù)據(jù)庫字段的類型;第二是為了使用不同Vendor的數(shù)據(jù)庫,如果想從mysql換成oracle,只需要定義另一份fieldtypeoracle.xml,field-type-def中sql-type不變,而sql-tye換成oracle的類型即可。

          entitygroup.xml配置文件時(shí)用于配置entitymodel.xml中配置的entity是屬于哪個(gè)group的,這個(gè)group對(duì)應(yīng)entityengine.xml中的group-name,如果忘記在entitygroup.xml中配置,那么在OFBiz 9之前,這個(gè)entity就無法使用,不會(huì)創(chuàng)建相應(yīng)的table,OFBiz 9以后,默認(rèn)的group name是org.ofbiz。

          <entitygroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:noNamespaceSchemaLocation
          ="http://www.ofbiz.org/dtds/entitygroup.xsd">


              
          <entity-group group="com.aicent" entity="Customerextra" />
              
          <entity-group group="com.aicent" entity="Customerinfo" />

          </entitygroup>

          3.ofbiz-containers.xml 里面配置了各種容器類,經(jīng)常修改的容器就是name為catalina-container的容器,使用的是embeded tomcat,里面可以修改各種tomcat的配置項(xiàng),就像我們修改tomcat的配置文件server.xml一樣,在里面修改端口等信息。

          4.log4j.xml 日志配置文件

          5.component-load.xml 這個(gè)文件在幾個(gè)文件夾中都存在,如framework,applications,specialpurpose中。OFBiz將一個(gè)個(gè)應(yīng)用實(shí)現(xiàn)為component,這些componnet是就好像tomcat中webapps中的一個(gè)個(gè)web應(yīng)用。每次是否加載這個(gè)component可以在component-load.xml配置,如果不想加載,注釋掉就可以。

          <component-loader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xsi:noNamespaceSchemaLocation
          ="http://ofbiz.apache.org/dtds/component-loader.xsd">
              
          <load-component component-location="commonext"/><!-- common component used by most other components -->     
              
          <load-component component-location="securityext"/>
              
          <!--
              <load-component component-location="party"/>
              <load-component component-location="content"/>
              <load-component component-location="workeffort"/>
              <load-component component-location="product"/>
              <load-component component-location="manufacturing"/>
              <load-component component-location="accounting"/>
              <load-component component-location="humanres"/>
              <load-component component-location="order"/>
              <load-component component-location="marketing"/>
              
          -->
          </component-loader>

          到底哪些目錄下的component-load.xml有效呢,這個(gè)目錄在framework/base/config/component-load.xml進(jìn)進(jìn)行配置:

          <component-loader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xsi:noNamespaceSchemaLocation
          ="http://ofbiz.apache.org/dtds/component-loader.xsd">
              
          <load-components parent-directory="framework"/> 
              
          <load-components parent-directory="themes"/> 
              
          <load-components parent-directory="applications"/>
              
          <load-components parent-directory="specialpurpose"/>
              
          <load-components parent-directory="hot-deploy"/>
          </component-loader>

          6.general.properties 這里面配置的東西很多,大家自己去看吧。

          7.cache.properties 配置OFBiz中的緩存,配置這個(gè)文件需要對(duì)OFBiz中的緩存有所了解,這個(gè)在后續(xù)文章中進(jìn)行分析。

          其他還有一些比較配置的文件,就不一一說明了。

          posted @ 2011-07-05 09:14 李志博 閱讀(376) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題  

          My Links

          Blog Stats

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評(píng)論

          主站蜘蛛池模板: 阜宁县| 静乐县| 鹤壁市| 乌兰县| 两当县| 黄石市| 黄大仙区| 郁南县| 搜索| 肥西县| 托里县| 青浦区| 万年县| 平阳县| 缙云县| 三明市| 唐海县| 咸阳市| 内江市| 蓬溪县| 竹溪县| 石台县| 运城市| 武山县| 和田县| 高州市| 休宁县| 台南县| 仁化县| 滦平县| 西平县| 疏附县| 佛山市| 新营市| 东至县| 江陵县| 新津县| 镇坪县| 民乐县| 阿荣旗| 黄骅市|