BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   BEA Jolt   |   先頭へ   |   前へ   |   次へ   |   目次   |   索引

 


BEA Tuxedo のバッファ型を Jolt で使用する

Jolt では、次の BEA Tuxedo 組み込みのバッファ型がサポートされています。

注記 X_OCTET の使用方法は CARRAY と同じです。
X_COMMON および X_C_TYPE の使用方法は VIEW と同じです。

Jolt アプリケーションのプログラマは、BEA Tuxedo に組み込まれているバッファ型のうち、特に CARRAY (文字配列) および STRING の扱い方を知っておく必要があります。

BEA Tuxedo の型付きバッファ、データ型、バッファ型に関するすべての情報については、以下のマニュアルを参照してください。

STRING バッファ型を使う

STRING バッファ型は、ヌル以外の文字で構成され、ヌル文字で終結する配列です。CARRAY とは違って、バッファ内のヌル文字までの文字数を指定して転送長を設定できます。 STRING バッファは、自己記述型です。そのため、異なる文字セットを使用するマシン間でデータを交換する場合は、BEA Tuxedo システムによってデータが自動的に変換されます。

注記 Jolt から STRING へのデータ変換時には、STRING バッファの終端にヌル終結文字が自動的に追加されます。Java 文字列はヌルで終結しないためです。

STRING バッファ型を使うには、次の 2 つの操作が必要です。

  1. バッファ型で使用する Tuxedo サービスを定義します。

  2. STRING バッファ型を使用するコードを記述します。

次の 2 つの節では、これらの手順について例を挙げて説明します。

リストの「STRING バッファ型の使い方 (ToUpper.java)」に示すコード ToUpper は、STRING バッファ型が設定されたサービスが Jolt でどのように動作するかを示しています。BEA Tuxedo サービス ToUpper は、BEA Tuxedo のサンプル simpapp で利用できます。

Jolt リポジトリ・エディタで TOUPPER サービスを定義する

ToUpper.java を実行する前に、Jolt リポジトリ・エディタを使用して TOUPPER サービスを定義する必要があります。

注記 サービスを定義したり、新しいパラメータを追加する方法については、「Jolt リポジトリ・エディタを使う」を参照してください。

  1. リポジトリ・エディタの [Logon] ウィンドウの [Services] をクリックします。

    TOUPPER サービスを追加する


     

  2. [Services] ウィンドウで SIMPSERV パッケージに TOUPPER サービスを設定しま す。

  3. [Edit] をクリックします。

    入力バッファ型と出力バッファ型を STRING に設定する


     

  4. [Edit Services] ウィンドウで、STRING の入力バッファ型と STRING の出力バッ ファ型を定義します。リストの「入力バッファ型と出力バッファ型を STRING に 設定する」を参照してください。

  5. TOUPPER サービスの入出力パラメータとして STRING を 1 つだけ定義します。

  6. [Save Service] をクリックします。

ToUpper.java クライアント・コード

次のリスト内に示す Java コード ToUpper.java は、STRING バッファ型が設定されたサービスが Jolt でどのように動作するかを示しています。この例では、STRING バッファ型を使用する Jolt クライアントがサーバにデータを渡す様子を示しています。BEA Tuxedo サーバはバッファを受け取り、文字列をすべて大文字に変換し、変換後の文字列をクライアントに返します。次の例では、セッション・オブジェクトが既にインスタンス化されていることを想定しています。

STRING バッファ型の使い方 (ToUpper.java)

/* Copyright 1996 BEA Systems, Inc. All Rights Reserved */
import bea.jolt.*;
public class ToUpper
{
public static void main (String[] args)
{
JoltSession session;
JoltSessionAttributes sattr;
JoltRemoteService toupper;
JoltTransaction trans;
String userName=null;
String userPassword=null;
String appPassword=null;
String userRole="myapp";
String outstr;
        sattr = new JoltSessionAttributes();
sattr.setString(sattr.APPADDRESS, "//myhost:8501");
        switch (sattr.checkAuthenticationLevel())
{
case JoltSessionAttributes.NOAUTH:
break;
case JoltSessionAttributes.APPASSWORD:
appPassword = "appPassword";
break;
case JoltSessionAttributes.USRPASSWORD:
userName = "myname";
userPassword = "mysecret";
appPassword = "appPassword";
break;
}
sattr.setInt(sattr.IDLETIMEOUT, 300);
session = new JoltSession(sattr, userName, userRole,
userPassword, appPassword);
toupper = new JoltRemoteService ("TOUPPER", session);
toupper.setString("STRING", "hello world");
toupper.call(null);
outstr = toupper.getStringDef("STRING", null);
if (outstr != null)
System.out.println(outstr);
        session.endSession();
System.exit(0);
} // end main
} // end ToUpper

CARRAY バッファ型を使う

CARRAY バッファ型は、BEA Tuxedo システムに組み込まれている文字配列による単純なバッファ型です。CARRAY バッファ型のデータはシステム側で解釈されないため、データ型が明らかであっても Jolt クライアント・アプリケーションでデータの長さを指定する必要があります。このバッファ型を処理するときは、常に Jolt クライアントでデータの長さを指定してください。

たとえば、BEA Tuxedo サービスが CARRAY バッファ型を使用する場合、ユーザが 32 ビットの integer を設定すると (Java では integer はビッグエンディアン・バイト順)、そのデータは変換されずに BEA Tuxedo サービスに送信されます。

CARRAY バッファ型を使用するには、まずバッファ型で使用する Tuxedo サービスを定義します。次に、そのバッファ型を使用するコードを記述します。次の 2 つの節では、これらの手順について説明します。

注記 X_OCTET の使用方法は CARRAY と同じです。

リポジトリ・エディタで Tuxedo サービスを定義する

ECHO の例を実行する前に、Tuxedo ECHO サービスを作成し、起動する必要があります。ECHO サービスは、バッファを取得し、Jolt クライアントに返します。Jolt リポジトリ・エディタを使用して ECHO サービスを定義する必要があります。

注記 サービスを定義したり、新しいパラメータを追加する方法については、「Jolt リポジトリ・エディタを使う」を参照してください。

リポジトリ・エディタ : ECHO サービスを追加する


 

次の手順に従い、リポジトリ・エディタで ECHO サービスを追加します。

  1. リポジトリ・エディタで ECHO サービスを追加します。

  2. 入出力用のバッファ型として CARRAY を定義します。

  3. 入出力用のバッファ型として CARRAY を 1 つだけ指定します

注記 X_OCTET バッファ型を使用する場合は、[Input Buffer Type] フィールドと [Output Buffer Type] フィールドを [X_OCTET] に変更しなければなりません。

リポジトリ・エディタ : ECHO サービスを編集する


 

tryOnCARRAY.java クライアント・コード

次のリストに示すコードは、CARRAY バッファ型が設定されたサービスが Jolt でどのように動作するかを示しています。Jolt は CARRAY データ・ストリームの内部のデータを調べません。したがって、Jolt クライアントと CARRAY サービスのデータ形式を一致させるのはプログラマ側の役割になります。次の例では、セッション・オブジェクトが既にインスタンス化されていることを想定しています。

CARRAY バッファ型の例

/* Copyright 1996 BEA Systems, Inc. All Rights Reserved */
  /* コードからのこの抜粋部分は、バッファ型が CARRAY のサービスに
* Jolt が対応する様子を示したものです。
*/
import java.io.*;
import bea.jolt.*;
class ...
{
...
public void tryOnCARRAY()
{ 
byte data[]; 
JoltRemoteService csvc; 
DataInputStream din; 
DataOutputStream dout; 
ByteArrayInputStream bin; 
ByteArrayOutputStream bout; 
/* 
* java.io.DataOutputStream を使用してデータをバイト配列に出力する。
*/ 
bout = new ByteArrayOutputStream(512); 
dout = new DataOutputStream(bout); 
dout.writeInt(100); 
dout.writeFloat((float) 300.00); 
dout.writeUTF("Hello World"); 
dout.writeShort((short) 88); 
/* 
* バイト配列を新規バイト配列 "data" にコピーする。 
* 次に Jolt リモート・サービス呼び出しを発行する。 
*/ 
data = bout.toByteArray(); 
csvc = new JoltRemoteService("ECHO", session); 
csvc.setBytes("CARRAY", data, data.length); 
csvc.call(null); 
/* 
* JoltRemoteService オブジェクトから応答を獲得する。 
* java.io.DataInputStream を使用して個々の値をそれぞれ 
* バイト配列から引き出す。 
*/ 
data = csvc.getBytesDef("CARRAY", null); 
if (data != null) 
{ 
bin = new ByteArrayInputStream(data); 
din = new DataInputStream(bin); 
System.out.println(din.readInt()); 
System.out.println(din.readFloat()); 
System.out.println(din.readUTF()); 
System.out.println(din.readShort()); 
}
}
}

FML バッファ型を使う

FML (フィールド操作言語) は、型付きバッファとして使用できる柔軟性のあるデータ構造です。FML は、タグ付きの値を格納するデータ構造です。このタグ付きの値には型が付いており、長さを変更することができ、複数のオカレンスを持つ場合があります。FML では、型付きバッファを抽象的なデータ型として扱います。

FML 操作を用いると、データ構造やデータの格納方法を知らなくても、データに対してアクセスしたり、更新を行うことができます。アプリケーション・プログラムでは、単に識別子を使ってフィールド化されたバッファのフィールドにアクセスしたり更新するだけで済みます。操作の実行時には、FML のランタイム・システムによってフィールドの場所と操作を行うデータ型が決定されます。

FML は、クライアントとサーバがそれぞれ別のコード (Java 言語と C 言語など) で記述されている場合、プラットフォームで扱われるデータ型の仕様が異なる場合、またはクライアント/サーバ間のインターフェイスが頻繁に変わる場合の Jolt クライアントでの使用に特に適しています。

次の tryOnFml は、FML バッファ型の使用方法を示しています。この例では、FML バッファを使用する Jolt クライアントがサーバにデータを渡す様子を示しています。サーバはバッファを取得し、データを格納するための新しい FML バッファを作成し、バッファを Jolt クライアントに返します。以下は、コード例の説明です。

tryOnFml.java クライアント・コード

次に示す tryOnFml.java の Java コードの抜粋は、バッファ型が FML であるサービスを Jolt から利用する方法を示しています。この例では、セッション・オブジェクトが既にインスタンス化されていることを想定しています。

tryOnFml.java のコード例

/* Copyright 1997 BEA Systems, Inc. All Rights Reserved */

import bea.jolt.*;
class ...
{
...
public void tryOnFml ()
{
JoltRemoteService passFml;
String outputString;
int outputInt;
float outputFloat;
...
passFml = new JoltRemoteService("PASSFML",session);
passFml.setString("INPUTSTRING", "John");
passFml.setInt("INPUTINT", 67);
passFml.setFloat("INPUTFLOAT", (float)12.0);
passFml.call(null);
outputString = passFml.getStringDef("OUTPUTSTRING", null);
outputInt = passFml.getIntDef("OUTPUTINT", -1);
outputFloat = passFml.getFloatDef("OUTPUTFLOAT", (float)-1.0);
System.out.print("String =" + outputString);
System.out.print(" Int =" + outputInt);
System.out.println(" Float =" + outputFloat);
}
}

FML フィールド定義

次のリストの「tryOnFml.f16 のフィールド定義」は、リストの「tryOnFml.java のコード例」 の FML フィールド定義を示しています。

tryOnFml.f16 のフィールド定義

#
# FML field definition table
#
*base 4100
INPUTSTRING 1 string
INPUTINT 2 long
INPUTFLOAT 3 float
OUTPUTSTRING 4 string
OUTPUTINT 5 long
OUTPUTFLOAT 6 float

リポジトリ・エディタで PASSFML を定義する

BULKPKG パッケージには、PASSFML サービスが含まれており、tryOnFml.java および tryOnFml.c のコードで使用されます。tryOnFml.java を使用する前に、Jolt リポジトリ・エディタを使用して PASSFML サービスを変更する必要があります。

注記 サービスの定義に関しては、「Jolt リポジトリ・エディタを使う」を参照してください。

  1. Jolt リポジトリ・エディタの [Edit Services] ウィンドウで PASSFML サービスを定 義します。入力バッファ型として FML を定義し、出力バッファ型として FML を 定義します。

    図の「[Repository Editor] ウィンドウ : PASSFML サービスを編集する」は、PASSFML サービスおよび入力バッファ型 FML と出力バッファ型 FML を示しています。

    [Repository Editor] ウィンドウ : PASSFML サービスを編集する


     

  2. PASSFML サービスの入力バッファ型と出力バッファ型として FML を定義しま す。

  3. [Edit] をクリックすると、次の図のような [Edit Parameters] ウィンドウが表示され ます。

    PASSFML パラメータを定義する


     

  4. PASSFML サービスのパラメータを定義します。

  5. PASSFML サービスの各パラメータについて、手順 2 から 4 を繰り返します。

tryOnFml.c サーバ・コード

次のリストは、FML バッファ型を使用するためのサーバ・サイドのコードを示しています。PASSFML サービスは、入力 FML バッファを読み込み、FML バッファを出力します。

tryOnFml.c のコード例

/*
 * tryOnFml.c 
*
* Copyright (c) 1997 BEA Systems, Inc. All rights reserved
*
* PASSFML BEA Tuxedo サーバが含まれています。
*
*/
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/stat.h>
#include <malloc.h>
#include <math.h>
#include <string.h>
#include <fml.h>
#include <fml32.h>
#include <Usysflds.h>
#include <atmi.h>
#include <userlog.h>
#include "tryOnFml.f16.h"
/*
* PASSFML サービスは、入力 fml バッファを読み込み、fml バッファを出力します。
*/
void
PASSFML( TPSVCINFO *rqst )
{
FLDLEN len;
FBFR *svcinfo = (FBFR *) rqst->data;
char inputString[256];
long inputInt;
float inputFloat;
FBFR *fml_ptr;
int rt;
if (Fget(svcinfo, INPUTSTRING, 0, inputString, &len) < 0) {
(void)userlog("Fget of INPUTSTRING failed %s",
Fstrerror(Ferror));
tpreturn(TPFAIL, 0, rqst->data, 0L, 0);
}
if (Fget(svcinfo, INPUTINT, 0, (char *) &inputInt, &len) < 0) {
(void)userlog("Fget of INPUTINT failed %s",Fstrerror(Ferror));
tpreturn(TPFAIL, 0, rqst->data, 0L, 0);
}
if (Fget(svcinfo, INPUTFLOAT, 0, (char *) &inputFloat, &len) < 0) {
(void)userlog("Fget of INPUTFLOAT failed %s",
Fstrerror(Ferror));
tpreturn(TPFAIL, 0, rqst->data, 0L, 0);
}
/* FML バッファをそのまま返し、 */
/* 別の FML バッファに格納して返すことも可能 */
if ((fml_ptr = (FBFR *)tpalloc("FML",NULL,rqst->len))==(FBFR *)NULL) {
(void)userlog("tpalloc failed in PASSFML %s",
tpstrerror(tperrno));
tpreturn(TPFAIL, 0, rqst->data, 0L, 0);
}
if(Fadd(fml_ptr, OUTPUTSTRING, inputString, (FLDLEN)0) == -1) {
userlog("Fadd failed with error: %s", Fstrerror(Ferror));
tpfree((char *)fml_ptr);
tpreturn(TPFAIL, 0, NULL, 0L, 0);
}
if(Fadd(fml_ptr, OUTPUTINT, (char *)&inputInt, (FLDLEN)0) == -1) {
userlog("Fadd failed with error: %s", Fstrerror(Ferror));
tpfree((char *)fml_ptr);
tpreturn(TPFAIL, 0, NULL, 0L, 0);
}
if(Fadd(fml_ptr, OUTPUTFLOAT, (char *)&inputFloat, (FLDLEN)0) == -1) {
userlog("Fadd failed with error: %d\n", Fstrerror(Ferror));
tpfree((char *)fml_ptr);
tpreturn(TPFAIL, 0, NULL, 0L, 0);
}
tpreturn(TPSUCCESS, 0, (char *)fml_ptr, 0L, 0);
}

VIEW バッファ型を使う

VIEW は、BEA Tuxedo に組み込まれた型付きバッファであり、BEA Tuxedo システム内で C の構造体や COBOL レコードを扱うために用意されています。この型付きバッファにより、BEA Tuxedo のランタイム・システムは、実行時に読み込まれる view 記述に基づいて C の構造体や COBOL のレコードのフォーマットを認識します。

VIEW を割り当てると、アプリケーションはバッファ型として VIEW を指定し、view の名前 (view 記述ファイル内の名前) を示すサブタイプを指定します。また、パラメータ名と view 内のフィールド名は一致していなければなりません。BEA Tuxedo のランタイム・システムは構造体のサイズに応じて必要な空間を割り当てるため、アプリケーション側でバッファ長を指定する必要はありません。また、ランタイム・システムは、要求または応答の際に送信されるデータ量の計算や、異なるマシン間で送受信されるメッセージの符号化や復号化を自動的に行います。

次は、Jolt クライアントとサーバ・サイド・アプリケーションがある環境での VIEW バッファ型の使い方の例です。

Jolt クライアントでは、VIEW バッファの文字列に含まれるヌル文字は行末文字として扱われ、ヌル文字の後の文字列は切り捨てられます。

リポジトリ・エディタで VIEW を定義する

simpview.java および simpview.c の例を実行する前に、Jolt リポジトリ・エディタを使用して SIMPVIEW サービスを定義する必要があります。

注記 サービスの定義に関しては、「Jolt リポジトリ・エディタを使う」を参照してください。

リポジトリ・エディタ : SIMPVIEW サービスを追加する


 

次の手順に従って、リポジトリ・エディタで VIEW サービスを追加します。

  1. SIMPSERV パッケージに SIMPVIEW サービスを追加します。

  2. SIMPVIEW サービスを定義します。入力バッファ型として VIEW を定義し、出力 バッファ型として VIEW を定義します。

    リポジトリ・エディタ : SIMPVIEW サービスを編集する


     

  3. VIEW サービスのパラメータを定義します。 この例では、パラメータとして inIntinStringoutFloatoutInt、および outString があります。

注記 バッファ型として X_COMMON または X_C_TYPE を使用する場合は、[Input Buffer Type] フィールドと [Output Buffer Type] フィールドに正しいバッファ型を指定する必要があります。また、[Input View Name] フィールドと [Output View Name] フィールドにも、対応する名前を指定してください。

simpview.java クライアント・コード

リストの「simpview.java のコード例」 は、VIEW バッファ型が指定されたサービスが Jolt でどのように動作するかを示しています。クライアント・コードは、FML サービスにアクセスするときに使用されるコードと同じです。

注記 次のリスト内のコードでは、例外はキャッチされません。Jolt の例外は、すべて java.lang.RunTimeException から派生しています。そのため、アプリケーション側でキャッチされない例外は Java 仮想マシンによってキャッチされます(よりよいアプリケーションでは、これらの例外をキャッチして適切な処理を行うべきです)。

次のリストに示す例を実行する前に、Jolt リポジトリ・エディタを使用して SIMPAPP パッケージに VIEW サービスを追加し、BEA Tuxedo アプリケーション simpview.c を記述する必要があります。このサービスは、クライアントの VIEW バッファからデータを取り出し、新しいバッファを作成して、新しい VIEW バッファとしてクライアントに返します。次の例では、セッション・オブジェクトが既にインスタンス化されていることを想定しています。

simpview.java のコード例

/* Copyright 1997 BEA Systems, Inc. All Rights Reserved */
/*
* コードからのこの抜粋部分は、バッファ型が VIEW のサービスに
* Jolt が対応する様子を示したものです。
*/
import bea.jolt.*;
class ...
{
...
public void simpview ()
{
JoltRemoteService ViewSvc;
String outString;
int outInt;
float outFloat;
// BEA Tuxedo サービスに対応する Jolt サービス "SIMPVIEW" を作成する。
ViewSvc = new JoltRemoteService("SIMPVIEW",session);
// SIMPVIEW に必要な入力パラメータを設定する。
ViewSvc.setString("inString", "John");
ViewSvc.setInt("inInt", 10);
ViewSvc.setFloat("inFloat", (float)10.0);
サービスを呼び出す。トランザクションは不要なため、
// "null" パラメータを渡す。
ViewSvc.call(null);
// 結果を処理し、
outString = ViewSvc.getStringDef("outString", null);
outInt = ViewSvc.getIntDef("outInt", -1);
outFloat = ViewSvc.getFloatDef("outFloat", (float)-1.0);
// 表示する。
System.out.print("outString=" + outString + ",");
System.out.print("outInt=" + outInt + ",");
System.out.println("outFloat=" + outFloat);
}
}

VIEW フィールド定義

リストの「simpview.v16 のフィールド定義」は、前のコード例 simpview.java の BEA Tuxedo VIEW フィールド定義を示しています。

simpview.v16 のフィールド定義

#
## SIMPVIEW の VIEW。これは入出力用に使用されます。
# サービスでは入力と出力で異なる VIEW を使用することもできます。
# 先頭から 3 つは入力用、次の 3 つは出力用のパラメータです。
#
VIEW SimpView
$
#type cname fbname count flag size null
string inString - 1 - 32 -
long inInt - 1 - - -
float inFloat - 1 - - -
string outString - 1 - 32 -
long outInt - 1 - - -
float outFloat - 1 - - -
END

simpview.c サーバ・コード

次のコード例で使用される入力バッファ型と出力バッファ型は VIEW です。このコードでは、VIEW バッファ型の入力データを受け付け、同じ VIEW バッファ型のデータを出力します。

simpview.c のコード例

/*
* SIMPVIEW.c
*
* Copyright (c) 1997 BEA Systems, Inc. All rights reserved
*
* SIMPVIEW BEA Tuxedo サーバが含まれています。
*
*/
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/stat.h>
#include <malloc.h>
#include <math.h>
#include <string.h>
#include <fml.h>
#include <fml32.h>
#include <Usysflds.h>
#include <atmi.h>
#include <userlog.h>
#include "simpview.h"
/*
* 以下は simpview.h の内容です。
*
*struct SimpView {
*
* char inString[32];
* long inInt;
* float inFloat;
* char outString[32];
* long outInt;
* float outFloat;
*};
*/
/*
* サービスは、入力 VIEW バッファを読み込み、VIEW バッファを出力する。
*/
void
SIMPVIEW( TPSVCINFO *rqst )
{
/*
* TPSVCINFO 構造から構造 (VIEWSVC) を取得する。
*/
struct SimpView *svcinfo = (struct SimpView *) rqst->data;
/*
* 入力パラメータを UserLog に出力する。 ここではエラーは
* チェックされません。
* 通常、SERVER は入力の正当性をチェックし、
* 不正な入力が検出されると TPFAIL を返します。
*/
(void)userlog("SIMPVIEW: InString=%s,InInt=%d,InFloat=%f",
svcinfo->inString, svcinfo->inInt, svcinfo->inFloat);
/*
* 出力フィールドを設定し、呼び出し側に返す。
*/

strcpy (svcinfo->outString, "Return from SIMPVIEW");
svcinfo->outInt = 100;
svcinfo->outFloat = (float) 100.00;
/*
* エラーが発生すると、TPFAIL
* tpreturn(TPFAIL, ErrorCode, (char *)svcinfo, sizeof (*svcinfo), 0);
が返される。
*/
tpreturn(TPSUCCESS, 0, (char *)svcinfo, sizeof (*svcinfo), 0);
}

XML バッファ型を使う

XML バッファ型を使用すると、BEA Tuxedo アプリケーションで XML 文書を使用して、アプリケーション内やアプリケーション間でデータを交換できるようになります。BEA Tuxedo アプリケーションでは、XML バッファ型を送受信したり、適切なサーバにルーティングできます。解析など、XML 文書のすべての処理ロジックはアプリケーション側に組み込まれています。

理想的な XML 文書は、次の要素で構成されます。

XML バッファ型を使用するには、まずバッファ型で使用する Tuxedo サービスを定義します。次に、そのバッファ型を使用するコードを記述します。次の 2 つの節では、これらの手順について説明します。

注記 CARRAY と同じく、XML バッファ型は STRING ではなくバイト配列として扱われます。Jolt クライアントと BEA Tuxedo サービス間でのデータ変換は行われません。

リポジトリ・エディタで Tuxedo サービスを定義する

XML のサンプルを実行する前に、Tuxedo の XML サービスを記述し、起動する必要があります。XML サービスは、バッファを取得し、Jolt クライアントに返します。Jolt リポジトリ・エディタを使用して XML サービスを定義する必要があります。

注記 サービスを定義したり、新しいパラメータを追加する方法については、「Jolt リポジトリ・エディタを使う」を参照してください。

リポジトリ・エディタ: XML サービスを追加する


 

次の手順に従い、リポジトリ・エディタで XML サービスを追加します。

  1. リポジトリ・エディタで ECHO_XML サービスを追加します。

  2. ECHO_XML サービスの入出力用のバッファ型として XML を定義します。

  3. 入出力用のパラメータとして XML を 1 つだけ指定して ECHO_XML サービスを定 義します。

    リポジトリ・エディタ: XML サービスを編集する


     

simpxml.java クライアント・コード

次のリストに示すコードは、XML バッファ型が設定されたサービスが Jolt でどのように動作するかを示しています。Jolt は XML データ・ストリームの内部のデータを調べません。したがって、Jolt クライアントと XML サービスのデータ形式を一致させるのはプログラマ側の役割になります。次の例では、セッション・オブジェクトが既にインスタンス化されていることを想定しています。

XML バッファ型の例

/* Copyright 2001 BEA Systems, Inc. All Rights Reserved */ 
/* 
* コードからのこの抜粋部分は、バッファ型が XML のサービスに 
* Jolt が対応する様子を示したものです。 
*/ 
import java.io.*; 
import java.lang.*; 
import bea.jolt.*; 
public class xmldoc { 
    public static void main (String[] args) { 
JoltSessionAttributes sattr; 
JoltSession session; 
JoltRemoteService echo_xml; 
String inString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><ORDER> <HEADER  
DATE=\"05/13/1999\" ORDERNO=\"22345\"/><COMPANY>ACME</COMPANY><LINE><ITEM  
MODEL=\"Pabc\" QUANTITY=\"5\">LAPTOP</ITEM></LINE><LINE><ITEM MODEL=\"P500\"  
QUANTITY=\"15\">LAPTOP</ITEM></LINE></ORDER>"; 
        byte data[]; 
DataInputStream din; 
DataOutputStream dout; 
ByteArrayInputStream bin; 
ByteArrayOutputStream bout; 
        byte odata[]; 
String outString = null; 
String appAddress = null; 
        //...Create Jolt Session  
        try { 
/* 
* java.io.DataOutputStream を使用してデータを
* バイト配列に出力する。
*/ 
bout = new ByteArrayOutputStream(inString.length()); 
dout = new DataOutputStream(bout); 
dout.writeBytes(inString); 
            /* 
* バイト配列を新規バイト配列 "data" にコピーする。
* 次に Jolt リモート・サービス呼び出しを発行する。
*/ 
data = bout.toByteArray(); 
} catch (Exception e) { 
System.out.println("toByteArray error"); 
return; 
} 
        try { 
echo_xml = new JoltRemoteService("ECHO_XML", session);  
System.out.println("JoltRemoteService Created"); 
echo_xml.setBytes("XML", data, data.length); 
} catch (Exception e) { 
System.out.println("RemoteService call error" + e); 
return; 
} 
        echo_xml.call(null); 
System.out.println("Service Call Returned"); 
odata = echo_xml.getBytesDef("XML", null); 
        try { 
System.out.println("Return String is:" + new String(odata)); 
} catch (Exception e) { 
System.err.println("getByteDef Error"); 
} 
} 
}
// end of class 

 

先頭へ戻る 前のトピックへ 次のトピックへ