From 2ba1dd47b099970be707f81e4e515a9d122304e7 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 6 Jan 2010 22:15:58 +0000 Subject: [PATCH] allow for identifying a specific JBossWorkManagerMBean (SPR-6648) --- .../GlassFishWorkManagerTaskExecutor.java | 7 ++---- .../jboss/JBossWorkManagerTaskExecutor.java | 12 ++++++++- .../jca/work/jboss/JBossWorkManagerUtils.java | 25 +++++++++++++------ 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/org.springframework.transaction/src/main/java/org/springframework/jca/work/glassfish/GlassFishWorkManagerTaskExecutor.java b/org.springframework.transaction/src/main/java/org/springframework/jca/work/glassfish/GlassFishWorkManagerTaskExecutor.java index d625f0c59c..7443a6bf42 100644 --- a/org.springframework.transaction/src/main/java/org/springframework/jca/work/glassfish/GlassFishWorkManagerTaskExecutor.java +++ b/org.springframework.transaction/src/main/java/org/springframework/jca/work/glassfish/GlassFishWorkManagerTaskExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,6 @@ package org.springframework.jca.work.glassfish; import java.lang.reflect.Method; - import javax.resource.spi.work.WorkManager; import org.springframework.jca.work.WorkManagerTaskExecutor; @@ -54,15 +53,13 @@ public class GlassFishWorkManagerTaskExecutor extends WorkManagerTaskExecutor { } } - /** * Identify a specific GlassFish thread pool to talk to. *

The thread pool name matches the resource adapter name * in default RAR deployment scenarios. */ public void setThreadPoolName(String threadPoolName) { - WorkManager wm = (WorkManager) - ReflectionUtils.invokeMethod(this.getWorkManagerMethod, null, new Object[] {threadPoolName}); + WorkManager wm = (WorkManager) ReflectionUtils.invokeMethod(this.getWorkManagerMethod, null, threadPoolName); if (wm == null) { throw new IllegalArgumentException("Specified thread pool name '" + threadPoolName + "' does not correspond to an actual pool definition in GlassFish. Check your configuration!"); diff --git a/org.springframework.transaction/src/main/java/org/springframework/jca/work/jboss/JBossWorkManagerTaskExecutor.java b/org.springframework.transaction/src/main/java/org/springframework/jca/work/jboss/JBossWorkManagerTaskExecutor.java index fcb8b81c7e..5abb09231b 100644 --- a/org.springframework.transaction/src/main/java/org/springframework/jca/work/jboss/JBossWorkManagerTaskExecutor.java +++ b/org.springframework.transaction/src/main/java/org/springframework/jca/work/jboss/JBossWorkManagerTaskExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,6 +35,16 @@ import org.springframework.jca.work.WorkManagerTaskExecutor; */ public class JBossWorkManagerTaskExecutor extends WorkManagerTaskExecutor { + /** + * Identify a specific JBossWorkManagerMBean to talk to, + * through its JMX object name. + *

The default MBean name is "jboss.jca:service=WorkManager". + * @see JBossWorkManagerUtils#getWorkManager(String) + */ + public void setWorkManagerMBeanName(String mbeanName) { + setWorkManager(JBossWorkManagerUtils.getWorkManager(mbeanName)); + } + /** * Obtains the default JBoss JCA WorkManager through a JMX lookup * for the JBossWorkManagerMBean. diff --git a/org.springframework.transaction/src/main/java/org/springframework/jca/work/jboss/JBossWorkManagerUtils.java b/org.springframework.transaction/src/main/java/org/springframework/jca/work/jboss/JBossWorkManagerUtils.java index 207e0abd9d..7ed7bed32b 100644 --- a/org.springframework.transaction/src/main/java/org/springframework/jca/work/jboss/JBossWorkManagerUtils.java +++ b/org.springframework.transaction/src/main/java/org/springframework/jca/work/jboss/JBossWorkManagerUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,6 @@ package org.springframework.jca.work.jboss; import java.lang.reflect.Method; - import javax.management.MBeanServerConnection; import javax.management.MBeanServerInvocationHandler; import javax.management.ObjectName; @@ -37,23 +36,33 @@ public abstract class JBossWorkManagerUtils { private static final String MBEAN_SERVER_CONNECTION_JNDI_NAME = "jmx/invoker/RMIAdaptor"; - private static final String WORK_MANAGER_OBJECT_NAME = "jboss.jca:service=WorkManager"; + private static final String DEFAULT_WORK_MANAGER_MBEAN_NAME = "jboss.jca:service=WorkManager"; /** * Obtain the default JBoss JCA WorkManager through a JMX lookup - * for the JBossWorkManagerMBean. + * for the default JBossWorkManagerMBean. * @see org.jboss.resource.work.JBossWorkManagerMBean */ public static WorkManager getWorkManager() { + return getWorkManager(DEFAULT_WORK_MANAGER_MBEAN_NAME); + } + + /** + * Obtain the default JBoss JCA WorkManager through a JMX lookup + * for the JBossWorkManagerMBean. + * @param workManagerObjectName the JMX object name to use + * @see org.jboss.resource.work.JBossWorkManagerMBean + */ + public static WorkManager getWorkManager(String mbeanName) { try { - Class mbeanClass = JBossWorkManagerUtils.class.getClassLoader().loadClass(JBOSS_WORK_MANAGER_MBEAN_CLASS_NAME); + Class mbeanClass = JBossWorkManagerUtils.class.getClassLoader().loadClass(JBOSS_WORK_MANAGER_MBEAN_CLASS_NAME); InitialContext jndiContext = new InitialContext(); MBeanServerConnection mconn = (MBeanServerConnection) jndiContext.lookup(MBEAN_SERVER_CONNECTION_JNDI_NAME); - ObjectName objectName = ObjectName.getInstance(WORK_MANAGER_OBJECT_NAME); + ObjectName objectName = ObjectName.getInstance(mbeanName); Object workManagerMBean = MBeanServerInvocationHandler.newProxyInstance(mconn, objectName, mbeanClass, false); - Method getInstanceMethod = workManagerMBean.getClass().getMethod("getInstance", new Class[0]); - return (WorkManager) getInstanceMethod.invoke(workManagerMBean, new Object[0]); + Method getInstanceMethod = workManagerMBean.getClass().getMethod("getInstance"); + return (WorkManager) getInstanceMethod.invoke(workManagerMBean); } catch (Exception ex) { throw new IllegalStateException(