接続処理

Oracle Forms 接続は、OraFormsConnect で確立し、OraFormsDisconnect で切断します。 記録されるスクリプトには、TMain トランザクション開始時の OraFormsConnectTMain での最後の Oracle Forms 呼び出しとしての OraFormsDisconnect が含まれます。 OraFormsDisconnect を呼び出して確実にサーバー接続を切断する必要があります。呼び出さなかった場合、クライアントを処理するサーバー ランタイム プロセスは動作し続けます。

OraForms.bdh は、サーバー エラーが原因で仮想ユーザー プロセスが終了したときに OraFormsDisconnect を呼び出すイベント ハンドラーを実装しています。

1 つのログイン プロシージャがあり、テスト対象のアクションを実行する Main トランザクションが複数存在するシナリオでは、トランザクションの開始時に接続を確立したことを確認する必要があります。 サーバー エラーが原因で接続が切断された場合、後続のトランザクションは接続を再確立する必要があります。

この問題に対応するための推奨方法は、Oracle Forms アプリケーションへの接続を確立するスクリプト コードを記述した BDL 関数を作成することです。 この関数は、OraFormsIsConnected メソッドを使用して、接続が既に確立されているかどうかを問い合わせることができます。 この関数は、アプリケーションへの接続が必要な各 Oracle Forms トランザクションの開始時に呼び出す必要があります。

記録後、スクリプトは次のような状態になっているはずです。
var
  gsSSessionID : string;

dclrand

dcltrans
  transaction TInit
  begin
    OraFormsInit("http://lnz-vmoraf11:8888/forms/lservlet", "lnz-vmoraf11", 9000, ORA_FORMS_11G);
    //WebSetUserBehavior(WEB_USERBEHAVIOR_FIRST_TIME);
    //WebSetDocumentCache(true, WEB_CACHE_CHECK_SESSION);
  end TInit;

  transaction TShutdown
  begin
    OraFormsDestroy();
  end TShutdown;

  transaction TMain
  begin
    WebSetBrowser(WEB_BROWSER_MSIE8);
    WebModifyHttpHeader("Accept-Language", "de-at");
    WebPageUrl("http://lnz-vmoraf11:8888/forms/frmservlet", "iOrganizer", FORMS_FRMSERVLET001);
 
    WebSetBrowser(WEB_BROWSER_CUSTOM);
    WebSetUserAgent("Java1.6.0.21");
    WebSetHttpVersion("HTTP/1.1");
    WebModifyHttpHeader("Accept-Language", NULL, WEB_MODIFY_ OPT_Remove);
    WebUrl("http://lnz-vmoraf11:8888/forms/java/f90all_ jinit.jar", 29.61);
    WebUrl("http://lnz-vmoraf11:8888/forms/jars/iorganizer.jar", 0.42);
    WebUrl("http://lnz-vmoraf11:8888/forms/iorg_images/iorganizer.gif", 0.45);
    WebUrl("http://lnz-vmoraf11:8888/forms/images/blue.gif", 0.43);
    WebUrl("http://lnz-vmoraf11:8888/forms/java/oracle/forms/registry/Registry.dat", 0.08);
    WebUrl("http://lnz-vmoraf11:8888/forms/iorg_registry/iorg_registry.dat", 6.58);
 
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 1111003);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1280, 1024);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetByte("FONT_WEIGHT", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect("server escapeParams=true module=iorganizer.fmx userid=  debug=no host= port= usesdi=yes record=names", 
      "http://lnz-vmoraf11:8888/forms/lservlet?ifcfs=/forms/frmservlet?config=iorg&ifsessid=formsapp.4&acceptLanguage=de-at", 
      "http://lnz-vmoraf11:8888/forms/frmservlet?config=iorg");
    OraFormsGetSessionId(gsSSessionID);
    WebCookieSet(gsSSessionID, "http://lnz-vmoraf11:8888/forms/java/");
 
    // ---
    // New window activated: 10
    OraFormsSetWindow("10");
    ThinkTime(6.6);

    …
end TMain
カスタマイズ後、スクリプトは次のように表示されるはずです。
var
  gsSSessionID : string;

dclfunc
  function DoConnect
  begin
    WebSetBrowser(WEB_BROWSER_MSIE8);
    WebModifyHttpHeader("Accept-Language", "de-at");
    WebPageUrl("http://lnz-vmoraf11:8888/forms/frmservlet", "iOrganizer", FORMS_FRMSERVLET001);
 
    WebSetBrowser(WEB_BROWSER_CUSTOM);
    WebSetUserAgent("Java1.6.0.21");
    WebSetHttpVersion("HTTP/1.1");
    WebModifyHttpHeader("Accept-Language", NULL, WEB_MODIFY_ OPT_Remove);
    WebUrl("http://lnz-vmoraf11:8888/forms/java/f90all_ jinit.jar", 29.61);
    WebUrl("http://lnz-vmoraf11:8888/forms/jars/iorganizer.jar", 0.42);
    WebUrl("http://lnz-vmoraf11:8888/forms/iorg_images/iorganizer.gif", 0.45);
    WebUrl("http://lnz-vmoraf11:8888/forms/images/blue.gif", 0.43);
    WebUrl("http://lnz-vmoraf11:8888/forms/java/oracle/forms/registry/Registry.dat", 0.08);
    WebUrl("http://lnz-vmoraf11:8888/forms/iorg_registry/iorg_registry.dat", 6.58);
 
    // Connect - with connection properties
    OraFormsSetInt("INITIAL_VERSION", 1111003);
    OraFormsSetPoint("INITIAL_RESOLUTION", 96, 96);
    OraFormsSetPoint("INITIAL_DISP_SIZE", 1280, 1024);
    OraFormsSetInt("INITIAL_COLOR_DEPTH", 256);
    OraFormsSetString("FONT_NAME", "Dialog");
    OraFormsSetInt("FONT_SIZE", 900);
    OraFormsSetByte("FONT_STYLE", 0);
    OraFormsSetByte("FONT_WEIGHT", 0);
    OraFormsSetPoint("INITIAL_SCALE_INFO", 8, 20);
    OraFormsSetBoolean("WINSYS_REQUIREDVA_LIST", false);
    OraFormsSetString("DEFAULT_LOCAL_TZ", "Europe/Berlin");
    OraFormsConnect("server escapeParams=true module=iorganizer.fmx userid=  debug=no host= port= usesdi=yes record=names", 
      "http://lnz-vmoraf11:8888/forms/lservlet?ifcfs=/forms/frmservlet?config=iorg&ifsessid=formsapp.4&acceptLanguage=de-at", 
      "http://lnz-vmoraf11:8888/forms/frmservlet?config=iorg");
    OraFormsGetSessionId(gsSSessionID);
    WebCookieSet(gsSSessionID, "http://lnz-vmoraf11:8888/forms/java/");

  end DoConnect;

dcltrans
  transaction TInit
  begin
    OraFormsInit("http://lnz-vmoraf11:8888/forms/lservlet", "lnz-vmoraf11", 9000, ORA_FORMS_11G);
    //WebSetUserBehavior(WEB_USERBEHAVIOR_FIRST_TIME);
    //WebSetDocumentCache(true, WEB_CACHE_CHECK_SESSION);
  end TInit;

  transaction TShutdown
  begin
    OraFormsDestroy();
  end TShutdown;

  transaction TMain
  begin
    DoConnect();

    // ---
    // New window activated: 10
    OraFormsSetWindow("10");
    ThinkTime(6.6);
    …
  end Tmain

  transaction TsecondMain
  begin
    DoConnect();

    // ---
    // New window activated: 10
    OraFormsSetWindow("10");
    ThinkTime(6.6);
    …
  end TsecondMain;

この方法を使用すると、複数の Main トランザクションを実行するユーザーを使用して負荷テストを実行しているときにアクティブなトランザクションが失敗し、サーバーから切断された場合でも後続のトランザクションに関する問題は発生しません。