私は春とサーブレットベースのアプリケーションで作業しています。 私の要件は、データベースからデータをロードしてehcacheに保存することです。jbossサーバーが起動されると呼び出されるリスナーを作成しました。しかし、問題は私のアプリケーションでは、データベースに接続してDBからデータをロードするために春の休止状態のクラスを使用しています。 要件データはデータベースから取得し、キャッシュオブジェクト(ehcache)に格納する必要があります。しかし、リスナークラスが読み込まれると、他のXML構成ファイル(applicationContext.xml ..)がまだロードされていないので、データベースに接続するためにデータソースの詳細を設定します。以下は私のコードです:サーバの起動時にデータベースから値をロードする
リスナークラスです。以下は
import net.sf.ehcache.*;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/imports
public class MyInitializationListener extends HibernateDaoSupport implements ServletContextListener {
/** Singleton instance of CacheManager. */
private static CacheManager singletonManager = null;
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("--ServletContextListener destroyed*--");
}
private static CacheManager getInstance() {
if (singletonManager == null) {
singletonManager = CacheManager.create();
}
return singletonManager;
}
private Cache getCache() {
Cache cache = null;
cache = MyInitializationListener.getInstance().getCache("myCache");
return cache;
}
// Run this before web application is started
public void contextInitialized(ServletContextEvent arg0) {
final Cache cache = getCache();
final String dbValue = getDBValue();
//logic here
}
public String getDBValue() throws DataLayerException{
//logic to get the value from database
}
例外です:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/eas-webservice/ivr]] Exception sending context initialized event to listener instance of class com.data.listener.MyInitializationListener
java.lang.NullPointerException
は、任意の一面にキャッシュ内のデータベースに接続し、データベースや店舗から値を取得するための最良の方法だろうbefore.Whatこの状況をDIDサーバーが起動します。提案が役に立ちます。
--EDITED--
サーバがstarted.Butあるとき私は、ログファイルのprint文で確認したとき、私は)loaddataのを(呼び出すメソッドに@PostConstructを使用して、以下の方法を試していることを述べているありませんでしたこのメソッドは、サーバーの起動時に呼び出されていません。
@Component
public class MyDataStore {
@PostConstruct
public void loadData()
{
System.out.println("--In @postconstruct, loadData-");
}
}
私はPostConstructを使用してみましたが、私は、そのサーバーを起動したときメソッドが呼び出されていません。 PostConstructのアノテーションを付けてメソッドを作成するには、他の設定を行う必要がありますか? – javaUser
いいえ、Beanが作成されていることを確認してください。この場合、System.out.printlnか何かをコンストラクタに入れてください。 – Snickers3192
注釈付きのメソッドPostConstructでSystem.out.printステートメントでクラスを作成しましたが、サーバーの起動時に呼び出されていませんでした。 – javaUser