У меня проблемы с изменением моих свойств MBean через JConsole.У меня есть компонент Threading, который вызывается с:
public static void main(String[] args) throws Exception {
// JMX
new SimpleJmxAgent();
// spring executor context
ApplicationContext ctx = new FileSystemXmlApplicationContext(
"src/resources/ThreadContent.xml");
startThreads(ctx);
}
private static void startThreads(ApplicationContext ctx) {
TaskExecutor tE = (TaskExecutor) ctx.getBean("TaskExecutor");
System.out.println("Starting threads");
for (int i = 0; i < 10; i++) {
tE.execute(new RepeatingGrpPoC());
}
ThreadContent.xml содержит все значения свойств по умолчанию.
SimpleJmxAgent выглядит так:
public SimpleJmxAgent() {
mbs = ManagementFactory.getPlatformMBeanServer();
// Spring context - used to load MBeans
XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource(
"resources/JMXcontent.xml"));
// Unique identification of MBeans
ThreadPoolManager threadBean = (ThreadPoolManager) factory.getBean("ThreadPoolBean");
ObjectName threadName = null;
try {
// Uniquely identify the MBeans and register them with the platform MBeanServer
threadName = new ObjectName("THREADING:name=ThreadBean");
mbs.registerMBean(threadBean, threadName);
} catch(Exception e) {
e.printStackTrace();
}
У меня есть ThreadPoolManagerнаследование от ThreadPoolTaskExecutor для предоставления ему доступа к методам получения и установки свойств потока, таких как: public void setCorePoolSize(int corePoolSize)
РЕДАКТИРОВАНИЕ:
Я реализовал использованиеиз:
public void setCorePoolSize(int corePoolSize){
super.setCorePoolSize(corePoolSize);
}
, завернутый в:
public void changeCorePoolSize(int x){
setCorePoolSize(x);
}
Итак, теперь операция отображается на вкладке MBeans.Тем не менее, атрибуты отображаются в виде значений, отличных от используемых.Я установил в свой ThreadContext.xml
property name="corePoolSize" value="5"
Однако при просмотре атрибут установлен на 1, что является значением по умолчанию.Я могу изменить это с помощью Jconsole с помощью операции changeCorePoolSize
, но он имеет только косметический эффект, изменяя отображаемое значение, но не изменяя текущий процесс, в котором все еще продолжается 5 TaskExecutor
потоков.
Я что-то упустилв чем я занимаюсь?Что может вызвать разрыв между свойствами, которые я устанавливаю через ThreadContext.xml, и тем, что отображается в атрибутах в Jconsole?