センサーからJSON形式で送信された観測情報を受け取るTomcatサーバーが配備されています。私は、使いたいオントロジーを記述したセンサーも持っています。Tomcat起動時にオブジェクトをインスタンス化する
しかし、センサの観測値がサーバによって受信される前にオントロジをロードしたいと思います。 Tomcatがロードされるとすぐにオブジェクトをインスタンス化するにはどうすればよいですか?
センサーからJSON形式で送信された観測情報を受け取るTomcatサーバーが配備されています。私は、使いたいオントロジーを記述したセンサーも持っています。Tomcat起動時にオブジェクトをインスタンス化する
しかし、センサの観測値がサーバによって受信される前にオントロジをロードしたいと思います。 Tomcatがロードされるとすぐにオブジェクトをインスタンス化するにはどうすればよいですか?
アプリケーションは、あなたがServletContextListener
を使用する必要がありますを開始または停止したときにアクションを実行するには:http://download.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html
web.xml:
<web-app>
...
<listener>
<listener-class>com.example.Listener</listener-class>
</listener>
...
</web-app>
このソリューションはPeter Knegoの提案とは対照的に、任意のサーブレットコンテナに移植可能であり、Tomcatに限定されていません。
+1:サーブレットクラスに概念的に*属しているのかどうかに依存して、Servlet.init()ソリューションよりもきれいです。 –
それは確かに行く方法です。 – BalusC
厳密に言えば、というサーブレットがTomcatによってロードされるとすぐにオブジェクトをインスタンス化するとします。 (アプリケーション固有の機能のためにTomcat自体を変更することは実際には意味がありません)。
この場合、Servlet
クラスはinit(ServletConfig config)
メソッドをオーバーライド/実装できます。これは、サーブレットが初期化されるときにサーブレットコンテナ(この場合はTomcat)によって呼び出され、ここで参照している種類のような静的起動ロジックを実行するのに適しています。
実際、サーブレットはinitメソッドが返されるまで接続を受け取ることさえできないため、センサーの観測が到着する前にオントロジが完全にロードされることを保証できます。
これは動作するようです!しかし、私は今オントロジーに問題があります。私が確認できると答えを受け入れます。 – Bailz
event listenersは、Webアプリケーション(contex)が読み込まれたときに呼び出されます。ここでオブジェクトを初期化し、ServletContext
に保存します。ここで、それらのオブジェクトはアプリ内のすべてのサーブレットで使用できるようになります。
はServletContextListener
を実装し、それにcontextInitialized()
プットです:次に
contextInitialized(ServletContextEvent sce){
// Create your objects
Object myObject = ...
sce.getServletContext().setAttribute("myObjectKey", myObject);
}
のTomcatのcontext.xmlでregister the listener:
<Context path="/examples" ...>
...
<Listener className="com.mycompany.mypackage.MyListener" ... >
...
</Context>
Dupes:http://stackoverflow.com/questions/3289737/load-on-startup-tomcat、http://stackoverflow.com/questions/2057563/how-do-i-run-a-method-before -republishing-to-jboss、http://stackoverflow.com/questions/3468150/using-init-servlet、http://stackoverflow.com/questions/2364390/i-want-to-use-a-method-whichサーバーへのデプロイ後に1回のみと呼ばれる、http://stackoverflow.com/questions/4175726/how-do-i-load-a-java-class-not-a-servlet-when -the-tomcat-server-starts、etc..etc .. – BalusC