Teiidは、 Oracle 、 DB2 、 M $ SQL Server 、 MySQL 、 PostgreSQL 、 SalesForceなどの多くのデータソースをネイティブにサポートしますが、同時にWebサービス、XML、JSONを操作するための便利なツールも提供します。 このツールキットに基づいて、簡単なデータソースへのアクセスを簡単に構築できます(たとえば、twitterでリクエストを作成し、Teiidには配信で既製のサンプルがあります)。これは、 DDL記述でのみ実行できます。 しかし、もっと複雑なことのために、すでにコードを書く必要があります。
記事の2番目の部分 。
このパートでは、DDLを使用した記述方法を検討し、次にトランスレーターを作成します。
一般に、ソースへのアクセスを整理するには、コネクタとトランスレータの2つのコンポーネントが必要です。 コネクターは接続自体に責任があり、トランスレーターはソースデータ(要求)を集約し、コネクターが提供する接続を介して送信し、応答を受信し、Teeidに適した形式に変換します。
伝統的に、著者はhabrに関する投稿で説明されていることを説明するために、habrに関連する何かを使用します。 どうして? データソースとして、Habr-api: http ://habrahabr.ru/api/profile/%name%を使用します。
Teiidに付属している他のコネクタの中には、http / httpsアクセスを提供するサービスに適したユニバーサルWSコネクタがあります。 これを使用して、HabrのWebサービスにアクセスします。
基本設定
まず、データソースを登録する必要があります。 JBoss 7の場合、これを%JBOSS_HOME%/ standalone / configuration / standalone.xmlファイル(または... domain ... )に追加する必要があります。
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"> [...] <resource-adapters> <resource-adapter> <archive>teiid-connector-ws.rar</archive> <transaction-support>NoTransaction</transaction-support> <connection-definitions> <connection-definition class-name="org.teiid.resource.adapter.ws.WSManagedConnectionFactory" jndi-name="java:/habrDS" enabled="true" use-java-context="true" pool-name="habr-ds"><!-- [1] --> <config-property name="EndPoint">http://habrahabr.ru/api/profile/</config-property><!-- [2] --> </connection-definition> </connection-definitions> </resource-adapter> </resource-adapters> [...]
重要なポイントが2つあります。マーク[1]が付いている行には、データソースのJNDI名を設定します(今後この名前を使用します)。マーク[2]が付いた行には-エンドポイント-サービスのURL。
DDLの作成
Teiidに付属しているtwitterでのリクエストの実装例については、すでに上で述べました。 同じ方法でHabr-apiにアクセスするには、VDBファイルに正しいDDLを書き込むだけで十分です。
したがって、 habr-vdb.xml :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <vdb name="habr" version="1"> <model name="habr"> <source name="habr" translator-name="rest" connection-jndi-name="java:/habrDS"/> </model> <model name="habrview" type="VIRTUAL"> <metadata type="DDL"><![CDATA[ CREATE VIRTUAL PROCEDURE getHabr(name varchar) RETURNS (login varchar(128), karma float, rating float, ratingposition long) AS select ha.* from (call habr.invokeHTTP(action => 'GET', endpoint =>querystring(name))) w, XMLTABLE('habrauser' passing XMLPARSE(document w.result) columns login varchar(128) PATH 'login', karma float PATH 'karma', rating float PATH 'rating', ratingposition long PATH 'ratingPosition') ha; CREATE VIEW Habr AS select * FROM habrview.getHabr; ]]> </metadata> </model> <translator name="rest" type="ws"> <property name="DefaultBinding" value="HTTP"/> <property name="DefaultServiceMode" value="MESSAGE"/> </translator> </vdb>
実際、これはデータソースの既製の実装です。 Habr-apiを介して任意のユーザーに関する情報を取得するために十分に書かれています。
コードをより詳細に解析する
/>
-継承を通じて新しい翻訳者を記述する方法(タイプ-親翻訳者の名前、名前-作成された翻訳者の名前) このメソッドは、デフォルト値以外のプロパティの値を設定できるようにするためのものです。 なぜなら プロパティーのデフォルト値は
DefaultBinding = SOAP12
であり、ws
DefaultBinding = SOAP12
を直接使用することはできません。
通常のWSコネクターは、invokeHTTP()プロシージャーを実装します。これにより、すべての機能が機能します。
/>
は、 habrDSデータソース (上記のstandalone.xmlで説明しました)と新しく作成された「 rest 」 トランスレーターを接続するのに役立ちます。 したがって、
habr.invokeHTTP()
が呼び出されると、特定のパラメーターとWebサービスの指定されたURLで
habr.invokeHTTP()
を呼び出します。
直接データ処理の場合、追加のモデルを作成する必要があります-
/>
:実際、
type="VIRTUAL"
モデルでのみDDLを介してデータベースエンティティを記述できますが、データソースとトランスレーターはnonでのみ指定できます-仮想モデル、両方が必要です。
ここではすべてが簡単です。入力パラメーターと結果を記述する仮想プロシージャ
getHabr
を作成し、SELECT要求を介して実装されます。この要求は、
habr.invokeHTTP()
を呼び出してWebサービスへのGET要求を実行します(結果の目的で)エイリアス
w
)。 ここで、
name
パラメータは仮想プロシージャから実際のプロシージャに渡されます。
habr.invokeHTTP()
は、受信したデータをresultパラメーターで返します。これは、
XMLPARSE(document w.result)
組み込み関数
XMLPARSE(document w.result)
に渡され
XMLPARSE(document w.result)
。ここで、
document
とは、フラグメントではなく整形式のXMLを意味します。 この関数は、受信したデータを解析し、すでにXMLツリーの形式で
XMLTABLE
関数に渡します
XMLTABLE
関数では、仮想プロシージャに対して、型を示す列のリストを指定し、型に加えて、値のパスを指定しますXMLドキュメントから取得します。
'habrauser'
はベースパスを意味します。
最後のステップ:仮想プロシージャの呼び出しとして実装されるビューを作成し、それに応じて出力パラメーターのリストを構造として取得します。
それだけです 残りはリクエストを行うことのみです:
select * from habrview.habr where name='elfuegobiz'