我们使用自定义SingletonBean,其工作方式类似于不同数据的安全键值存储。数据库凭据也存储在那里,因此为了处理Wildfly,我们编写了JAAS LoginModule实现,然后在Wildfly安全域内部进行配置,最后DataSource使用此安全域进行凭据提取。
当wildfly启动时,它会记录DataSource无法获得连接。之所以会发生这种情况,是因为SingletonBean尚未就绪,而JAAS登录模块无法从中提取凭据。然后我们部署一些使用hibernate的jar。它运行得很好,因为Wildfly尝试再次启动DataSource,这次尝试成功完成。
第二种情况是我们重新启动wildfly。 DS还抱怨启动与DB的连接失败。但这次部署了jar并发启动,无法获得正确的PersistentContext。
所以我的想法是让所描述的过程连续开始。有没有办法做到这一点?
这里是单例bean定义
@Singleton
@Startup
public class DirectoryServiceSingletonBean {
...
@PostConstruct
void startup() {
// Post this bean to JNDI
}
}
JAAS LoginModule
public class MyLoginModule extends AbstractPasswordCredentialLoginModule
{
@Override
public void initialize(
Subject subject,
CallbackHandler callbackHandler,
Map<String, ?> sharedState,
Map<String, ?> options) {
addValidOptions(ALL_VALID_OPTIONS);
super.initialize(subject, callbackHandler, sharedState, options);
username = (String) options.get(USERNAME);
// Extraction of DirectoryServiceSingletonBean bean from JNDI
password = extractFrom(DirectoryServiceSingletonBean)
}
....
}
我尝试在LoginModule上使用@DependsOn(“DirectoryServiceSingletonBean”)注释,在部署中使用@Stateless / @ Statefull bean(它们有@PersistentContext),但它不起作用。