我正在JBoss中实现一个基于EJB的系统。
我的其中一个消息驱动bean将负责发送电子邮件。我希望电子邮件模板存储在外部(可能是XML),以便可以轻松更改而不必更改代码/重新部署bean等。
这个文件应该放在哪里,如何引用它?
我正在JBoss中实现一个基于EJB的系统。
我的其中一个消息驱动bean将负责发送电子邮件。我希望电子邮件模板存储在外部(可能是XML),以便可以轻松更改而不必更改代码/重新部署bean等。
这个文件应该放在哪里,如何引用它?
System.getProperty("jboss.server.data.dir");
如链接所示,服务器/[config]/data目录的位置将被返回。在部署应用程序时,请将模板文件存储在那里,并指示管理员在那里进行修改。
这个问题和这个博客帖子涉及到属性文件,但讨论的内容也适用于其他类型的文件。一个解决方案是将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来定义文件路径。
或者将其放入数据库中,通过SQL客户端访问它。在启动时加载它,或者定期轮询以检查时间戳的更改并重新加载它。
你说的是什么样的模板?是一种Velocity模板,你可以像邮件合并一样填充它吗?
我喜欢数据库设计的一点是,你可以向模式中添加比一个简单文件更多的信息。你可以包括时间戳、更新模板的用户ID、版本、元数据、系统名称、一个布尔值来指示“活动”或“休眠”等等。你的EJB可以非常聪明地选择哪个模板。如果你只是将文件存储在服务器驱动器上,你可能会发现自己有更多的选项。它们也将对其他应用程序可用。如果你稍微运行一下,这可能是一个不错的设计。
如果将其添加到已展开部署的WEB-INF/classes目录中,你可以使用“getResourceAsStream()”轻松引用它。如果你不想强制重启服务器,可以添加一个轮询功能。