2016-05-12 9 views
0

XMLをメモリにロードするスケジューラを開始する休止エンドポイントがあります。その終点に到達するたびに、XMLがメモリにロードされ、準備完了後にXMLが返されます(10〜15秒かかります)。同じエンドポイントに再びアクセスすると、キャッシュされたXMLが返されます。すべて正常に動作しますが、今は手動でスケジューラを開始するためにエンドポイントにヒットする必要があります。起動時にシンプルなコードを使用してエンドポイントに自動的にヒットする方法はありますか?それとも他の解決方法がありますか?起動時にRESTエンドポイントにヒット - weblogic + ATG

+1

あなたの 'Initial.properties'にスケジューラを指定しましたか? – radimpe

答えて

0

通常、Nucleusのコンポーネントは、システムの起動時ではなく、最初のアクセス時にインスタンス化されます。

ATGの起動時に何かを実行する方法は、コンポーネントを作成し、そのニュークリアスパスを/ Initialコンポーネントの最初のサービスのリスト(または他の多くのコンポーネントの1つ)に追加することです(Initialそれをオフに変更)

コンポーネントのグローバルスコープが必要です。/Initialは起動時にインスタンス化されるため、参照するサービスも依存関係としてインスタンス化されます。

コンポーネントがPOJOの場合、no引数のコンストラクタがコンポーネントの起動時に呼び出され、setXメソッドがプロパティファイルで定義された値を持つ各プロパティに対して呼び出されます。

コンポーネントがGeneric Serviceから拡張されている場合は、さらに、とafterSetメソッドが呼び出されます。メソッドが呼び出される前と後に呼び出され、存在する場合はdoStartUpが呼び出されます。

これは、Nucleusが管理するコンポーネントの基本的なライフサイクルの一部です。

これは、カスタムコードを呼び出すためのさまざまなフックを提供します。

ここで、あなたの質問では、起動時にRESTエンドポイントを呼び出す方法を尋ねます。しかし、私が実際に尋ねたいのは、システムの起動時に特定のコードが実行されることを確実にする方法です。 RESTエンドポイントは、Nucleusの外から手動で手動でトリガする方法です。しかし、起動時に自動的に呼び出される場合は、RESTエンドポイントを呼び出さなければならないということではありません。

あなたが望むものを達成するための最も簡単な方法は、

  • GenericService
  • オーバーライド
  • は、あなたがこの方法で実行、またはコードを呼び出したいコードを置くdoStartUp方法を拡張するクラスを定義していますここから他のコンポーネントへ
  • クラスのグローバルスコープコンポーネントを定義する
  • initialServicesプロップにコンポーネントを追加する

サーバーを再起動し、起動時にコードが呼び出されていることを確認してください。いくつかのデバッグ文を記述し、レイヤ内でデバッグログを切り替えます。

実際には、システムの起動時にコードを実際に呼び出す必要があるかどうかについて考えることもできます。最初のサービスには、サーバーの開始時刻が追加されます。要件に応じて、サーバーの起動時ではなくアプリケーションサービスの最初のアクセス時に行う方がよい場合があります。

関連する問題