blob: 01b3b9cc26537830df933c26877280007de66289 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 IBM Corporation. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* 01/05/2015 Rick Curtis
* - 455683: Automatically detect target server
* 08/26/2016 Will Dazey
* - 499869: Update WAS server detection
******************************************************************************/
package org.eclipse.persistence.platform.server.was;
import java.security.AccessController;
import java.security.PrivilegedAction;
import org.eclipse.persistence.config.TargetServer;
import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
import org.eclipse.persistence.platform.server.ServerPlatformDetector;
public class WebSpherePlatformDetector implements ServerPlatformDetector {
private static final String[] LIBERTY_PROPS = new String[] { "server.config.dir", "server.output.dir" };
private static final String LIBERTY_PROFILE_INFO_INT = "com.ibm.websphere.config.mbeans.FeatureListMBean";
private static final String FULL_PROFILE_WAS_DIR_CLS = "com.ibm.websphere.product.WASDirectory";
@Override
public String checkPlatform() {
if (isLiberty()) {
return TargetServer.WebSphere_Liberty;
}
if (isFullProfile()) {
return TargetServer.WebSphere_7;
}
return null;
}
private boolean isLiberty() {
if (PrivilegedAccessHelper.shouldUsePrivilegedAccess()) {
return AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
@Override
public Boolean run() {
return isLibertyInternal();
}
});
} else {
return isLibertyInternal();
}
}
private boolean isFullProfile() {
if (PrivilegedAccessHelper.shouldUsePrivilegedAccess()) {
return AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
@Override
public Boolean run() {
return isFullProfileInternal();
}
});
} else {
return isFullProfileInternal();
}
}
/**
* A private worker method that must be wrapped in a doPriv block if the
* security manager is enabled.
*
* @return true if running Liberty, false otherwise.
*/
private Boolean isLibertyInternal() {
return checkProperties(LIBERTY_PROPS) || checkClassLoader(LIBERTY_PROFILE_INFO_INT);
}
/**
* A private worker method that must be wrapped in a doPriv block if the
* security manager is enabled.
*
* @return true if running full profile, false otherwise.
*/
private Boolean isFullProfileInternal() {
return checkClassLoader(FULL_PROFILE_WAS_DIR_CLS);
}
private Boolean checkProperties(String [] props) {
for (String prop : props) {
if (System.getProperty(prop) == null) {
return Boolean.FALSE;
}
}
return Boolean.TRUE;
}
private Boolean checkClassLoader(String className) {
try {
ClassLoader loader = WebSpherePlatformDetector.class.getClassLoader();
Class<?> cls = loader.loadClass(className);
if (cls != null) {
return Boolean.TRUE;
}
} catch (Throwable t) { }
return Boolean.FALSE;
}
}