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

首頁 > 開發 > 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的模式設計的,實現異步交易也是可以擴展的,這里不做詳細分析.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕少妇一区二区三区| 在线精品视频视频中文字幕| 亚洲а∨天堂久久精品9966| 久久天堂电影网| 国产精品久久久久久久久久新婚| 亚洲自拍小视频免费观看| 欧美激情国产精品| 亚洲最大在线视频| 日韩av免费在线看| 精品亚洲男同gayvideo网站| 中文字幕精品www乱入免费视频| 欧美日韩亚洲视频一区| 精品久久久999| 亚洲激情在线观看视频免费| 亚洲精品在线看| 欧美一区二区三区免费观看| 一本色道久久88综合亚洲精品ⅰ| 国产精品都在这里| 4p变态网欧美系列| 午夜精品免费视频| 精品视频久久久久久久| 亚洲成人av在线播放| xvideos亚洲人网站| 国产精品高潮呻吟久久av黑人| 欧美日韩国产成人高清视频| 国产女同一区二区| 国产精品视频男人的天堂| 亚洲国产第一页| 欧美亚洲在线播放| 国产91色在线播放| 精品国产一区二区三区久久狼黑人| 日本中文字幕久久看| 成人字幕网zmw| 成人久久18免费网站图片| 国语自产精品视频在免费| 欧美日韩美女在线| 亚洲激情第一页| 亚洲电影免费观看高清完整版在线观看| 欧美日韩加勒比精品一区| 国产一区二区日韩| 97视频免费在线观看| 久久久www成人免费精品| 久久精品国产久精国产一老狼| 亚洲成人av在线播放| 日本欧美国产在线| 欧美成人剧情片在线观看| 欧美精品电影在线| 久久中文字幕一区| 亚洲性xxxx| 成人免费视频网| 亚洲第一区第一页| 欧美性xxxxxxxxx| 亚洲免费视频网站| 国产精品美女在线观看| 日韩在线视频观看正片免费网站| 日韩av网站导航| 欧美性猛交xxxx免费看久久久| 欧美在线视频在线播放完整版免费观看| 欧美黑人极品猛少妇色xxxxx| 中文在线资源观看视频网站免费不卡| 欧美日韩国产123| 欧美日韩在线看| 精品欧美激情精品一区| 在线播放国产一区中文字幕剧情欧美| 日韩精品中文字幕在线播放| 日本一区二区三区在线播放| 亚洲精品999| 久久久久久久久中文字幕| 亚洲国产精品999| 日本欧美爱爱爱| 国产主播在线一区| 亚洲欧美中文日韩在线v日本| 亚洲男人天堂2023| 伊人伊成久久人综合网站| 国产精品福利在线观看网址| 日韩在线观看精品| 色综合视频一区中文字幕| 欧美在线视频网| 92看片淫黄大片欧美看国产片| 亚洲国模精品一区| 亚洲级视频在线观看免费1级| 亚洲欧洲高清在线| 国产女精品视频网站免费| 日韩av网站导航| 岛国av在线不卡| 欧美日韩午夜视频在线观看| 岛国av一区二区三区| 国产日韩在线亚洲字幕中文| 欧美贵妇videos办公室| 精品国产一区二区在线| 国产一区二区三区四区福利| 精品久久久久久中文字幕大豆网| 国内精品久久久久影院优| 国产精品成人v| 狠狠躁天天躁日日躁欧美| 精品欧美aⅴ在线网站| 国产精品久久久久久久av大片| 伊人伊成久久人综合网站| 亚洲天堂av在线免费| 国产v综合v亚洲欧美久久| 亚洲精品国产精品自产a区红杏吧| 亚洲中国色老太| 国产一区二区色| 中文字幕久精品免费视频| 久久久久久久久综合| 日韩成人黄色av| 亚洲春色另类小说| 78m国产成人精品视频| 日韩一区在线视频| 欧美一级淫片videoshd| 精品亚洲一区二区三区在线观看| 久久久久日韩精品久久久男男| 国产亚洲美女精品久久久| 麻豆精品精华液| 久久久免费电影| 国产精品久久久久久久久久久久久久| 欧美午夜www高清视频| 俺去啦;欧美日韩| 亚洲精品国产精品国自产观看浪潮| 成人精品视频在线| 疯狂蹂躏欧美一区二区精品| 日韩在线视频一区| 亚洲一区二区三区乱码aⅴ| 狠狠躁夜夜躁人人躁婷婷91| 91成人福利在线| 日韩小视频在线观看| 伊人久久五月天| 97超碰国产精品女人人人爽| 九九热精品视频国产| 日本精品免费一区二区三区| 国产精品一区av| 欧美午夜宅男影院在线观看| 亚洲最大中文字幕| 久久久久久亚洲精品中文字幕| 韩国三级日本三级少妇99| 欧美日韩激情小视频| 色婷婷av一区二区三区在线观看| 日韩美女av在线| 欧美多人乱p欧美4p久久| 91久久久久久久久久久| 亚洲аv电影天堂网| 中文字幕亚洲综合久久筱田步美| 亚洲午夜女主播在线直播| 一区二区三区www| 亚洲第一精品夜夜躁人人躁| 亚洲成人999| 2019最新中文字幕| 岛国av一区二区在线在线观看| 色噜噜亚洲精品中文字幕| 欧美理论电影在线播放| 亚洲国产一区自拍| 国产日本欧美一区| 久久久久久久久久婷婷| 欧美激情一级欧美精品| 最好看的2019的中文字幕视频| 在线看日韩av| 亚洲天堂久久av| 中文字幕国产精品久久| 久久亚洲国产精品| 亚洲国产日韩欧美在线图片| 亚洲人成网站免费播放| 国产成人亚洲精品| 精品国产一区二区三区久久狼黑人| zzijzzij亚洲日本成熟少妇|