我正在JBoss中实现一个基于EJB的系统。
我的一个消息驱动bean将负责发送电子邮件。我希望将电子邮件模板存储在外部(可能是XML),以便可以轻松更改它而无需更改代码/重新部署bean等。
此文件应放在何处以及如何引用它?
答案 0 :(得分:2)
JBoss文档指定环境变量jboss.server.data.dir是“可供要在文件系统中存储内容的服务使用的位置”。有关详细信息,请参阅here。 您可以通过
获取变量的值System.getProperty("jboss.server.data.dir");
并且,如链接所示,将返回server / [config] / data目录的位置。在部署应用程序时将模板文件存储在那里,并指示管理员在那里修改它。
答案 1 :(得分:1)
此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读取它。
另一种解决方案是使用JNDI来定义文件的路径。
答案 2 :(得分:0)
或者将它放在一个数据库中,您可以通过SQL客户端获取它。在启动时加载它或者轮询以检查时间戳更改并重新加载它。
你的意思是什么样的模板?它是以邮件合并方式填充的Velocity模板吗? 我喜欢数据库设计的一件事是,您可以将更多信息添加到超出单纯文件的架构中。您可以包括时间戳,更新模板的人员的用户ID,版本,元数据,系统名称,指示“实时”或“休眠”的布尔值等等。您的EJB可以非常聪明地选择它所选择的模板。如果您只是将文件停放在服务器驱动器上,您可能会发现自己拥有的选项比您拥有的选项还要多。它们也可以通过其他应用程序使用。如果你稍微运行它可能是一个很好的设计。
如果将其添加到爆炸部署的WEB-INF / classes目录中,则可以使用“getResourceAsStream()”轻松引用它。如果您不想退回服务器,请添加轮询功能。