/*******************************************************************************
* Copyright (c) 2015 IBM Corporation, Oracle. 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, Andrei Ilitchev
* - 455683: Automatically detect target server
******************************************************************************/
package org.eclipse.persistence.platform.server.wls;
import java.lang.reflect.Method;
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 WebLogicPlatformDetector implements ServerPlatformDetector {
@Override
public String checkPlatform() {
String platform = null;
String serverNameAndVersion;
if (PrivilegedAccessHelper.shouldUsePrivilegedAccess()) {
serverNameAndVersion = AccessController.doPrivileged(new PrivilegedAction<String>() {
@Override
public String run() {
return getServerNameAndVersionInternal();
}
});
} else {
serverNameAndVersion = getServerNameAndVersionInternal();
}
if (serverNameAndVersion != null) {
int idx = serverNameAndVersion.indexOf('.');
switch (serverNameAndVersion.substring(0, idx)) {
case "12":
platform = TargetServer.WebLogic_12;
break;
case "11":
case "10":
platform = TargetServer.WebLogic_10;
break;
case "9":
platform = TargetServer.WebLogic_9;
break;
default:
platform = TargetServer.WebLogic;
}
}
return platform;
}
/**
* A private worker method that must be wrapped in a doPriv block if the
* security manager is enabled.
*
* @return The server name and version String. null otherwise.
*/
private String getServerNameAndVersionInternal() {
try {
String loaderStr = WebLogicPlatformDetector.class.getClassLoader().getClass().getName();
if (loaderStr.contains("weblogic")) {
Class versionCls = Class.forName("weblogic.version");
Method method = versionCls.getMethod("getReleaseBuildVersion");
return (String) method.invoke(null);
}
} catch (Throwable t) {
//ignore
}
return null;
}
}