1. 背景
今日の Web サイトでは、アクセス チャネルがますます増えており、WAP、SMS、EMAIL、従来の Web、Socket などのテクノロジーがますます進歩しています。データベースや LDAP さえあれば、アクセスの観点から言えば、新しいチャネルを追加するときにコードの修正やさらにはコードの変更が不要になるように、設計内で拡張する必要があるスペースは非常に優れたものでなければなりません。しかし、それは不可能だと思いますが、このマルチチャネルアクセスフレームワークの完璧さをより良く解決する方法はありますか?
[図 1]
図の 1 つは、既存のアクセスがすべて使用されてしまったとき、シェアを獲得するためであれば、これらのプログラムはどのような方法でも作成でき、確実に実装できるが、それが困難であることを示しています。質問に戻りましょう。どうすればより完璧になれるでしょうか? 写真 2 は、8 本の爪を持つタコのように見えます。脚はすべての Access チャネルに接続されており、これらすべてのチャネルを接続する中心となるのは、このタコの頭である xmlRouter です。ここでの Router の役割は、すべてのチャネルと通信し、データ ルーティングを実現し、拡張性と柔軟性を追求することです。アーキテクチャのシステムには多くの利点があります。 XMLRouter と呼ばれる理由は、柔軟で標準化された言語である XML をデータ伝送媒体として使用しないと、ルーターの負荷が飛躍的に増加するためです。XML 仕様を定義すると、将来の拡張に多くのメリットがもたらされます。
3. アイデアとパターン
XMLRouter の元のアイデアは、コンピューターのマザーボードの Builder パターンから来ており、コンピューターのマザーボードの PCI スロットは、作成するカードに限り PCI 仕様を定義します。 PCI 標準に準拠しており、マザーボードに接続すると動作します。Builder パターンは、複雑な構造を分離し、段階的に実装することを提案しています。複雑なチャネル それらを分離して 1 つずつ実行します。
サービスの考え方: ルーターと通信するには、プログラムがサービス仕様に準拠している限り、統一されたインターフェイスを定義する必要があります。 Factory モードと Composite モード 実際の設計では Router が生成され、RouterFactory に配置されます。キューからデータを送信し、データを受信し、データを返す。対応する Router がキューから取得され、複合モードが適用されます。 4. XML 設定ファイル XML ファイルは、使用するために 2 つの部分に分かれています。最初のものは、次のようなルーターの構成です。 以下は引用部分です:<?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>
これは、ルーターの構成ファイルです。サービス ノードには、コネクタのサブノードが含まれます。データベースの場合、サブノードの構成は、URL、ユーザー、パスワード、ドライバーなどの属性を含みます。ポート、maxthread などの属性が含まれます。属性値は独自の定義に従って構成できます。
別のタイプの XML ファイルは、すべてのサービスでデータが転送されるために使用されます。サービスには、対応する 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>
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; } }
次に、ここでは紹介しませんが、すべての Services クラスを実装する必要があります
6. 説明
上記は XML を使用する方法です。マルチチャネル アクセス Web サイトの構造を実装します。関連コンテンツの詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。