use of org.graalvm.nativeimage.ObjectHandles in project graal by oracle.
the class JMXToLibGraalEntryPoints method getObjectName.
/**
* Returns the name to use to register the MBean.
*/
@JMXToLibGraal(GetObjectName)
@CEntryPoint(name = "Java_org_graalvm_compiler_hotspot_management_JMXToLibGraalCalls_getObjectName")
@SuppressWarnings({ "try", "unused" })
static JNI.JString getObjectName(JNI.JNIEnv env, JNI.JClass hsClazz, @CEntryPoint.IsolateThreadContext long isolateThreadId, long handle) {
JNIMethodScope scope = LibGraalUtil.openScope(JMXToLibGraalEntryPoints.class, GetObjectName, env);
try (JNIMethodScope s = scope) {
ObjectHandles globalHandles = ObjectHandles.getGlobal();
MBeanProxy<?> registration = globalHandles.get(WordFactory.pointer(handle));
String name = registration.getName();
scope.setObjectResult(JNIUtil.createHSString(env, name));
}
return scope.getObjectResult();
}
use of org.graalvm.nativeimage.ObjectHandles in project graal by oracle.
the class JMXToLibGraalEntryPoints method finishRegistration.
/**
* Notifies the {@link MBeanProxy} about finished registration.
*/
@JMXToLibGraal(FinishRegistration)
@CEntryPoint(name = "Java_org_graalvm_compiler_hotspot_management_JMXToLibGraalCalls_finishRegistration")
@SuppressWarnings({ "try", "unused" })
static void finishRegistration(JNI.JNIEnv env, JNI.JClass hsClazz, @CEntryPoint.IsolateThreadContext long isolateThreadId, JNI.JLongArray handles) {
try (JNIMethodScope s = LibGraalUtil.openScope(JMXToLibGraalEntryPoints.class, FinishRegistration, env)) {
long len = JNIUtil.GetArrayLength(env, handles);
CLongPointer elems = JNIUtil.GetLongArrayElements(env, handles, WordFactory.nullPointer());
try {
ObjectHandles globalHandles = ObjectHandles.getGlobal();
for (int i = 0; i < len; i++) {
MBeanProxy<?> registration = globalHandles.get(WordFactory.pointer(elems.read(i)));
registration.finishRegistration();
}
} finally {
JNIUtil.ReleaseLongArrayElements(env, handles, elems, JNI.JArray.MODE_RELEASE);
}
}
}
use of org.graalvm.nativeimage.ObjectHandles in project graal by oracle.
the class JMXToLibGraalEntryPoints method pollRegistrations.
/**
* Returns the pending {@link DynamicMBean} registrations.
*/
@JMXToLibGraal(PollRegistrations)
@CEntryPoint(name = "Java_org_graalvm_compiler_hotspot_management_JMXToLibGraalCalls_pollRegistrations")
@SuppressWarnings({ "try", "unused" })
static JNI.JLongArray pollRegistrations(JNI.JNIEnv env, JNI.JClass hsClazz, @CEntryPoint.IsolateThreadContext long isolateThreadId) {
JNIMethodScope scope = LibGraalUtil.openScope(JMXToLibGraalEntryPoints.class, PollRegistrations, env);
try (JNIMethodScope s = scope) {
List<MBeanProxy<?>> registrations = MBeanProxy.drainRegistrations();
JNI.JLongArray res = JNIUtil.NewLongArray(env, registrations.size());
CLongPointer elems = JNIUtil.GetLongArrayElements(env, res, WordFactory.nullPointer());
try {
ObjectHandles globalHandles = ObjectHandles.getGlobal();
for (int i = 0; i < registrations.size(); i++) {
long handle = globalHandles.create(registrations.get(i)).rawValue();
elems.write(i, handle);
}
} finally {
JNIUtil.ReleaseLongArrayElements(env, res, elems, JNI.JArray.MODE_WRITE_RELEASE);
}
scope.setObjectResult(res);
}
return scope.getObjectResult();
}
use of org.graalvm.nativeimage.ObjectHandles in project graal by oracle.
the class JMXToLibGraalEntryPoints method getMBeanInfo.
/**
* Returns the {@link MBeanInfo} encoded as a byte array using {@link OptionsEncoder}.
*/
@JMXToLibGraal(GetMBeanInfo)
@CEntryPoint(name = "Java_org_graalvm_compiler_hotspot_management_JMXToLibGraalCalls_getMBeanInfo")
@SuppressWarnings({ "try", "unused" })
static JNI.JByteArray getMBeanInfo(JNI.JNIEnv env, JNI.JClass hsClazz, @CEntryPoint.IsolateThreadContext long isolateThreadId, long handle) {
JNIMethodScope scope = LibGraalUtil.openScope(JMXToLibGraalEntryPoints.class, GetMBeanInfo, env);
try (JNIMethodScope s = scope) {
ObjectHandles globalHandles = ObjectHandles.getGlobal();
MBeanProxy<?> registration = globalHandles.get(WordFactory.pointer(handle));
MBeanInfo info = registration.getBean().getMBeanInfo();
Map<String, Object> map = new LinkedHashMap<>();
map.put("bean.class", info.getClassName());
map.put("bean.description", info.getDescription());
for (MBeanAttributeInfo attr : info.getAttributes()) {
putAttributeInfo(map, attr);
}
int opCounter = 0;
for (MBeanOperationInfo op : info.getOperations()) {
putOperationInfo(map, op, ++opCounter);
}
scope.setObjectResult(mapToRaw(env, map));
}
return scope.getObjectResult();
}
Aggregations