国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發 > XML > 正文

怎樣使用XML實現多渠道接入網站的構架

2024-09-05 20:54:37
字體:
來源:轉載
供稿:網友

一.背景

在現在的網站中,接入的渠道是越來越多了,技術也是越來越先進,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="createtime" type="timestamp"/>
<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的模式設計的,實現異步交易也是可以擴展的,這里不做詳細分析.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
精品国产一区二区三区不卡在线| 88av在线| 四虎成人免费| 在线国产91| 久久久久久久久亚洲精品| www.蜜桃av| 国产一级免费在线观看| 99视频资源网| 精品女厕厕露p撒尿| free性亚洲| 丁香视频免费观看| 91精品国产91久久久久久青草| 国产www视频在线观看| 尤物视频在线观看视频| 国产女人在线观看| 99热免费观看| 国产色在线播放| 欧美午夜电影一区二区三区| 国产丝袜护土调教在线视频| 亚洲an天堂an在线观看| 国产丝袜自拍| 老司机精品视频一区二区| 福利在线国产| 亚洲第一页在线播放| 国产经典av| 国产一级视频| 国内自拍视频在线看免费观看| 精品视频三区| 国产一区二区三区四区尤物| 亚洲v片在线观看| 91资源在线观看| 国产午夜在线| 国产男女av| 欧美xxxxx性| av在线不卡播放| 在线观看中文| 69视频在线| 国产色a在线| 国产亚av手机在线观看| 国产精品视频一区二区久久| 国产在线观看18| 天堂在线国产| 18激情网站| 国产不卡在线| 国产小视频免费在线网址| 九九热视频免费观看| 久久久久久久久久久久网站 | 色吊丝av中文字幕| 在线免费观看污| 精品国产福利一区二区在线| 国产亚洲精品久久久网站好莱| 日日夜夜中文字幕| 久热免费在线视频| 国产精品一区二区三区视频网站| 国产伦精品一区二区三区高清版禁 | 精品全国在线一区二区| 性国产高清在线观看| 91桃色在线| 日本福利在线| 超碰在线观看免费版| 九九精品九九| 国产性网软件大全| 在线观看的av| 成人欧美日韩| 国产精品69一区二区三区| 精品视频一区二区观看| 一本久久精品| 尤物网址在线观看| 精品美女在线观看视频在线观看| 精精国产xxxx视频在线中文版 | 亚洲欧美一区二区三区在线播放| 综合激情亚洲| 在线成人综合色一区| 麻豆精品永久免费视频| 国产视频三区| 九九热在线观看视频| 中文资源在线官网| 综合激情丁香| 超碰人人在线| 日本三级在线视频| 99久久99久久免费精品小说| 国产在线资源| 毛片网站在线观看| 992tv在线观看在线播放| 丁香视频免费观看| wwwww亚洲| 国产福利在线观看| 中文字幕免费中文| 黄色av网站在线免费观看| 96久久久久久| 国产激情三区| 国产日韩欧美第一页| 欧美aaa一级片| 天天艹天天操| 一区二区精品区| 精品无人乱码| 992tv在线观看在线播放| 国产人成在线观看| 国产精品毛片一区二区三区四区| 超碰在线网站| 成年人在线观看| 四虎国产精品永久在线| av免费在线免费| 亚洲欧美中文字幕在线观看| 一区免费观看| 亚洲网站一区| 九九热视频精品在线观看| 久草网在线视频| 国产综合视频一区二区三区免费| 欧美日韩一区二区三区在线播放| av文字幕在线观看| 任你操在线观看| 天堂在线看视频| 国产女主播在线观看| 91xx在线观看| 日本一二区视频| jlzzjlzz欧美| 黄色片av在线| 国产精品一区牛牛影视| 天天操天天操一操| 国产高清一区二区三区视频| 国产精品入口麻豆电影| 精品一区二区三区高清免费不卡| 国产黄色免费网站| 亚洲午夜久久久久中文字幕| 超碰97国产精品人人cao| 久久久久久国产视频| 中文字幕av中文字幕| 国产区高清在线| 天堂√中文在线| 天天av天天爽| 国产视频福利| 日本不卡视频一区二区| 国产免费福利| 永久免费av网站| 99视频资源网| 日本韩国精品一区二区| 国产一二三区精品视频| 在线免费国产| 国产黄大片在线观看画质优化| av在线电影观看| 国产日韩欧美第一页| 青草在线视频在线观看| 国产不卡在线| 国产日本在线观看| 免费a在线观看| 精品福利视频导航大全| 国产无套粉嫩白浆在线2022年| 人xxxx性xxxxx欧美| 99中文字幕一区| 国产亚洲精品午夜高清影院| 国产在线观看a视频| www黄在线观看| 亚洲免费国产| 亚洲尤物在线视频| 国产99re| 精品无人乱码| 伊人影院在线播放| 136福利第一导航国产在线| 粉嫩av一区| 最好2018中文免费视频| 成 人免费视频播放| 久久久久久久久免费视频| 亚洲大香人伊一本线| 99久久99热久久精品免费看| 国产成人亚洲欧美电影| 国产a国产a国产a| 国产成人亚洲欧美电影| 国产夫妻视频| 在线观看国产福利视频| 日本综合一区二区三区| h视频在线网站| 麻豆精品不卡国产免费看| 免费看成年人视频在线观看| 免费在线播放av| 九七电影韩国女主播在线观看| www.三区| 五月综合网站| 国产福利在线| 在线观看精品一区二区三区| 亚洲欧美中文字幕在线观看 | 国产麻豆精品高清在线播放| 五月亚洲综合| 91欧美在线视频| 超碰97在线免费观看| 国产精品亚洲第五区在线| 最近免费中文字幕大全免费第三页 | 欧美日韩不卡中文字幕在线| 国产aa视频| 白浆爆出在线观看| 国产免费一级片| 国产福利在线看| 欧美日韩一区二区三区视视频| 久草福利资源在线视频| 91xxx在线观看| 亚洲欧美日韩一区成人| 中文字幕在线视频免费观看| 在线免费观看黄色av| 午夜免费视频在线国产| 91涩漫在线观看c|