在Singleton Bean Wildfly之后启动DataSource

时间:2017-07-20 00:08:45

标签: java datasource wildfly startup

我们使用自定义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),但它不起作用。

0 个答案:

没有答案