まず、よくある質問のバリエーションを繰り返すことについてお詫び申し上げます。しかし、私はここで最善のアプローチを理解するのに苦労しています。私はHibernateとGlassfish 3を使用するアプリケーションを持っています。他の人と同じように、私はwarファイルの外からHibernateプロパティをロードできるようにしたいと思います。私が働くことができた唯一の解決策は次のとおりです。 domains/domain1/configフォルダからプロパティをロードします。ServletContextを使用して外部からのHibernateプロパティを読み取る
private Properties getLocalHibernateProperties() {
Properties properties = new Properties();
try {
File pf = new File(System.getProperty("user.dir"), PROPERTIES_FILE_NAME);
InputStream inStream = new FileInputStream(pf);
properties.load(inStream);
}
catch (Exception e) {
e.printStackTrace();
}
return properties;
}
しかし、私はまた、発見し、例のServletContextを使用していますHow to read properties file placed outside war?ています。様々な部品の組み合わせ:私は第二の溶液は、サーブレットのCLASSPATHを検索することを理解することができます
in web.xml <listener-class>foo.bar.startup.HibernatePropertiesLoader</listener-class>
public class HibernatePropertiesLoader implements ServletContextListener {
public void contextInitialized(ServletContextEvent event){
ServletContext context = event.getServletContext();
context.setAttribute("settings", new HibernatePropertiesReader(context));
}
public void contextDestroyed(ServletContextEvent event){}
}
public class HibernatePropertiesReader {
ServletContext ctx = null;
public HibernatePropertiesReader(ServletContext ctx) {
this.ctx = ctx;
}
public Properties getLocalHibernateProperties() {
Properties properties = new Properties();
try {
InputStream inStream = ctx.getResourceAsStream(PROPERTIES_FILE);
properties.load(inStream);
}
catch (Exception e) {
e.printStackTrace();
}
return properties;
}
}
は - (?これは正しい)ので、私の元のソリューションよりも柔軟です。しかし、HibernateUtilsクラスのプロパティの使い方(アクセス)を理解できません。私はServletContext.getResourceAsStreamは、通常、ファイルをロードするために使用される
ServletContextは、アプリケーションの外部から 'インストール固有の'プロパティをロードするのに本当に適切ではありませんか?最初の解決策はおそらく柔軟ではないと私は思いました。おそらく私はここで間違っています。 – skyman
インストールルートにコンテキスト固有のプロパティを設定するとどうなりますか?それらをユーザーのホームディレクトリに置くことを提案しましたか?単一のユーザーが、異なるポート上の同じアプリケーションの複数のインスタンスを実行している可能性があります。 – Pace
ローカルの設定データを置き換えずにサイトのWARをアップグレードする必要がある問題を解決しようとしていると思います。コンテキストルートの内側が実際にはパッケージ化されていないWARの中にあるということを訂正していますか? – skyman