4

我在 JBoss 中实现了一个基于 EJB 的系统。

我的一个消息驱动 bean 将负责发送电子邮件。我希望将电子邮件模板存储在外部(可能作为 XML),以便可以轻松更改它而无需更改代码/重新部署 bean 等。

该文件应该放在哪里以及如何引用它?

4

3 回答 3

2

JBoss 文档指定环境变量 jboss.server.data.dir 是“可供想要在文件系统中存储内容的服务使用的位置”。有关更多详细信息,请参见此处。您可以通过以下方式获取变量的值

System.getProperty("jboss.server.data.dir");

并且,如链接所示,将返回 server/[config]/data 目录的位置。部署应用程序时将模板文件存储在那里,并指示您的管理员在那里修改它。

于 2009-08-06T02:06:58.140 回答
1

这个问题和这篇博客文章是指属性文件,但所讨论的内容也适用于其他类型的文件。一种解决方案是将 XML 文件放在标准位置并像这样读取它(代码取自上面的链接):

String path = System.getProperty("catalina.base")

                  + System.getProperty("file.seperator")

                  + "YOUR_FILE.properties";

FileInputStream fis = new FileInputStream(path);

您可以使用 user.dir 甚至定义自己的环境变量 (mypath_to_xml_file) 并使用 System.getProperty 读取它,而不是 catalina.base。

另一种解决方案是使用 JNDI 来定义文件的路径。

于 2009-08-04T06:49:20.260 回答
1

或者将其放入数据库中,您可以通过 SQL 客户端获取它。在启动时加载它,或者轮询以检查时间戳更改并重新加载它。

你是指什么样的模板?它是您以邮件合并方式填充的 Velocity 模板吗?
我喜欢数据库设计的一件事是,您可以将更多信息添加到超出单纯文件的架构中。您可以包含时间戳、更新模板的用户 ID、版本、元数据、系统名称、表示“活动”或“休眠”的布尔值等。您的 EJB 可以非常聪明地选择它选择的模板。如果您只是将文件停放在服务器驱动器上,您可能会发现自己拥有更多的选择。通过这种方式,它们也可用于其他应用程序。如果您稍微使用它,可能是一个不错的设计。

如果将其添加到展开部署的 WEB-INF/classes 目录,则可以使用“getResourceAsStream()”轻松引用它。如果您不想退回服务器,请添加轮询功能。

于 2009-08-04T23:05:38.087 回答