JSM が開始すると、内部の起動クラスが実行されます。このクラスは、すべてのJSMサービス・クラスをロードしてXML変換を実行し、できるだけ多くのApache Xalanクラスをロードします。
ユーザー定義の起動クラスは、manager.propertiesファイルの「startup.class」プロパティで指定できます。
startup.class=com.acme.MyStartup
ユーザー定義の起動クラスの場合、実行可能インターフェースを実装する必要があります。JSMはこのロードされたクラスを実行可能オブジェクトにキャストして、実行メソッドを実行します。これは、メイン・メソッドで行われるため、専用の追加スレッドは作成されません。
内部の起動クラスとユーザー定義の起動クラスは、JSMが開始してクライアントとコンソールの接続を受け入れる前に実行されます。
例 1
package com.acme ;
public final class MyStartup implements Runnable
{
public void run ()
{
try
{
/* 独自のコードはここに記載 */
}
catch ( Throwable t )
{
t.printStackTrace () ;
}
}
}
|
例 2
package com.acme ;
public final class MyStartup implements Runnable
{
private int m_sleepTime = 0 ;
public MyStartup ()
{
/* JSMManager はゼロ引数コンストラクタを使用 */
int seconds = 60 * 20 ;
Thread thread = new Thread ( new MyStartup ( seconds ) ) ;
thread.start () ;
}
public MyStartup ( int seconds )
{
/* スリープ時間を指定 */
if ( seconds <= 0 )
{
seconds = 0 ;
}
m_sleepTime = seconds * 1000 ;
}
public void run ()
{
if ( m_sleepTime == 0 )
{
/* JSMManager呼び出し */
System.out.println ( "JSM warmup call" ) ;
try
{
warmup () ;
}
catch ( Throwable t )
{
t.printStackTrace () ;
}
return ;
}
/* スリープ時間を指定した MyStartup 呼び出し */
while ( true )
{
try
{
Thread.sleep ( m_sleepTime ) ;
System.out.println ( "MyStartup repeat warmup call" ) ;
warmup () ;
}
catch ( Throwable t )
{
t.printStackTrace () ;
}
}
}
private final void warmup () throws Exception
{
System.out.println ( "MyStartup warmup" ) ;
/* 独自のコードはここに記載 */
}
}
|