How to detect running on WebSphere
        Posted  
        
            by Pedro Guedes
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Pedro Guedes
        
        
        
        Published on 2010-03-15T08:45:23Z
        Indexed on 
            2010/03/15
            8:49 UTC
        
        
        Read the original article
        Hit count: 686
        
Hi,
I'm building a webapp that should run on both Tomcat and WebSphere and I've managed to make almost all the differences into properties with default values that I can override for deployment on the Tomcat server.
I need to do yet another override for the authentication provider bean...
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    if(isWebSphere()){
        LOG.warn("Running on WebSphere... not overriding default authentication mechanism.");
        return;
    }
    LOG.info("Running on Tomcat... overriding authentication provider bean ("+AUTHENTICATION_PROVIDER_BEAN+")");
    if (beanFactory.containsBean(AUTHENTICATOR_BEAN) && beanFactory.containsBean(POPULATOR_BEAN) && beanFactory.containsBean(USERDETAIL_PROVIDER_BEAN)){
        LdapAuthenticator authenticator = (LdapAuthenticator) beanFactory.getBean(AUTHENTICATOR_BEAN);
        LdapAuthoritiesPopulator populator = (LdapAuthoritiesPopulator) beanFactory.getBean(POPULATOR_BEAN);
        UserDetailProvider userDetailProvider = (UserDetailProvider) beanFactory.getBean(USERDETAIL_PROVIDER_BEAN);
        ExtendedLdapAuthenticationProvider override = new ExtendedLdapAuthenticationProvider(authenticator, populator);
        override.setUserDetailProvider(userDetailProvider);
        beanFactory.registerSingleton(AUTHENTICATION_PROVIDER_BEAN, override);
    } else {
        throw new BeanCreationException("Could not find required beans to assemble overriding object for authentication...");
    }
}
Now my problem is how to implement the isWebSphere() method. I was thinking Class.forName("someWebSphereSpecific"), but is there a better way?
© Stack Overflow or respective owner