非応答型呼び出しをするサーバアプリケーションの処理の流れとコードの例を示します。斜体で示しているコードは,雛形クラスとして自動生成される部分です。太字で示しているコードは,同期型呼び出しのコードと異なる部分です。
サーバアプリケーションの作成時には,ユーザは,自動生成された雛形クラスXYZ_TSCimplにTSCユーザオブジェクトのコードを記述します。また,雛形クラスXYZ_TSCfactimplにTSCユーザオブジェクトファクトリのコードを記述します。
//
// "XYZ_TSCimpl.java"
//
// import classes used in this implementation, if necessary.
import java.lang.System;
public class XYZ_TSCimpl extends XYZ_TSCsk
{
// Write class variables, if necessary
public XYZ_TSCimpl()
{
// Constructor of implementation.
// Write user own code.
//TSCユーザオブジェクトのコンストラクタのコードを記述します。
//引数の数および型を変更できます。
super();
};
public void callOnly(int in_data)
{
// Operation "callOnly".
// Write user own code.
//ユーザメソッドのコードを記述します。
//メソッドが呼ばれた回数を増加させます。
//(このメソッドの処理は引数の値と無関係です)
m_value += in_data;
System.out.println("Call method in XYZ_TSCprxy");
};
//メソッドが呼ばれた回数
protected int m_value;
};
//
// "XYZ_TSCfactimpl".java"
//
import JP.co.Hitachi.soft.TPBroker.TSC.TSCObject;
import JP.co.Hitachi.soft.TPBroker.TSC.TSCObjectFactory;
// import classes used in this implementation, if necessary.
public class XYZ_TSCfactimpl
implements TSCObjectFactory
{
public XYZ_TSCfactimpl()
{
// Constructor of implementation.
// Write user own code.
//TSCユーザオブジェクトファクトリのコンストラクタのコードを記述します。
//引数の数および型を変更できます。
};
public TSCObject create()
{
// Method to create user object.
// Write user own code.
//サーバオブジェクトを生成するコードを記述します。
//必要に応じて修正してください。
return new XYZ_TSCimpl();
};
public void destroy(TSCObject tsc_obj)
{
// Method to destroy user object.
// Write user own code.
//後処理のコードを記述します。
//必要に応じて修正してください。
};
};
//
// "ServerAP.Java"
//
import JP.co.Hitachi.soft.TPBroker.TSC.*;
public class ServerAP
{
public static void main(String[] args)
{
////////
// 1, TPBrokerの初期化処理
////////
org.omg.CORBA.ORB orb = null;
try
{
// ORBの初期化
orb = org.omg.CORBA.ORB.init(args,null);
}
catch(org.omg.CORBA.SystemException ce)
{
// 例外処理
System.out.println(ce);
System.exit(1);
}
////////
// 2, TPBroker OTMの初期化処理
////////
try
{
// TSCの初期化
TSCAdm.initServer(args,orb);
}
catch(TSCSystemException tsc_se)
{
// 例外処理
System.out.println(tsc_se);
System.exit(1);
}
////////
// 3, TSCデーモンへの接続
////////
TSCDomain domain = null;
try
{
domain = new TSCDomain(null,null);
}
catch(TSCSystemException tsc_se)
{
// 例外処理
System.out.println(tsc_se);
try
{
TSCAdm.endServer();
}
catch(TSCSystemException se)
{
System.exit(1);
}
System.exit(1);
}
TSCServer tsc_server = null;
try
{
// TSCデーモンの参照オブジェクトを取得
tsc_server = TSCAdm.getTSCServer(domain);
}
catch(TSCSystemException tsc_se)
{
// 例外処理
System.out.println(tsc_se);
try
{
TSCAdm.endServer();
}
catch(TSCSystemException se)
{
System.exit(1);
}
System.exit(1);
}
//////
// 4, TSCユーザオブジェクトファクトリ,TSCユーザアクセプタの生成
// (new)および各種設定
//////
// XYZ_TSCfactimplの生成
TSCObjectFactory my_fact = new XYZ_TSCfactimpl();
// TSCAcceptorの設定
TSCAcceptor my_acpt = null;
try
{
my_acpt = new XYZ_TSCacpt(my_fact);
}
catch(TSCSystemException tsc_se)
{
// 例外処理
System.out.println(tsc_se);
try
{
TSCAdm.releaseTSCServer(tsc_server);
TSCAdm.endServer();
}
catch(TSCSystemException se)
{
System.exit(1);
}
System.exit(1);
}
////////
// 5, TSCルートアクセプタの生成および各種設定
////////
// TSCRootAcceptorの生成
TSCRootAcceptor my_rt_acpt = null;
try
{
my_rt_acpt = TSCRootAcceptor.create(tsc_server);
}
catch(TSCSystemException tsc_se)
{
// 例外処理
System.out.println(tsc_se);
try
{
TSCAdm.releaseTSCServer(tsc_server);
TSCAdm.endServer();
}
catch(TSCSystemException se)
{
System.exit(1);
}
System.exit(1);
}
try
{
// TSCRootAcceptorへの登録
my_rt_acpt.registerAcceptor(my_acpt);
// TSCRootAcceptorのパラレルカウント指定もできます
// デフォルト値は1
// オプション引数でデフォルト値を変更することもできます。
// my_rt_acpt.setParallelCount(5);
}
catch(TSCSystemException tsc_se)
{
// 例外処理
System.out.println(tsc_se);
try
{
TSCAdm.releaseTSCServer(tsc_server);
TSCAdm.endServer();
}
catch(TSCSystemException se)
{
System.exit(1);
}
System.exit(1);
}
////////
// 6, TSCルートアクセプタの活性化
////////
try
{
// オブジェクトの活性化
my_rt_acpt.activate("serviceX");
}
catch(TSCSystemException tsc_se)
{
// 例外処理
System.out.println(tsc_se);
try
{
TSCAdm.releaseTSCServer(tsc_server);
TSCAdm.endServer();
}
catch(TSCSystemException se)
{
System.exit(1);
}
System.exit(1);
}
//////
// 7, 実行制御の受け渡し
//////
try
{
TSCAdm.serverMainloop();
}
catch(TSCSystemException tsc_se)
{
// 例外処理
System.out.println(tsc_se);
try
{
my_rt_acpt.deactivate();
TSCAdm.releaseTSCServer(tsc_server);
TSCAdm.endServer();
}
catch(TSCSystemException se)
{
System.exit(1);
}
System.exit(1);
}
////////
// 8, TSCルートアクセプタの非活性化
////////
try
{
// オブジェクトの非活性化
my_rt_acpt.deactivate();
}
catch(TSCSystemException tsc_se)
{
// 例外処理
System.out.println(tsc_se);
try
{
TSCAdm.releaseTSCServer(tsc_server);
TSCAdm.endServer();
}
catch(TSCSystemException se)
{
System.exit(1);
}
System.exit(1);
}
////////
// 9, TSCデーモンへの接続解放
////////
try
{
TSCAdm.releaseTSCServer(tsc_server);
}
catch(TSCSystemException tsc_se)
{
// 例外処理
System.out.println(tsc_se);
try
{
TSCAdm.endServer();
}
catch(TSCSystemException se)
{
System.exit(1);
}
System.exit(1);
}
////////
// 10, TPBroker OTMの終了処理
////////
try
{
TSCAdm.endServer();
}
catch(TSCSystemException tsc_se)
{
// 例外処理
System.out.println(tsc_se);
System.exit(1);
}
System.exit(0);
}
}