高度なカスタマイズ > Info*Engine ユーザーガイド > Info*Engine JSP ページ > Adapter Webject と JSP ページ
  
Adapter Webject と JSP ページ
サイトにインストールされている Info*Engine のアダプタに対して Action Webject と Query Webject が定義されています。各アダプタは、特定のタイプの情報システムからのデータにアクセスできるように設計されています。Adapter Webject の詳しい説明と構文については、アクセスする情報システムのアダプタガイドを参照してください。
各アダプタには固有の Webject セットが用意されており、各 Webject に独自のパラメータセットがありますが、Info*Engine では各 Webject からアダプタにアクセスする方法が標準化されています。これを行うには、Info*Engine で各 Adapter Webject に INSTANCE パラメータを含める必要があります。このパラメータによって、使用するアダプタが識別されます。アダプタの識別に使用する名前はさまざまな形式にすることができますが、最も一般的な名前はアダプタの設定時に定義したサービス名です。
アダプタに名前を付けるときは通常、アダプタのサービス名が Info*Engine 環境全体で固有の名前になるようにドメイン名をサービス名の一部として含めます。たとえば、サービス名の定義に使用するコンピュータのドメイン名が myHost.myCompany.com である場合、JDBC アダプタのサービス名は以下のようになります。
com.myCompany.myHost.jdbcAdapter
より簡単なサービス名をサイトで使用することもできます。たとえば、サイトにインストールされている JDBC アダプタが 2 台だけである場合は、JDBCadapter1 および JDBCadapter2 という名前を付けることができます。アダプタがインストールされ、設定されるときに、サイト管理者がアダプタのサービス名を決定します。通常、すべてのサービス名は固有でなければなりません。また、固有性の維持は Windchill 管理者の責任です。
各 Adapter Webject で INSTANCE パラメータを指定します。たとえば、JDBC アダプタを使用してデータベーステーブルを照会する以下の Query-Objects Webject でこれが指定されています。
<%@page language="java" session="false"
                                      errorPage="IEError.jsp"%>
<%@ taglib uri="http://www.ptc.com/infoengine/taglib/core"
                                                  prefix="ie"%>
<html>
<head>
<title> JSP TableList </title>
</head>
<body bgcolor="#FFFFFF">
<h2> I*E JSP Test - TableList </h2>
<%
    String where = request.getParameter ("where");
    if ( where == null )
       where = "()";
    String table = request.getParameter ("table");
    if ( table == null )
       table = "EMP";
    String instance = request.getParameter ("instance");
    if ( instance == null )
       instance = "jdbcAdapter";
%>
<p><b>
Searching table <%= table%> with where clause <%= where%>.
</b></p>
<ie:webject name="Query-Objects" type="OBJ">
  <ie:param name="INSTANCE" data="<%=instance%>"/>
  <ie:param name="ATTRIBUTE" data="*"/>
  <ie:param name="CLASS" data="<%=table%>"/>
  <ie:param name="WHERE" data="<%=where%>"/>
  <ie:param name="GROUP_OUT" data="myGroupOut"/>
</ie:webject>
<p>
<ie:webject name="Display-Table" type="DSP"/>
</body>
</html>
* 
ほとんどの場合、パラメータ値を入力するための適切かつ標準的な方法は、Info*Engine 構文を使用することです。以下のような HTML 構文は使用しません。
<ie:param name="INSTANCE" data="<%=instance%>"/
以下のような Info*Engine 構文を使用します。
<ie:param name="INSTANCE" data="$(@FORM[]instance[])" default=
"jdbcAdapter"/>
INSTANCE パラメータは、必要なパラメータの 1 つに過ぎません。このサンプルページを実行するには、URL で以下の情報を指定する必要があります。
アダプタ名 (jdbcAdapter1 など)
テーブル名 (EMP など)
where=DEPTNO=10 などの where
これを使用して以下の URL を作成します。
http://localhost/Windchill/infoengine/com/company/TableList.jsp?..
この場合、jdbcAdapter1 が INSTANCE パラメータの値になり、EMP が CLASS の値になり、where 節は where=DEPTNO=10 になります。以下のような出力がブラウザに表示されます。
jdbcAdapter1 という名前のアダプタが使用できない場合は、エラーが返されます。アダプタが使用できない場合の影響を最小限に抑えるには、特定の Webject を処理できるアダプタが複数あることがわかっている場合、複数のアダプタを指定します。
複数のアダプタを指定するには、Webject で複数の INSTANCE パラメータ値を指定します。Info*Engine は、Webject で指定された順にアダプタへの接続を試みます。たとえば、jdbcAdapter1 と jdbcAdapter2 の両方のアダプタが Info*Engine 環境で定義されていることがわかっている場合は、以下のように両方とも Query-Objects Webject に含めることができます。
<%
    String where = request.getParameter ("where");
    if ( where == null )
       where = "()";
    String table = request.getParameter ("table");
    if ( table == null )
       table = "EMP";
    String instance1 = request.getParameter ("instance1");
    if ( instance1 == null )
       instance1 = "jdbcAdapter1";
    String instance2 = request.getParameter ("instance2");
    if ( instance2 == null )
       instance2 = "jdbcAdapter2";
%>
<p><b>
Searching table <%= table%> with where clause <%= where%>.
</b></p>
<ie:webject name="Query-Objects" type="OBJ">
  <ie:param name="INSTANCE" data="<%=instance1%>"/>
  <ie:param name="INSTANCE" data="<%=instance2%>"/>
  <ie:param name="ATTRIBUTE" data="*"/>
  <ie:param name="CLASS" data="<%=table%>"/>
  <ie:param name="WHERE" data="<%=where%>"/>
  <ie:param name="GROUP_OUT" data="myGroupOut"/>
</ie:webject>
更新した TableList.jsp ページを実行するための URL は以下のとおりです。
http://localhost/Windchill/infoengine/com/company/TableList.jsp?..
jdbcAdapter1 が使用できる場合は jdbcAdapter1 が使用され、jdbcAdapter1 が使用できない場合は jdbcAdapter2 が使用されます。どちらも使用できない場合はエラーが返されます。
Info*Engine では以下のパラメータも用意されています。これらのパラメータは各 Adapter Webject に追加でき、アダプタへの接続を試行するときに役立ちます。
CONNECTION_ATTEMPTS
エラーを返す前にアダプタの接続の確立を試行する最大回数を定義します。複数の INSTANCE パラメータ値を指定する場合、CONNECTION_ATTEMPTS の値は、アダプタインスタンスのリストを繰り返す最大数を定義します。
CONNECTION_ATTEMPT_INTERVAL
接続の試行間の遅延時間を秒単位で定義します。複数の INSTANCE パラメータ値が指定されている場合、CONNECTION_ATTEMPT_INTERVAL の値は、アダプタインスタンスのリスト全体を繰り返す試行間の待機秒数を定義します。
たとえば、以下のようにこれらのパラメータを前の Query-Objects Webject の例に追加することもできます。
<ie:webject name="Query-Objects" type="OBJ">
  <ie:param name="INSTANCE" data="<%=instance1%>"/>
  <ie:param name="INSTANCE" data="<%=instance2%>"/>
  <ie:param name="CONNECTION_ATTEMPTS" data="3"/>
  <ie:param name="CONNECTION_ATTEMPT_INTERVAL" data="30"/>
  <ie:param name="ATTRIBUTE" data="*"/>
  <ie:param name="CLASS" data="<%=table%>"/>
  <ie:param name="WHERE" data="<%=where%>"/>
  <ie:param name="GROUP_OUT" data="myGroupOut"/>
</ie:webject>
これらのパラメータを追加することによって、どちらかのアダプタへの接続を 3 回試行することと、両方の接続を試行してから再試行するまでに 30 秒間待機することが設定されます。
Adapter Webject の使用方法の詳細については、使用しているアダプタのアダプタガイドを参照してください。