Commit 044a3c549df302f3f641f2e165a48614b89d1be1

Authored by Dancovich
1 parent 07af24ef
Exists in master

Resolvido bug que impedia chamadas remotas JMX devido a classloader

ativado ser diferente do que carregou os recursos da aplicação.
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/proxy/DynamicMBeanProxy.java
@@ -96,9 +96,15 @@ public class DynamicMBeanProxy implements DynamicMBean { @@ -96,9 +96,15 @@ public class DynamicMBeanProxy implements DynamicMBean {
96 initializeMBeanInfo(); 96 initializeMBeanInfo();
97 } 97 }
98 98
99 - Management manager = Beans.getReference(Management.class); 99 +
  100 + //Define temporariamente o classloader para o classloader que carregou a classe Management.
  101 + //Isso evita problemas onde recursos necessários para executar o ManagementController não estão disponíveis
  102 + //para o classloader da chamada JMX.
  103 + final ClassLoader originalClassloader = Thread.currentThread().getContextClassLoader();
100 104
101 try{ 105 try{
  106 + Thread.currentThread().setContextClassLoader( Management.class.getClassLoader() );
  107 + Management manager = Beans.getReference(Management.class);
102 return manager.getProperty(managedType, attribute); 108 return manager.getProperty(managedType, attribute);
103 } 109 }
104 catch(DemoiselleException de){ 110 catch(DemoiselleException de){
@@ -112,6 +118,10 @@ public class DynamicMBeanProxy implements DynamicMBean { @@ -112,6 +118,10 @@ public class DynamicMBeanProxy implements DynamicMBean {
112 throw de; 118 throw de;
113 } 119 }
114 } 120 }
  121 + finally{
  122 + //Devolve o classloader original.
  123 + Thread.currentThread().setContextClassLoader( originalClassloader );
  124 + }
115 } 125 }
116 126
117 @Override 127 @Override
@@ -123,9 +133,15 @@ public class DynamicMBeanProxy implements DynamicMBean { @@ -123,9 +133,15 @@ public class DynamicMBeanProxy implements DynamicMBean {
123 initializeMBeanInfo(); 133 initializeMBeanInfo();
124 } 134 }
125 135
126 - Management manager = Beans.getReference(Management.class); 136 +
  137 + //Define temporariamente o classloader para o classloader que carregou a classe Management.
  138 + //Isso evita problemas onde recursos necessários para executar o ManagementController não estão disponíveis
  139 + //para o classloader da chamada JMX.
  140 + final ClassLoader originalClassloader = Thread.currentThread().getContextClassLoader();
127 141
128 try{ 142 try{
  143 + Thread.currentThread().setContextClassLoader( Management.class.getClassLoader() );
  144 + Management manager = Beans.getReference(Management.class);
129 manager.setProperty(managedType, attribute.getName(), attribute.getValue()); 145 manager.setProperty(managedType, attribute.getName(), attribute.getValue());
130 } 146 }
131 catch(DemoiselleException de){ 147 catch(DemoiselleException de){
@@ -139,6 +155,10 @@ public class DynamicMBeanProxy implements DynamicMBean { @@ -139,6 +155,10 @@ public class DynamicMBeanProxy implements DynamicMBean {
139 throw de; 155 throw de;
140 } 156 }
141 } 157 }
  158 + finally{
  159 + //Devolve o classloader original.
  160 + Thread.currentThread().setContextClassLoader( originalClassloader );
  161 + }
142 } 162 }
143 163
144 @Override 164 @Override
@@ -190,14 +210,24 @@ public class DynamicMBeanProxy implements DynamicMBean { @@ -190,14 +210,24 @@ public class DynamicMBeanProxy implements DynamicMBean {
190 initializeMBeanInfo(); 210 initializeMBeanInfo();
191 } 211 }
192 212
193 - Management manager = Beans.getReference(Management.class); 213 +
  214 + //Define temporariamente o classloader para o classloader que carregou a classe Management.
  215 + //Isso evita problemas onde recursos necessários para executar o ManagementController não estão disponíveis
  216 + //para o classloader da chamada JMX.
  217 + final ClassLoader originalClassloader = Thread.currentThread().getContextClassLoader();
194 218
195 try{ 219 try{
  220 + Thread.currentThread().setContextClassLoader( Management.class.getClassLoader() );
  221 + Management manager = Beans.getReference(Management.class);
196 return manager.invoke(managedType, actionName, params); 222 return manager.invoke(managedType, actionName, params);
197 } 223 }
198 catch(DemoiselleException de){ 224 catch(DemoiselleException de){
199 throw new MBeanException(new Exception(de.getMessage())); 225 throw new MBeanException(new Exception(de.getMessage()));
200 } 226 }
  227 + finally{
  228 + //Devolve o classloader original.
  229 + Thread.currentThread().setContextClassLoader( originalClassloader );
  230 + }
201 } 231 }
202 232
203 /** 233 /**