org.apache.activemq.artemis.utils.Env Maven / Gradle / Ivy
Go to download
This artifact provides a single jar that contains all classes required to use remote EJB and JMS, including
all dependencies. It is intended for use by those not using maven, maven users should just import the EJB and
JMS BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up
with different versions on classes on the class path).
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.artemis.utils;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
/**
* Utility that detects various properties specific to the current runtime
* environment, such as JVM bitness and OS type.
*/
public final class Env {
private static final int OS_PAGE_SIZE;
static {
//most common OS page size value
int osPageSize = 4096;
sun.misc.Unsafe instance;
try {
Field field = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
instance = (sun.misc.Unsafe) field.get((Object) null);
} catch (Throwable t) {
try {
Constructor c = sun.misc.Unsafe.class.getDeclaredConstructor(new Class[0]);
c.setAccessible(true);
instance = c.newInstance(new Object[0]);
} catch (Throwable t1) {
instance = null;
}
}
if (instance != null) {
osPageSize = instance.pageSize();
}
OS_PAGE_SIZE = osPageSize;
}
/**
* The system will change a few logs and semantics to be suitable to
* run a long testsuite.
* Like a few log entries that are only valid during a production system.
* or a few cases we need to know as warn on the testsuite and as log in production.
*/
private static boolean testEnv = false;
private static final String OS = System.getProperty("os.name").toLowerCase();
private static final boolean IS_LINUX = OS.startsWith("linux");
private static final boolean IS_MAC = OS.startsWith("mac");
private static final boolean IS_WINDOWS = OS.startsWith("windows");
private Env() {
}
/**
* Return the size in bytes of a OS memory page.
* This value will always be a power of two.
*/
public static int osPageSize() {
return OS_PAGE_SIZE;
}
public static boolean isTestEnv() {
return testEnv;
}
public static void setTestEnv(boolean testEnv) {
Env.testEnv = testEnv;
}
public static boolean isLinuxOs() {
return IS_LINUX == true;
}
public static boolean isMacOs() {
return IS_MAC == true;
}
public static boolean isWindowsOs() {
return IS_WINDOWS == true;
}
}