正在处理胖客户端java应用程序,它在属性文件中存储了与环境相关的数据(如邮件详细信息,数据库连接密码)。
如果在尝试加载应用程序时缺少属性文件,则需要发送致命邮件。但是为了发送邮件,它需要属性文件。因为它包含所有邮件详细信息。由于缺少属性文件,因此导致大问题。
所以请建议我除了java代码之外的属性文件的替代方法。
是否可以在websphere中存储属性文件?
答案 0 :(得分:1)
在WebSphere Application Server中,这是通过使用Resource Environment Entry
来完成的。您需要执行以下操作:
创建一个从JNDI读取属性的javax.naming.spi.ObjectFactory
实现。
基本代码可能如下所示:
public Object getObjectInstance(Object object, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {
Properties properties = new Properties();
Reference ref = (Reference) object;
Enumeration addrs = ref.getAll();
while (addrs.hasMoreElements()) {
RefAddr addr = (RefAddr) addrs.nextElement();
String entryName = addr.getType();
String value = (String) addr.getContent();
properties.setProperty(entryName, value);
}
return properties;
}
在服务器中将实现类注册为Resource Environment Provider
。按照New Resource environment provider。
定义Resource Environment Entry
并将其绑定到新注册的提供商 - Resource environment entry settings
在条目中创建您需要的自定义属性。
将Resource Environment Entry
绑定到应用程序中的Java EE模块 - 这可以通过不同方式完成,具体取决于模块的类型。
如果您需要更多详细信息,请参阅此处的综合指南 - Using resource environment providers in WebSphere Application Server。如果您使用的是WAS 7.0或更高版本,则无需将提供程序放在共享库中 - 它可以直接驻留在应用程序中。
至于存储凭据,有一个特殊的工具 - J2C Authentication Alias
,如Gas所述。
答案 1 :(得分:0)
您可以始终拥有应用程序属性的默认值,因此这可能是邮件配置的解决方案,前提是存在固定的默认值。
另一种方法是使用存储在数据库中的应用程序属性。当然,这需要具有数据库连接(但在应用程序或容器的持久性配置中通常具有这种连接)。
正如在this post's answer中已经说过的,我们在所有的Web应用程序中使用这种技术,主要有两个原因:
对属性的更改可以在运行时进行,无需监视文件更改,它们可以由应用程序本身完成,并且不需要知道已部署应用程序之外的路径。
属性可以包含其他信息,例如类型(例如数字,日期,字符串),默认值,注释或更改它的用户。
为了实现它,您将创建一个应用程序范围的组件,该组件访问应用程序其余部分的数据库属性。
答案 2 :(得分:0)
您可以通过控制台(环境&gt;命名&gt;名称空间占用)在JNDI树中存储字符串属性,然后通过InitialContext访问它们。
但对于数据库或邮件服务器等资源,您应该创建DataSource,J2C身份验证别名或MailSession条目,然后在应用程序安装期间将其映射到应用程序资源。