私はJBossでEJBベースのシステムを実装しています。JBoss/EJB - カスタムコンフィグレーションファイルの場所
私のメッセージ駆動型の豆の1つは、電子メールを送信する責任があります。私は電子メールテンプレートを外部(おそらくXMLとして)に保存して、コードを変更せずに簡単に変更できるようにします。
このファイルはどこに置かれるべきですか?
私はJBossでEJBベースのシステムを実装しています。JBoss/EJB - カスタムコンフィグレーションファイルの場所
私のメッセージ駆動型の豆の1つは、電子メールを送信する責任があります。私は電子メールテンプレートを外部(おそらくXMLとして)に保存して、コードを変更せずに簡単に変更できるようにします。
このファイルはどこに置かれるべきですか?
JBossのドキュメントでは、環境変数jboss.server.data.dirが「ファイルシステムにコンテンツを格納するサービスで使用可能な場所」であることを指定しています。詳細は、hereを参照してください。 あなたは
System.getProperty("jboss.server.data.dir");
で変数の値を取得することができますそして、リンクに示すように、サーバー/ [設定]/dataディレクトリの場所が返されます。アプリをデプロイするときにテンプレートファイルを保存し、管理者に変更を指示します。
このquestionとこのblog postはプロパティファイルを参照していますが、他の種類のファイルにも該当します。一つの解決策は、標準の場所にXMLファイルを配置し、この(上記のリンクから取られたコード)のようにそれを読むために次のようになります。
String path = System.getProperty("catalina.base")
+ System.getProperty("file.seperator")
+ "YOUR_FILE.properties";
FileInputStream fis = new FileInputStream(path);
代わりにあなたははuser.dir使用、あるいは独自に定義することができますcatalina.baseの環境変数(mypath_to_xml_file)を読み込み、System.getPropertyでそれを読み込みます。
もう1つの解決策は、JNDIを使用してファイルへのパスを定義することです。
または、SQLクライアント経由で入手できるデータベースに入れます。スタートアップ時にロードするか、ポーリングしてタイムスタンプの変更をチェックしてリロードしてください。
どのようなテンプレートですか?あなたが差し込み印刷の方法で入力するVelocityテンプレートですか?
私がデータベース設計について気に入っていることの1つは、単なるファイルの上にあるスキーマに非常に多くの情報を追加できることです。タイムスタンプ、テンプレートを更新した人のユーザーID、バージョン、メタデータ、システム名、 "ライブ"または "休眠中"を示すブール値などを含めることができます。単にサーバードライブにファイルを置くだけでは、さらに多くの選択肢があります。他のアプリにも同様に利用できるようになります。あなたはそれを少し実行する場合、素晴らしいデザインかもしれません。
展開されたデプロイメントのWEB-INF/classesディレクトリに追加する場合は、「getResourceAsStream()」を使用して簡単に参照できます。サーバーをバウンスさせたくない場合は、ポーリング機能を追加してください。
これを正常に試行しました。今のところ私たちのための最良の解決策だと思われますが、ファイルシステムにアクセスできるようにEJB仕様に違反していると思ったのでちょっと混乱しています。 – William
また、クラスタ内で複数のJBossサーバを実行する必要がある段階に入ると、つまり、同じファイルをそれぞれのファイルに複製する必要がある場合は、問題が発生しますか?今私が検討している代替案は、JNDIツリーに情報を格納することです。 – William
はい、クラスター化されたデプロイメントでファイルシステムにアクセスする際に問題が発生します。その場合、私は、ファイルへのアクセスはあまりにも単純すぎると思っており、別の解決方法が望ましいでしょう。クラスター化された環境に適したシステムを実行している場合、おそらく、テンプレート情報にアクセスする詳細を隠す構成サービスを検討することができます。 – Armadillo