JBoss で EJB ベースのシステムを実装しています。
私のメッセージ駆動型 Bean の 1 つは、電子メールの送信を担当します。コードを変更したり、Bean を再デプロイしたりしなくても簡単に変更できるように、電子メール テンプレートを外部に (おそらく XML として) 保存したいと考えています。
このファイルをどこに配置し、どのように参照すればよいですか?
JBoss で EJB ベースのシステムを実装しています。
私のメッセージ駆動型 Bean の 1 つは、電子メールの送信を担当します。コードを変更したり、Bean を再デプロイしたりしなくても簡単に変更できるように、電子メール テンプレートを外部に (おそらく XML として) 保存したいと考えています。
このファイルをどこに配置し、どのように参照すればよいですか?
JBoss のドキュメントでは、環境変数 jboss.server.data.dir が「コンテンツをファイル システムに保存するサービスが使用できる場所」であると指定されています。詳しくはこちらをご覧ください。変数の値を取得するには、次のようにします。
System.getProperty("jboss.server.data.dir");
そして、リンクに示されているように、server/[config]/data ディレクトリの場所が返されます。アプリをデプロイするときにテンプレート ファイルをそこに保存し、管理者にそこで変更するように指示します。
This questionとthis blog postはプロパティファイルを参照していますが、議論されていることは他の種類のファイルにも当てはまります。1 つの解決策は、XML ファイルを標準の場所に配置し、次のように読み取ることです (上記のリンクから取得したコード)。
String path = System.getProperty("catalina.base")
+ System.getProperty("file.seperator")
+ "YOUR_FILE.properties";
FileInputStream fis = new FileInputStream(path);
catalina.base の代わりに user.dir を使用するか、独自の環境変数 (mypath_to_xml_file) を定義して System.getProperty で読み取ることができます。
別の解決策は、JNDI を使用してファイルへのパスを定義することです。
または、SQL クライアント経由で取得できるデータベースに配置します。起動時にロードするか、ポーリングしてタイムスタンプの変更を確認し、再ロードします。
どのようなテンプレートを意味しますか? 差し込み印刷で入力するのは Velocity テンプレートですか?
データベース設計で私が気に入っている点の 1 つは、単なるファイルにとどまらず、さらに多くの情報をスキーマに追加できることです。タイムスタンプ、テンプレートを更新した人のユーザー ID、バージョン、メタデータ、システム名、「ライブ」または「休止」を示すブール値などを含めることができます。EJB は、どのテンプレートを選択するかについて非常に賢くすることができます。サーバー ドライブにファイルを単にパークする場合よりもさらに多くのオプションがあることに気付くかもしれません。他のアプリでも同様に利用できます。少し走らせると素敵なデザインになるかもしれません。
展開されたデプロイメントの WEB-INF/classes ディレクトリに追加すると、「getResourceAsStream()」を使用して簡単に参照できます。サーバーをバウンスさせたくない場合は、ポーリング機能を追加してください。