理論
WebSphereはクールなアプリケーションサーバーであり、多くのメリットがありますが、IBMが好奇心developers盛な開発者の大衆からこれをすべて熱心に隠しているのは非常に驚くべきことです。 この記事では、Javaアプリケーションコードから直接内部タスクスケジューラのテーブルを制御するプロセスに焦点を当てています。
シェダーの展開とそれを使用する基本についての情報がインターネット上にあります。 しかし、かつて、プログラムから直接テーブルの整合性を制御する必要がありました。 これが楽しみの始まりです。 このプロセスに関する情報はインターネット上で見つかりませんでした。 もちろんドキュメントはありますが、管理上の問題を解決する一環として、JACLおよびJython言語で例を示します。 アルゴリズムをJavaに転送するには、これは明らかに十分ではありません。 アプローチはわずかに異なります。
WebSphereには、内部タスクスケジューリングメカニズムがあります。 それは素晴らしいことです。 その操作のために、タスクを保存するデータベースにスケジューラプレートを展開する必要があります。 これらのテーブルの構造は、WebSphereに付属の対応するddlスクリプト(AppServer \ Scheduler \ *。Ddl)で十分にカバーされています。 さらに、これらのプレートを気にして、内部サーバーのDerbyデータベースに保存することもできません。Derbyデータベースは、バージョン6.1のアプリケーションサーバーに1セットで付属しています。 では、タスクスケジューラテーブルをどのように制御しますか?
IBMライブラリーcom.ibm.ws.runtime_6.1.0.jar(AppServer \ plugins \ com.ibm.ws.runtime_6.1.0.jar)のクラスを使用してこの問題を解決しました。 また、これらのクラスのドキュメントも見つけられなかったため、逆コンパイラを装備して、冷酷な分析を開始しました。
練習する
シェデラーがデプロイされ、JNDIパス(たとえば、java:comp / env / scheduler / ReportScheduler)を介して参照できると想定しています。
コンテキストinitialContext = null; スケジューラースケジューラー= null; { initialContext = new InitialContext(); スケジューラー=(スケジューラー)initialContext.lookup(SCHEDULER_JNDI_NAME); } catch(NamingException e){ 新しいSchedulerException( "初期化エラー:" + e.getMessage()、e); }最後に{ if(initialContext!= null){ { initialContext.close(); } catch(NamingException e){ logger.log(Level.SEVERE、e.getMessage()、e); } } }
スケジューラテーブル管理ロジックを実装するクラスWASSchedulerCfgHelperは、 SchedulerConfigHelperインターフェイスを実装します。 必要な主な機能:
テーブルの確認:
public void verifyTables(SchedulerConfiguration paramSchedulerConfiguration)
throws SchedulerDataStoreException;
テーブルの作成:
public Boolean createTables(SchedulerConfiguration paramSchedulerConfiguration)
throws SchedulerDataStoreException;
テーブルの削除:
public Boolean dropTables(SchedulerConfiguration paramSchedulerConfiguration)
throws SchedulerDataStoreException;
sheduler Configuration Assistantのインスタンスを作成します。
SchedulerConfigHelper schedulerHelper = new WASSchedulerCfgHelper(SchedulerConfigServiceImpl.getInstance());
ご覧のとおり、コンストラクターのSchedulerConfigHelperは必須の引数SchedulerConfigServiceを受け入れます 。 Helperを使用すると、ヘルパーはWebSphereリソースとローカル変数にアクセスできますが、この実装では、このオブジェクトは大まかに言えばスタブであり、テーブルを操作するプロセスには影響しません。
そのため、シェダーのパラメーター(ヘルパーが目的のシェダーを見つけるための情報)を取得します。
SchedulerConfiguration schedulerConfig = scheduler.getSchedulerConfiguration();
それでは、すべてが簡単です。
if(schedulerHelper.createTables(schedulerConfig)){ //作成されたシェドラーのテーブル! doSomething(); }
テーブルがすでに作成されている場合、メソッドは対応するメッセージをログに残し、falseを返すことで終了することを考慮する価値があります。 verifyTablesメソッドは値を返さず、必要なテーブルがない場合はSchedulerDataStoreExceptionをスローします 。
ところで、もちろん、ddlスクリプトを使用してテーブルを作成できます。 これはまさに私が以前やったことですが、WebSphere APIには、ddlスクリプトの名前、パス、接続の作成などの微妙な点から抽象化できるメカニズムがあります。 これは、サーバー管理コンソール内で使用されるアプローチです。
使用されたJavaデコンパイラ: Javaデコンパイラ
ご清聴ありがとうございました!