亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

如何使用XML實現多渠道接入網站的構架

2019-11-18 16:26:12
字體:
來源:轉載
供稿:網友

  一.背景

  在現在的網站中,接入的渠道是越來越多了,技術也是越來越先進,WAP, SMS,EMAIL, 傳統的Web, Socket等等,如果連數據庫和LDAP也算接入的話,那在設計之中需要擴展的空間要做到很好 很好,才保證在添加新的渠道情況下不需要更多的修改代碼甚至不改代碼的情況。但可能嗎?我想也不可能,但有什么方式可以更好的解決這種多渠道接入的框架的完美性呢?

  二.構架

  【圖一】

  如圖一所顯示,在現有的所有接入都已經使用上的時候,設計者看的都眼花繚亂了,如果是為了湊份子,那這些程序怎么寫都可以,而且也肯定可以實現,但維護起來就會比較痛苦,還是回到那個問題,怎么可以實現更完美呢?如圖二顯示:

  【圖二】

  圖二看起來象個八爪的章魚,章魚腿分別連接所有的接入渠道,進行連接所有這些渠道的核心就是這個章魚的頭xmlRouter,Router在此的作用是溝通所有渠道,實現數據的路由,爭強系統在構架上的擴展性和靈活性,好處會很多很多。稱呼為XMLRouter是因為如果不使用XML這種靈活而又規范的語言來做為數據傳輸的媒介,那Router的工作量也同樣會成倍的增加,定義好XML的規范后將為以后的擴展帶來很多好處。

  三.思想和模式

  XMLRouter的最初想法來自于計算機的主板和<>之中的Builder Pattern, 計算機主板的PCI 插槽定義了PCI的規范,只要你生產的卡符合PCI標準,那你插入到這個主板上就可以工作, 至于里面是怎么工作的則是已經封裝好了. Builder Pattern則是提出將復雜的構建分離開來, 一步一步的進行實現.XMLRouter是將這些復雜的渠道分離開來,一個個的進行表現.

  Services思想:為了能和Router進行溝通,在這些渠道接入時必須定義統一的接口,這里成為Services, 只要符合Services規范的程序就可以接入到Router并進行數據的路由.

  Factory模式和Composite模式

  XMLRouter在實際的設計中將采用Factory模式產生,Router由RouterFactory生產, 在投入使用時將放置于隊列中,傳遞數據和接收數據以及返回數據都從隊列中取相應的Router來調用,應用了Composite的模式.

  四.XML配置文件

  XML文件對于Router之中的使用分為兩個部分, 第一個是Router的配置,如:

以下是引用片段:
<?xml version="1.0" ?>
<services>
   <!-- database Service -->
   <service name="database" type="database" class="com.web.service.DBService">
   <connector
       driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
       url="jdbc:microsoft:sqlserver://192.168.0.179:1433" user="test"
       passwd="test" />
   </service>
   <!-- Web Service-->
   <service name="web" type="web" class="com.web.service.WebService" >
     <connector />
   </service>
……
</services>

  這是Router的配置文件, service節點代表需要接入的渠道, service節點包含connector子節點, 子節點的配置根據type來區分, 如果是database則包含url, user, passwd,driver等屬性, 如果是socket則包含 port, maxthread等屬性, 屬性值可以根據自己的定義來配置.

  另一種XML文件則是XML交易數據文件,用于在所有的services中傳遞數據,每個Services自己包涵一個相應的XML文件,比如webtrans.xml格式如下:

以下是引用片段:
<?xml version="1.0" ?>
<transaction>
   <trans name="addDoc" service="database" method="insert">
     <     <property name="creatorid" type="long"/>
     <property name="doctypeid" type="int"/>
     <property name="docstatusid" type="int"/>      
   </trans>    
</transaction>

  相應的dbtrans.xml格式如下

以下是引用片段:
<trans name="addDoc" table="TDOC_DOCS" method="insert">
     <primarykey name="docid" />    
     <set>
       <property name="createtime" type="timestamp"/>
       <property name="creatorid" type="long"/>
       <property name="doctypeid" type="int"/>
       <property name="docstatusid" type="int"/>      
     </set>
   </trans>


  其余XML則可按這樣的規則來定制

  五.技術實現

  RouterFactory

以下是引用片段:
package com.web.router;
import com.web.platform.Exception.RouterException;
import java.util.java/util/Hashtable.java.html" target="_blank">Hashtable; 

以下是引用片段:
/**
 * Router產生和清除的類
 */
public class RouterFactory 
{
  /**
   * Router存儲的樹front
   */
  private static java/util/Hashtable.java.html" target="_blank">Hashtable QueuePairFront = null;
  /**
   * Router存儲的樹back
   */
  private static java/util/Hashtable.java.html" target="_blank">Hashtable QueuePairBack = null; 
/**
   * Router存儲的樹
   */
  private static java/util/Hashtable.java.html" target="_blank">Hashtable QueueRouter = null; 

  /**
   * 返回的XMLRouter
   */
  public static XMLRouter instance = null;
  /**
   * Router的定義
   */
  public static RouterDefine routerdefine = null;
  /**
   * Router的ID號
   */
  public static long routeIndex = 0;
  /**
   * @roseuid 3F169C21027C
   */
  public RouterFactory() 
  {
  }
  /**
   * 初始化Hashtable和Vector
   */
  public static void initFactory() throws java/lang/Exception.java.html" target="_blank">Exception
  {
      QueuePairFront = new java/util/Hashtable.java.html" target="_blank">Hashtable(); 
      QueuePairBack = new java/util/Hashtable.java.html" target="_blank">Hashtable(); 
      QueueRouter    = new java/util/Hashtable.java.html" target="_blank">Hashtable();
      initRouteDefine();
  } 
/**
   * 初始化Route的設置
   * 
   */
  private static void initRouteDefine() throws java/lang/Exception.java.html" target="_blank">Exception
  {
      if( routerdefine == null )
        routerdefine = new RouterDefine();
      routerdefine.loadRouterDef();
  }
  /**
   * 返回實例
   * @return com.web.router.XMLRouter
   */
  public static XMLRouter getInstance(long index) throws RouterException
  {
     return (XMLRouter)QueueRouter.get(new java/lang/Long.java.html" target="_blank">Long(index));
  } 

  /**
   * 產生一個XMLRouter的實例
   * @return com.web.router.XMLRouter
   * @roseuid 3F1618A103BC
   */
  public static XMLRouter popInstance() throws RouterException
  {
      routeIndex ++;
      instance = new XMLRouter(routeIndex);
      setDefine( instance );
      QueueRouter.put(new java/lang/Long.java.html" target="_blank">Long(routeIndex), instance);     
     return instance;
  }
  /**
   * 清空Hashtable,Vector等
   * @roseuid 3F1618B203C1
   */
  private static void freeResource() throws java/lang/Exception.java.html" target="_blank">Exception
  {
      QueuePairFront.clear();
      QueuePairBack.clear();
      QueueRouter.clear();
      QueuePairFront = QueuePairBack = QueueRouter = null;
}
  /**
   * 清除實例
   * @param instanceID
   * @throws Exception
   */
  public static void removeInstance(XMLRouter instance) throws java/lang/Exception.java.html" target="_blank">Exception 
  {
      instance.clear();
     QueueRouter.remove( new java/lang/Long.java.html" target="_blank">Long(instance.getIndex() ) ) ;
  }
/**
 * Method isNull.
 * @return boolean
 */
  public static boolean isNull()
  {
     …… 
      return false;
  }
}

  XMLRouter

以下是引用片段:
package com.web.router; 
import com.web.platform.Exception.RouterException;
import com.web.common.*;
import java.util.*;
import java.lang.reflect.java/lang/reflect/Method.java.html" target="_blank">Method;
import java.lang.reflect.java/lang/reflect/Constructor.java.html" target="_blank">Constructor; 
/**
 * @author keli
 * @version 0.0.1
 * 平臺的關鍵,路由的類,每個Router將從RouterFactory里讀取
 * Router存儲的樹front,和back,routeIndex,目的是為了能在路由
 * 之后可以清除申請的對象。
 * Router可以實現同步和異步的功能.
 */
public class XMLRouter 
{
  /**
   * Router存儲的樹front
   */
   private static java/util/Hashtable.java.html" target="_blank">Hashtable QueuePairFront = null;
  /**
   * Router存儲的樹back
   */
   private static java/util/Hashtable.java.html" target="_blank">Hashtable QueuePairBack = null; 
/**
   * 本router的index號碼
   */
   private long routeIndex = 0; 
/**
   * router的設置
   */
   private RouterDefine define = null;  
/**
   * 用于判斷是路由的起回點
   */
   private java/lang/String.java.html" target="_blank">String action = "";
   /**
   *此變量只是用于在routeto方法中申請新的class 
   */
   private java/lang/String.java.html" target="_blank">String classname = "";
    /**
   */
    public XMLRouter(long index) 
    {
     routeIndex = index;
    }
    /**
   * 路由
   * @throws Exception
   * @roseuid 3F1616BD0186
   */
    public void routing(Env env) throws RouterException, java/lang/Exception.java.html" target="_blank">Exception 
    {
      /*如果為起點*/
     if( action.equalsIgnoreCase( RouterConstant.CFG_FUNC_ROUTETO ) )  
     {
       ……
     }
     /*如果為返回點*/
     else if( action.equalsIgnoreCase( RouterConstant.CFG_FUNC_ROUTEBACK ) )
     {
     ……
     }
     /*否則為錯誤*/
     else
       throw new RouterException("Set Router action error.");
    }


   /**
   * 讀取本Router的id號.
   * @return long
   */
   public long getIndex()
   {
      return routeIndex;    
   }

/**
   * 清除所有對象.
   * @throws RouterException
   */
   public void clear() throws RouterException
   {
     QueuePairFront.remove(new java/lang/Long.java.html" target="_blank">Long(routeIndex));
     QueuePairBack.remove(new java/lang/Long.java.html" target="_blank">Long(routeIndex));
     /*系統回收*/
     java/lang/System.java.html" target="_blank">System.runFinalization();     
   } 

   /**
   * 設置本Router的設置.
   * @param def
   * @throws RouterException
   */
   public void setDefine(RouterDefine def) throws RouterException
   {
     define = def;  
   } 
   /**
   * 設置action的值
   * @param actionName
   * @throws RouterException
   */
   public void setAction( java/lang/String.java.html" target="_blank">String actionName )
   {
     action = actionName;    
   }
}

  Service類

以下是引用片段:
package com.web.common; 
import com.web.platform.Exception.RouterException; 
/**
 * Service的父類,abstract 
 */
public abstract class RouteService 
{
  /**
   */
  public RouteService() 
  {
  }
  /**
   * routeTo方法,是交易的起點。
   * @param env
   * @throws RouterException
   */
  public abstract void routeto(Env env) throws RouterException;
  /**
   * routeBack,交易的結束點,
   * @param env
   * @throws RouterException
   */
  public abstract void routeback(Env env) throws RouterException;
  /**
   * routeaccept方法,是交易的接收點,也是routeto的接收函數,
   * routeaccept為被動交易對象的主要處理函數
   * @param env
   * @throws RouterException
   */
  public abstract void routeaccept(Env env) throws RouterException;  
  /**
   * routing方法,是Service對外的接口函數
   * @throws RouterException
   */
  public abstract void routing() throws RouterException;

  接下來則需要實現所有的Services的類了,這里就不做介紹了.

  六.說明

  這個Router到目前為止只能實現同步的交易, 暫時不支持異步的交易,但是由于對Router使用了Composite的模式設計的,實現異步交易也是可以擴展的,這里不做詳細分析.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久精品国产| 色av吧综合网| 国产亚洲视频在线| 91深夜福利视频| 欧美激情在线狂野欧美精品| 亚洲一区国产精品| 亚洲va男人天堂| 国产欧美日韩精品专区| 色综合久久久久久中文网| 91啪国产在线| 不卡伊人av在线播放| 91a在线视频| 538国产精品一区二区在线| 成人福利在线视频| 91在线免费观看网站| 欧美性猛交99久久久久99按摩| 久久天天躁日日躁| 国产成人一区二区三区| 国产精品露脸av在线| 亚洲一区二区三区在线视频| 91视频九色网站| 精品久久香蕉国产线看观看gif| 国产精品极品美女在线观看免费| 久久久久久97| 欧美体内谢she精2性欧美| 国产综合久久久久久| 国产精品羞羞答答| 欧美日韩国产一区在线| 精品久久久久久久久国产字幕| 韩剧1988在线观看免费完整版| 国产手机视频精品| 亚洲国产日韩欧美在线图片| 久久久91精品国产| 国产精品视频精品视频| 欧美激情乱人伦| 91国偷自产一区二区三区的观看方式| 韩国视频理论视频久久| 亚洲成人久久久久| 国产精品视频在线观看| 欧美夜福利tv在线| 亚洲男人av电影| 久久91精品国产91久久久| 久久久久久尹人网香蕉| 日韩美女在线看| 久久精品国产99国产精品澳门| 色婷婷av一区二区三区在线观看| 国产成人亚洲综合| 亚洲乱码一区av黑人高潮| 亚洲午夜未满十八勿入免费观看全集| 欧美电影在线观看高清| 亚洲欧美激情在线视频| 狠狠干狠狠久久| 久久久最新网址| 亚洲天天在线日亚洲洲精| 日韩欧美精品免费在线| 久久久久北条麻妃免费看| 正在播放亚洲1区| 91免费看国产| 粉嫩老牛aⅴ一区二区三区| 夜夜嗨av一区二区三区四区| 色偷偷偷综合中文字幕;dd| 日韩精品在线免费观看视频| 亚洲一区二区少妇| 久久免费国产精品1| 亚洲国产精品va在线观看黑人| 国产精品网站视频| 久久久在线观看| 国产精品亚洲综合天堂夜夜| 亚洲精品国产综合久久| 欧美极品xxxx| 亚洲一区二区国产| 人人爽久久涩噜噜噜网站| 中国人与牲禽动交精品| 91精品国产沙发| 中文欧美日本在线资源| 九九热精品视频在线播放| 亚洲午夜久久久影院| 欧美在线一区二区视频| 亚洲欧美中文日韩在线v日本| 91在线高清免费观看| 久久久免费电影| 欧美日韩国产影院| 日韩在线观看av| 亚洲毛片在线看| 2019中文在线观看| xxav国产精品美女主播| 欧美人交a欧美精品| 色妞色视频一区二区三区四区| 亚洲乱亚洲乱妇无码| 久久人人看视频| 久久久成人精品| 亚洲欧洲第一视频| 国产成人涩涩涩视频在线观看| www.欧美免费| 911国产网站尤物在线观看| 精品国产一区二区三区四区在线观看| 欧美做爰性生交视频| 最近2019中文字幕第三页视频| 中文字幕视频在线免费欧美日韩综合在线看| 成人免费高清完整版在线观看| 国产精品久久国产精品99gif| 亚洲女同性videos| 国语自产精品视频在线看抢先版图片| 亚洲精品乱码久久久久久按摩观| 欧美成人精品在线播放| 欧美精品videos性欧美| 国产婷婷成人久久av免费高清| 欧美日韩成人在线观看| 欧美理论电影网| 日韩精品在线视频| 欧美一级bbbbb性bbbb喷潮片| 91成人精品网站| 日韩欧美在线视频日韩欧美在线视频| 国产suv精品一区二区三区88区| 久久久爽爽爽美女图片| 亚洲a级在线播放观看| 欧美精品激情在线| 久久久久女教师免费一区| 日韩美女在线观看| 亚洲成人精品av| 成人激情在线观看| 欧美电影免费观看大全| 亚洲大胆人体在线| 亚洲福利视频专区| 国产一区二区三区日韩欧美| 成人午夜黄色影院| 日本精品视频在线| 成人午夜一级二级三级| 久久国产精品久久精品| 精品动漫一区二区| 亚洲第一男人av| 欧美高清无遮挡| 奇米4444一区二区三区| 成人网欧美在线视频| 日韩精品极品视频| 最近日韩中文字幕中文| 久久97久久97精品免视看| 最近2019中文字幕大全第二页| 日韩在线免费视频观看| 91精品国产成人| 日韩三级影视基地| 91久久嫩草影院一区二区| 精品久久久一区| 日韩在线免费av| 欧美激情在线一区| 成人性生交大片免费看视频直播| 伊人久久男人天堂| 欧美日韩国产综合新一区| 日韩在线视频线视频免费网站| 午夜精品福利在线观看| 热99久久精品| 国产精品小说在线| www.99久久热国产日韩欧美.com| 欧美日韩亚洲视频| 国产精品女视频| 亚洲高清一二三区| 欧美日韩在线看| 91丨九色丨国产在线| 日韩欧美国产中文字幕| 欧美午夜精品伦理| 欧美成人黑人xx视频免费观看| 国产亚洲视频在线| 亚洲精品国产精品自产a区红杏吧| 国产精品国模在线|