Commit aae675b6be703da26ef4e1640737bdfe465b22e5

Authored by Luciano Borges
2 parents ea199d55 9fe4174c
Exists in master

Merge branch '2.4.0' of git@github.com:demoiselle/framework.git into 2.4.0

impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/management/Management.java
@@ -46,15 +46,14 @@ import java.util.Set; @@ -46,15 +46,14 @@ import java.util.Set;
46 import javax.enterprise.context.ApplicationScoped; 46 import javax.enterprise.context.ApplicationScoped;
47 import javax.enterprise.context.RequestScoped; 47 import javax.enterprise.context.RequestScoped;
48 import javax.inject.Inject; 48 import javax.inject.Inject;
49 -import javax.management.ReflectionException;  
50 import javax.validation.ConstraintViolation; 49 import javax.validation.ConstraintViolation;
  50 +import javax.validation.ConstraintViolationException;
51 import javax.validation.Validation; 51 import javax.validation.Validation;
52 import javax.validation.ValidationException; 52 import javax.validation.ValidationException;
53 import javax.validation.Validator; 53 import javax.validation.Validator;
54 54
55 import org.slf4j.Logger; 55 import org.slf4j.Logger;
56 56
57 -import br.gov.frameworkdemoiselle.DemoiselleException;  
58 import br.gov.frameworkdemoiselle.annotation.ManagedProperty; 57 import br.gov.frameworkdemoiselle.annotation.ManagedProperty;
59 import br.gov.frameworkdemoiselle.annotation.Name; 58 import br.gov.frameworkdemoiselle.annotation.Name;
60 import br.gov.frameworkdemoiselle.internal.context.ContextManager; 59 import br.gov.frameworkdemoiselle.internal.context.ContextManager;
@@ -62,6 +61,8 @@ import br.gov.frameworkdemoiselle.internal.context.ManagedContext; @@ -62,6 +61,8 @@ import br.gov.frameworkdemoiselle.internal.context.ManagedContext;
62 import br.gov.frameworkdemoiselle.internal.management.ManagedType.MethodDetail; 61 import br.gov.frameworkdemoiselle.internal.management.ManagedType.MethodDetail;
63 import br.gov.frameworkdemoiselle.lifecycle.ManagementExtension; 62 import br.gov.frameworkdemoiselle.lifecycle.ManagementExtension;
64 import br.gov.frameworkdemoiselle.management.AttributeChangeNotification; 63 import br.gov.frameworkdemoiselle.management.AttributeChangeNotification;
  64 +import br.gov.frameworkdemoiselle.management.ManagedAttributeNotFoundException;
  65 +import br.gov.frameworkdemoiselle.management.ManagedInvokationException;
65 import br.gov.frameworkdemoiselle.management.NotificationManager; 66 import br.gov.frameworkdemoiselle.management.NotificationManager;
66 import br.gov.frameworkdemoiselle.stereotype.ManagementController; 67 import br.gov.frameworkdemoiselle.stereotype.ManagementController;
67 import br.gov.frameworkdemoiselle.util.Beans; 68 import br.gov.frameworkdemoiselle.util.Beans;
@@ -124,7 +125,7 @@ public class Management implements Serializable { @@ -124,7 +125,7 @@ public class Management implements Serializable {
124 * parameters. 125 * parameters.
125 * @return The return value of the original invoked operation. Methods of return type <code>void</code> will return 126 * @return The return value of the original invoked operation. Methods of return type <code>void</code> will return
126 * the {@link Void} type. 127 * the {@link Void} type.
127 - * @throws ReflectionException 128 + * @throws ManagedInvokationException
128 * In case the operation doesn't exist or have a different signature 129 * In case the operation doesn't exist or have a different signature
129 */ 130 */
130 public Object invoke(ManagedType managedType, String actionName, Object[] params) { 131 public Object invoke(ManagedType managedType, String actionName, Object[] params) {
@@ -141,16 +142,16 @@ public class Management implements Serializable { @@ -141,16 +142,16 @@ public class Management implements Serializable {
141 .getType().getCanonicalName())); 142 .getType().getCanonicalName()));
142 return method.getMethod().invoke(delegate, params); 143 return method.getMethod().invoke(delegate, params);
143 } catch (Exception e) { 144 } catch (Exception e) {
144 - throw new DemoiselleException(bundle.getString("management-invoke-error", actionName), e); 145 + throw new ManagedInvokationException(bundle.getString("management-invoke-error", actionName), e);
145 } 146 }
146 } else { 147 } else {
147 - throw new DemoiselleException(bundle.getString("management-invoke-error", actionName)); 148 + throw new ManagedInvokationException(bundle.getString("management-invoke-error", actionName));
148 } 149 }
149 } finally { 150 } finally {
150 deactivateContexts(managedType.getType()); 151 deactivateContexts(managedType.getType());
151 } 152 }
152 } else { 153 } else {
153 - throw new DemoiselleException(bundle.getString("management-type-not-found")); 154 + throw new ManagedInvokationException(bundle.getString("management-type-not-found"));
154 } 155 }
155 } 156 }
156 157
@@ -169,6 +170,8 @@ public class Management implements Serializable { @@ -169,6 +170,8 @@ public class Management implements Serializable {
169 * @param propertyName 170 * @param propertyName
170 * The name of the property 171 * The name of the property
171 * @return The current value of the property 172 * @return The current value of the property
  173 + * @throws ManagedAttributeNotFoundException If the given property doesn't exist or there was a problem trying to read the property value.
  174 + * @throws ManagedInvokationException If there was an error trying to invoke the getter method to read the propery value.
172 */ 175 */
173 public Object getProperty(ManagedType managedType, String propertyName) { 176 public Object getProperty(ManagedType managedType, String propertyName) {
174 177
@@ -186,16 +189,16 @@ public class Management implements Serializable { @@ -186,16 +189,16 @@ public class Management implements Serializable {
186 189
187 return getterMethod.invoke(delegate, (Object[]) null); 190 return getterMethod.invoke(delegate, (Object[]) null);
188 } catch (Exception e) { 191 } catch (Exception e) {
189 - throw new DemoiselleException(bundle.getString("management-invoke-error", getterMethod.getName()), 192 + throw new ManagedInvokationException(bundle.getString("management-invoke-error", getterMethod.getName()),
190 e); 193 e);
191 } finally { 194 } finally {
192 deactivateContexts(managedType.getType()); 195 deactivateContexts(managedType.getType());
193 } 196 }
194 } else { 197 } else {
195 - throw new DemoiselleException(bundle.getString("management-read-value-error", propertyName)); 198 + throw new ManagedAttributeNotFoundException(bundle.getString("management-read-value-error", propertyName));
196 } 199 }
197 } else { 200 } else {
198 - throw new DemoiselleException(bundle.getString("management-type-not-found")); 201 + throw new ManagedInvokationException(bundle.getString("management-type-not-found"));
199 } 202 }
200 } 203 }
201 204
@@ -215,7 +218,11 @@ public class Management implements Serializable { @@ -215,7 +218,11 @@ public class Management implements Serializable {
215 * The name of the property 218 * The name of the property
216 * @param newValue 219 * @param newValue
217 * The new value of the property 220 * The new value of the property
  221 + * @throws ManagedInvokationException If there was an error trying to call the setter method for this property.
  222 + * @throws ManagedAttributeNotFoundException If the giver property doesn't exist or could'n be written to.
  223 + * @throws ConstraintViolationException If the property defined one or more validation constraints and setting this value violates some of those constraints.
218 */ 224 */
  225 + @SuppressWarnings("unchecked")
219 public void setProperty(ManagedType managedType, String propertyName, Object newValue) { 226 public void setProperty(ManagedType managedType, String propertyName, Object newValue) {
220 227
221 if (managedTypes.contains(managedType)) { 228 if (managedTypes.contains(managedType)) {
@@ -249,9 +256,9 @@ public class Management implements Serializable { @@ -249,9 +256,9 @@ public class Management implements Serializable {
249 errorBuffer.insert(errorBuffer.length(), "\r\n"); 256 errorBuffer.insert(errorBuffer.length(), "\r\n");
250 } 257 }
251 258
252 - throw new DemoiselleException(bundle.getString(  
253 - "management-validation-constraint-violation", managedType.getType()  
254 - .getCanonicalName(), propertyName, errorBuffer.toString())); 259 + throw new ConstraintViolationException(bundle.getString("management-validation-constraint-violation"
  260 + , managedType.getType().getCanonicalName(), propertyName, errorBuffer.toString())
  261 + , (Set<ConstraintViolation<?>>) violations);
255 } 262 }
256 } else { 263 } else {
257 logger.warn(bundle.getString("management-validation-validator-not-found")); 264 logger.warn(bundle.getString("management-validation-validator-not-found"));
@@ -276,19 +283,19 @@ public class Management implements Serializable { @@ -276,19 +283,19 @@ public class Management implements Serializable {
276 .getCanonicalName()), propertyName, attributeType, oldValue, newValue); 283 .getCanonicalName()), propertyName, attributeType, oldValue, newValue);
277 notificationManager.sendNotification(notification); 284 notificationManager.sendNotification(notification);
278 285
279 - } catch (DemoiselleException de) {  
280 - throw de; 286 + } catch (ConstraintViolationException ce) {
  287 + throw ce;
281 } catch (Exception e) { 288 } catch (Exception e) {
282 - throw new DemoiselleException(bundle.getString("management-invoke-error", method.getName()), e); 289 + throw new ManagedInvokationException(bundle.getString("management-invoke-error", method.getName()), e);
283 } finally { 290 } finally {
284 deactivateContexts(managedType.getType()); 291 deactivateContexts(managedType.getType());
285 } 292 }
286 293
287 } else { 294 } else {
288 - throw new DemoiselleException(bundle.getString("management-write-value-error", propertyName)); 295 + throw new ManagedAttributeNotFoundException(bundle.getString("management-write-value-error", propertyName));
289 } 296 }
290 } else { 297 } else {
291 - throw new DemoiselleException(bundle.getString("management-type-not-found")); 298 + throw new ManagedInvokationException(bundle.getString("management-type-not-found"));
292 } 299 }
293 300
294 } 301 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/management/ManagedAttributeNotFoundException.java 0 → 100644
@@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
  1 +package br.gov.frameworkdemoiselle.management;
  2 +
  3 +import br.gov.frameworkdemoiselle.DemoiselleException;
  4 +
  5 +/**
  6 + *
  7 + * Thrown when a management client tries to read or write a property, but the
  8 + * management engine has no knowledge of an attribute with the given name.
  9 + *
  10 + * @author serpro
  11 + *
  12 + */
  13 +public class ManagedAttributeNotFoundException extends DemoiselleException {
  14 +
  15 + private static final long serialVersionUID = 2554101387574235418L;
  16 +
  17 + public ManagedAttributeNotFoundException(String message, Throwable cause) {
  18 + super(message, cause);
  19 + }
  20 +
  21 + public ManagedAttributeNotFoundException(String message) {
  22 + super(message);
  23 + }
  24 +
  25 + public ManagedAttributeNotFoundException(Throwable cause) {
  26 + super(cause);
  27 + }
  28 +
  29 +}
impl/core/src/main/java/br/gov/frameworkdemoiselle/management/ManagedInvokationException.java 0 → 100644
@@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
  1 +package br.gov.frameworkdemoiselle.management;
  2 +
  3 +import br.gov.frameworkdemoiselle.DemoiselleException;
  4 +
  5 +
  6 +public class ManagedInvokationException extends DemoiselleException {
  7 +
  8 + private static final long serialVersionUID = -1542365184737242152L;
  9 +
  10 + public ManagedInvokationException(String message, Throwable cause) {
  11 + super(message, cause);
  12 + }
  13 +
  14 + public ManagedInvokationException(String message) {
  15 + super(message);
  16 + }
  17 +
  18 + public ManagedInvokationException(Throwable cause) {
  19 + super(cause);
  20 + }
  21 +
  22 +
  23 +}
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/DynamicMBeanProxy.java
@@ -58,6 +58,8 @@ import br.gov.frameworkdemoiselle.internal.management.ManagedType.FieldDetail; @@ -58,6 +58,8 @@ import br.gov.frameworkdemoiselle.internal.management.ManagedType.FieldDetail;
58 import br.gov.frameworkdemoiselle.internal.management.ManagedType.MethodDetail; 58 import br.gov.frameworkdemoiselle.internal.management.ManagedType.MethodDetail;
59 import br.gov.frameworkdemoiselle.internal.management.ManagedType.ParameterDetail; 59 import br.gov.frameworkdemoiselle.internal.management.ManagedType.ParameterDetail;
60 import br.gov.frameworkdemoiselle.internal.management.Management; 60 import br.gov.frameworkdemoiselle.internal.management.Management;
  61 +import br.gov.frameworkdemoiselle.management.ManagedAttributeNotFoundException;
  62 +import br.gov.frameworkdemoiselle.management.ManagedInvokationException;
61 import br.gov.frameworkdemoiselle.stereotype.ManagementController; 63 import br.gov.frameworkdemoiselle.stereotype.ManagementController;
62 import br.gov.frameworkdemoiselle.util.Beans; 64 import br.gov.frameworkdemoiselle.util.Beans;
63 import br.gov.frameworkdemoiselle.util.ResourceBundle; 65 import br.gov.frameworkdemoiselle.util.ResourceBundle;
@@ -95,7 +97,21 @@ public class DynamicMBeanProxy implements DynamicMBean { @@ -95,7 +97,21 @@ public class DynamicMBeanProxy implements DynamicMBean {
95 } 97 }
96 98
97 Management manager = Beans.getReference(Management.class); 99 Management manager = Beans.getReference(Management.class);
98 - return manager.getProperty(managedType, attribute); 100 +
  101 + try{
  102 + return manager.getProperty(managedType, attribute);
  103 + }
  104 + catch(DemoiselleException de){
  105 + if (ManagedAttributeNotFoundException.class.isInstance(de)){
  106 + throw new AttributeNotFoundException(de.getMessage());
  107 + }
  108 + else if (ManagedInvokationException.class.isInstance(de)){
  109 + throw new MBeanException(new Exception(de.getMessage()));
  110 + }
  111 + else{
  112 + throw de;
  113 + }
  114 + }
99 } 115 }
100 116
101 @Override 117 @Override
@@ -108,7 +124,21 @@ public class DynamicMBeanProxy implements DynamicMBean { @@ -108,7 +124,21 @@ public class DynamicMBeanProxy implements DynamicMBean {
108 } 124 }
109 125
110 Management manager = Beans.getReference(Management.class); 126 Management manager = Beans.getReference(Management.class);
111 - manager.setProperty(managedType, attribute.getName(), attribute.getValue()); 127 +
  128 + try{
  129 + manager.setProperty(managedType, attribute.getName(), attribute.getValue());
  130 + }
  131 + catch(DemoiselleException de){
  132 + if (ManagedAttributeNotFoundException.class.isInstance(de)){
  133 + throw new AttributeNotFoundException(de.getMessage());
  134 + }
  135 + else if (ManagedInvokationException.class.isInstance(de)){
  136 + throw new MBeanException(new Exception(de.getMessage()));
  137 + }
  138 + else{
  139 + throw de;
  140 + }
  141 + }
112 } 142 }
113 143
114 @Override 144 @Override
@@ -161,7 +191,13 @@ public class DynamicMBeanProxy implements DynamicMBean { @@ -161,7 +191,13 @@ public class DynamicMBeanProxy implements DynamicMBean {
161 } 191 }
162 192
163 Management manager = Beans.getReference(Management.class); 193 Management manager = Beans.getReference(Management.class);
164 - return manager.invoke(managedType, actionName, params); 194 +
  195 + try{
  196 + return manager.invoke(managedType, actionName, params);
  197 + }
  198 + catch(DemoiselleException de){
  199 + throw new MBeanException(new Exception(de.getMessage()));
  200 + }
165 } 201 }
166 202
167 /** 203 /**
parent/bom/pom.xml
@@ -107,7 +107,7 @@ @@ -107,7 +107,7 @@
107 <dependency> 107 <dependency>
108 <groupId>br.gov.frameworkdemoiselle</groupId> 108 <groupId>br.gov.frameworkdemoiselle</groupId>
109 <artifactId>demoiselle-jmx</artifactId> 109 <artifactId>demoiselle-jmx</artifactId>
110 - <version>2.4.0-BETA2-SNAPSHOT</version> 110 + <version>2.4.0-BETA4-SNAPSHOT</version>
111 </dependency> 111 </dependency>
112 <!-- 112 <!--
113 <dependency> 113 <dependency>