После долгих раскопок я наконец-то понял проблему. Обратите внимание, что сообщенная «ошибка» в 8.5.35, которая была исправлена в 8.5.36, по-видимому, вообще не является ошибкой. Чистая спекуляция с моей стороны, но сообщаемая проблема существует в последующих выпусках TomCat, и 8.5.36 не найти.
При получении набора mBean для вызова mBeanServer.getAttribute () фактически существует 2 mBean. передаваемые объекты - один работает оригинал, другой имеет дополнительный ключ - "subtype = SocketProperties". Этот дополнительный ключ был тем, что вызывало ошибку в моем коде.
До 8.5.35 был только один набор mBean, который не включает ключ подтипа.
Мой код в основном создание массива ObjectInstances, которые фильтруются для «Type = ThreadPool».
Например, при установке Tomcat по умолчанию до 8.5.35 вы получаете ObjectName:
Catalina: type = ThreadPool, name = "бла-бла-бла"
Начиная с 8.5.35 вы получаете 2:
Каталина: type = ThreadPool, name = "бла-бла-бла"
Catalina: type = ThreadPool, name = "бла-бла-бла", subType = SocketProperties
Это второй, который вызывает следующую ошибку: "не удается найти атрибут maxthreads для org. apache .tomcat.util. net .socketproperties ", когда он попадает в следующую строку кода:
mBeanServer.getAttribute(objectName, "maxThreads")
Простое исключение объекта nameNames, содержащего ключ подтипа, из моего массива, проблема была решена.
filter = "*:type=ThreadPool,*";
objectName = new ObjectName(filter);
Set<ObjectInstance> setOfInstances = mBeanServer.queryMBeans(objectName, null);
for (ObjectInstance objInst : setOfInstances)
{
if(!objInst.getObjectName().getKeyPropertyListString().contains("subType"))
ArrayOfObjects.addElement(objInst.getObjectName());
}
Я уверен, что есть более чистый способ сделать это, и я хотел бы услышать это, но я был просто рад, наконец, выяснить причину моей проблемы и обойти ее.
Надеюсь, эта информация поможет другим, кто столкнулся с той же проблемой.