Commit d0857853f01931f96f04ebf4cfaca857ce64e2db
1 parent
c5c7b636
Exists in
master
Refatorado pacote do projeto para conformar com padrões do framework
demoiselle.
Showing
18 changed files
with
914 additions
and
895 deletions
Show diff stats
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/configuration/JMXConfig.java
0 → 100644
| ... | ... | @@ -0,0 +1,142 @@ |
| 1 | +/* | |
| 2 | + * Demoiselle Framework | |
| 3 | + * Copyright (C) 2010 SERPRO | |
| 4 | + * ---------------------------------------------------------------------------- | |
| 5 | + * This file is part of Demoiselle Framework. | |
| 6 | + * | |
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | + * as published by the Free Software Foundation. | |
| 10 | + * | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 15 | + * | |
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | + * ---------------------------------------------------------------------------- | |
| 21 | + * Este arquivo é parte do Framework Demoiselle. | |
| 22 | + * | |
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | + * do Software Livre (FSF). | |
| 26 | + * | |
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | + * para maiores detalhes. | |
| 31 | + * | |
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | + */ | |
| 37 | +package br.gov.frameworkdemoiselle.configuration; | |
| 38 | + | |
| 39 | +import javax.management.NotificationBroadcaster; | |
| 40 | + | |
| 41 | +import br.gov.frameworkdemoiselle.annotation.Name; | |
| 42 | +import br.gov.frameworkdemoiselle.configuration.Configuration; | |
| 43 | +import br.gov.frameworkdemoiselle.stereotype.ManagementController; | |
| 44 | + | |
| 45 | +/** | |
| 46 | + * | |
| 47 | + * Contains configuration parameters to control how {@link Managed} classes are exposed to the MBean server. | |
| 48 | + * | |
| 49 | + * To use this class, inject it into your code using the {@link Inject} annotation. | |
| 50 | + * | |
| 51 | + * ex:<pre><code> | |
| 52 | + * | |
| 53 | + * public class BusinessClass(){ | |
| 54 | + * | |
| 55 | + * //... | |
| 56 | + * | |
| 57 | + * &at;Inject | |
| 58 | + * private JMXConfig jmxConfiguration; | |
| 59 | + * | |
| 60 | + * //... | |
| 61 | + * | |
| 62 | + * } | |
| 63 | + * </code></pre> | |
| 64 | + * | |
| 65 | + * @author serpro | |
| 66 | + * | |
| 67 | + */ | |
| 68 | +@Configuration(prefix = "frameworkdemoiselle.management.jmx.") | |
| 69 | +public class JMXConfig { | |
| 70 | + | |
| 71 | + @Name("mbean.domain") | |
| 72 | + private String mbeanDomain; | |
| 73 | + | |
| 74 | + @Name("notification.domain") | |
| 75 | + private String notificationDomain = "br.gov.frameworkdemoiselle.jmx"; | |
| 76 | + | |
| 77 | + @Name("notification.name") | |
| 78 | + private String notificationMBeanName = "NotificationBroadcaster"; | |
| 79 | + | |
| 80 | + /** | |
| 81 | + * </p>The domain to register all {@link ManagementController} classes found during boot.</p> | |
| 82 | + * | |
| 83 | + * <p>The full name of a MBean has the format of <code>domain:name=MBeanName</code> (ex: <code>br.gov.frameworkdemoiselle.jmx:name=NotificationBroadcaster</code>), this | |
| 84 | + * parameter is the "domain" portion of the full name.</p> | |
| 85 | + * | |
| 86 | + * <p>The default is <code>null</code> and when is set to <code>null</code>, all {@link Managed} classes will use it's own package as the domain.</p> | |
| 87 | + * | |
| 88 | + */ | |
| 89 | + public String getMbeanDomain() { | |
| 90 | + return mbeanDomain; | |
| 91 | + } | |
| 92 | + | |
| 93 | + /** | |
| 94 | + * @see #getMbeanDomain() | |
| 95 | + */ | |
| 96 | + public void setMbeanDomain(String mbeanDomain) { | |
| 97 | + this.mbeanDomain = mbeanDomain; | |
| 98 | + } | |
| 99 | + | |
| 100 | + /** | |
| 101 | + * <p>The name the {@link NotificationBroadcaster} MBean will be registered to. The full name | |
| 102 | + * of a MBean has the format of <code>domain:name=MBeanName</code> (ex: <code>br.gov.frameworkdemoiselle.jmx:name=NotificationBroadcaster</code>), this | |
| 103 | + * parameter is the ":name=MBeanName" portion without the ":name=".</p> | |
| 104 | + * | |
| 105 | + * <p>The default is the value returned by {@link Class#getSimpleName()} when called from the {@link NotificationBroadcaster} class.</p> | |
| 106 | + * | |
| 107 | + * @see #getMbeanDomain() | |
| 108 | + */ | |
| 109 | + public String getNotificationMBeanName() { | |
| 110 | + return notificationMBeanName; | |
| 111 | + } | |
| 112 | + | |
| 113 | + /** | |
| 114 | + * @see #getNotificationMBeanName() | |
| 115 | + */ | |
| 116 | + public void setNotificationMBeanName(String notificationMBeanName) { | |
| 117 | + this.notificationMBeanName = notificationMBeanName; | |
| 118 | + } | |
| 119 | + | |
| 120 | + /** | |
| 121 | + * </p>The domain to register the {@link NotificationBroadcaster} MBean.</p> | |
| 122 | + * | |
| 123 | + * <p>The full name of a MBean has the format of <code>domain:name=MBeanName</code> (ex: <code>br.gov.frameworkdemoiselle.jmx:name=NotificationBroadcaster</code>), this | |
| 124 | + * parameter is the "domain" portion of the full name.</p> | |
| 125 | + * | |
| 126 | + * <p>The default is <code>br.gov.frameworkdemoiselle.jmx</code>.</p> | |
| 127 | + * | |
| 128 | + */ | |
| 129 | + public String getNotificationDomain() { | |
| 130 | + return notificationDomain; | |
| 131 | + } | |
| 132 | + | |
| 133 | + /** | |
| 134 | + * @see #getNotificationDomain() | |
| 135 | + */ | |
| 136 | + public void setNotificationDomain(String notificationDomain) { | |
| 137 | + this.notificationDomain = notificationDomain; | |
| 138 | + } | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | +} | ... | ... |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/DynamicMBeanProxy.java
0 → 100644
| ... | ... | @@ -0,0 +1,264 @@ |
| 1 | +/* | |
| 2 | + * Demoiselle Framework | |
| 3 | + * Copyright (C) 2010 SERPRO | |
| 4 | + * ---------------------------------------------------------------------------- | |
| 5 | + * This file is part of Demoiselle Framework. | |
| 6 | + * | |
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | + * as published by the Free Software Foundation. | |
| 10 | + * | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 15 | + * | |
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | + * ---------------------------------------------------------------------------- | |
| 21 | + * Este arquivo é parte do Framework Demoiselle. | |
| 22 | + * | |
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | + * do Software Livre (FSF). | |
| 26 | + * | |
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | + * para maiores detalhes. | |
| 31 | + * | |
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | + */ | |
| 37 | +package br.gov.frameworkdemoiselle.internal; | |
| 38 | + | |
| 39 | +import java.util.ArrayList; | |
| 40 | +import java.util.Locale; | |
| 41 | +import java.util.Map.Entry; | |
| 42 | + | |
| 43 | +import javax.management.Attribute; | |
| 44 | +import javax.management.AttributeList; | |
| 45 | +import javax.management.AttributeNotFoundException; | |
| 46 | +import javax.management.DynamicMBean; | |
| 47 | +import javax.management.InvalidAttributeValueException; | |
| 48 | +import javax.management.MBeanAttributeInfo; | |
| 49 | +import javax.management.MBeanException; | |
| 50 | +import javax.management.MBeanInfo; | |
| 51 | +import javax.management.MBeanOperationInfo; | |
| 52 | +import javax.management.MBeanParameterInfo; | |
| 53 | +import javax.management.ReflectionException; | |
| 54 | + | |
| 55 | +import br.gov.frameworkdemoiselle.DemoiselleException; | |
| 56 | +import br.gov.frameworkdemoiselle.internal.management.ManagedType; | |
| 57 | +import br.gov.frameworkdemoiselle.internal.management.ManagedType.FieldDetail; | |
| 58 | +import br.gov.frameworkdemoiselle.internal.management.ManagedType.MethodDetail; | |
| 59 | +import br.gov.frameworkdemoiselle.internal.management.ManagedType.ParameterDetail; | |
| 60 | +import br.gov.frameworkdemoiselle.internal.management.Management; | |
| 61 | +import br.gov.frameworkdemoiselle.stereotype.ManagementController; | |
| 62 | +import br.gov.frameworkdemoiselle.util.Beans; | |
| 63 | +import br.gov.frameworkdemoiselle.util.ResourceBundle; | |
| 64 | + | |
| 65 | +/** | |
| 66 | + * <p> | |
| 67 | + * This class is a MBean that gets registered everytime you mark a class with {@link ManagementController}. It dynamicaly reads the | |
| 68 | + * fields and operations contained in a {@link ManagementController} class and exposes them to the MBean server. Everytime a client | |
| 69 | + * tries to call an operation or read/write a property inside a ManagementController class, this class will call the appropriate | |
| 70 | + * method and pass the result to the MBean client. | |
| 71 | + * </p> | |
| 72 | + * | |
| 73 | + * @author SERPRO | |
| 74 | + */ | |
| 75 | +public class DynamicMBeanProxy implements DynamicMBean { | |
| 76 | + | |
| 77 | + private MBeanInfo delegateInfo; | |
| 78 | + | |
| 79 | + private ManagedType managedType; | |
| 80 | + | |
| 81 | + private ResourceBundle bundle; | |
| 82 | + | |
| 83 | + public DynamicMBeanProxy(ManagedType type) { | |
| 84 | + if (type == null) { | |
| 85 | + throw new NullPointerException(getBundle().getString("mbean-null-type-defined")); | |
| 86 | + } | |
| 87 | + managedType = type; | |
| 88 | + } | |
| 89 | + | |
| 90 | + @Override | |
| 91 | + public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException { | |
| 92 | + // Se o bean ainda não foi lido para determinar seus atributos, o faz agora. | |
| 93 | + if (delegateInfo == null) { | |
| 94 | + initializeMBeanInfo(); | |
| 95 | + } | |
| 96 | + | |
| 97 | + Management manager = Beans.getReference(Management.class); | |
| 98 | + return manager.getProperty(managedType, attribute); | |
| 99 | + } | |
| 100 | + | |
| 101 | + @Override | |
| 102 | + public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, | |
| 103 | + MBeanException, ReflectionException { | |
| 104 | + | |
| 105 | + // Se o bean ainda não foi lido para determinar seus atributos, o faz agora. | |
| 106 | + if (delegateInfo == null) { | |
| 107 | + initializeMBeanInfo(); | |
| 108 | + } | |
| 109 | + | |
| 110 | + Management manager = Beans.getReference(Management.class); | |
| 111 | + manager.setProperty(managedType, attribute.getName(), attribute.getValue()); | |
| 112 | + } | |
| 113 | + | |
| 114 | + @Override | |
| 115 | + public AttributeList getAttributes(String[] attributes) { | |
| 116 | + if (attributes != null) { | |
| 117 | + AttributeList list = new AttributeList(); | |
| 118 | + for (String attribute : attributes) { | |
| 119 | + try { | |
| 120 | + Object value = getAttribute(attribute); | |
| 121 | + list.add(new Attribute(attribute, value)); | |
| 122 | + } catch (Throwable t) { | |
| 123 | + } | |
| 124 | + } | |
| 125 | + | |
| 126 | + return list; | |
| 127 | + } | |
| 128 | + | |
| 129 | + return null; | |
| 130 | + } | |
| 131 | + | |
| 132 | + @Override | |
| 133 | + public AttributeList setAttributes(AttributeList attributes) { | |
| 134 | + AttributeList settedAttributes = new AttributeList(); | |
| 135 | + if (attributes != null) { | |
| 136 | + for (Attribute attribute : attributes.asList()) { | |
| 137 | + try { | |
| 138 | + setAttribute(attribute); | |
| 139 | + | |
| 140 | + // A razão para separarmos a criação do atributo de sua adição na lista é que | |
| 141 | + // caso a obtenção do novo valor do atributo dispare uma exceção então o atributo não será | |
| 142 | + // adicionado na lista de atributos que foram afetados. | |
| 143 | + Attribute attributeWithNewValue = new Attribute(attribute.getName(), | |
| 144 | + getAttribute(attribute.getName())); | |
| 145 | + settedAttributes.add(attributeWithNewValue); | |
| 146 | + } catch (Throwable t) { | |
| 147 | + } | |
| 148 | + } | |
| 149 | + } | |
| 150 | + | |
| 151 | + return settedAttributes; | |
| 152 | + } | |
| 153 | + | |
| 154 | + @Override | |
| 155 | + public Object invoke(String actionName, Object[] params, String[] signature) throws MBeanException, | |
| 156 | + ReflectionException { | |
| 157 | + | |
| 158 | + // Se o bean ainda não foi lido para determinar seus atributos, o faz agora. | |
| 159 | + if (this.delegateInfo == null) { | |
| 160 | + initializeMBeanInfo(); | |
| 161 | + } | |
| 162 | + | |
| 163 | + Management manager = Beans.getReference(Management.class); | |
| 164 | + return manager.invoke(managedType, actionName, params); | |
| 165 | + } | |
| 166 | + | |
| 167 | + /** | |
| 168 | + * Initialize the Managed information for this instance of Managed | |
| 169 | + */ | |
| 170 | + private void initializeMBeanInfo() { | |
| 171 | + // Aqui vamos armazenar nossos atributos | |
| 172 | + ArrayList<MBeanAttributeInfo> attributes = new ArrayList<MBeanAttributeInfo>(); | |
| 173 | + | |
| 174 | + // Aqui vamos armazenar nossas operações | |
| 175 | + ArrayList<MBeanOperationInfo> operations = new ArrayList<MBeanOperationInfo>(); | |
| 176 | + | |
| 177 | + // Para cada propriedade descoberta no ManagementController, cria um attributeInfo correspondente | |
| 178 | + for (Entry<String, FieldDetail> fieldEntry : managedType.getFields().entrySet()) { | |
| 179 | + | |
| 180 | + try { | |
| 181 | + | |
| 182 | + MBeanAttributeInfo attributeInfo = new MBeanAttributeInfo(fieldEntry.getKey(), fieldEntry.getValue() | |
| 183 | + .getDescription(), fieldEntry.getValue().getGetterMethod(), fieldEntry.getValue() | |
| 184 | + .getSetterMethod()); | |
| 185 | + attributes.add(attributeInfo); | |
| 186 | + | |
| 187 | + } catch (javax.management.IntrospectionException e) { | |
| 188 | + throw new DemoiselleException(getBundle().getString("mbean-introspection-error", managedType.getType() | |
| 189 | + .getSimpleName())); | |
| 190 | + } | |
| 191 | + } | |
| 192 | + | |
| 193 | + // Para cada operação descoberta no ManagementController, cria um operationInfo correspondente | |
| 194 | + for (Entry<String, MethodDetail> methodEntry : managedType.getOperationMethods().entrySet()) { | |
| 195 | + | |
| 196 | + MethodDetail methodDetail = methodEntry.getValue(); | |
| 197 | + | |
| 198 | + ParameterDetail[] parameterTypes = methodDetail.getParameterTypers(); | |
| 199 | + | |
| 200 | + MBeanParameterInfo[] parameters = parameterTypes.length > 0 ? new MBeanParameterInfo[parameterTypes.length] | |
| 201 | + : null; | |
| 202 | + | |
| 203 | + if (parameters != null) { | |
| 204 | + | |
| 205 | + for (int i = 0; i < parameterTypes.length; i++) { | |
| 206 | + | |
| 207 | + parameters[i] = new MBeanParameterInfo(parameterTypes[i].getParameterName(), parameterTypes[i] | |
| 208 | + .getParameterType().getCanonicalName(), parameterTypes[i].getParameterDescription()); | |
| 209 | + } | |
| 210 | + } | |
| 211 | + | |
| 212 | + // Com todas as informações, criamos nossa instância de MBeanOperationInfo e | |
| 213 | + // acrescentamos na lista de todas as operações. | |
| 214 | + int operationType = 0; | |
| 215 | + switch(methodDetail.getType()){ | |
| 216 | + case ACTION: | |
| 217 | + operationType = MBeanOperationInfo.ACTION; | |
| 218 | + break; | |
| 219 | + | |
| 220 | + case INFO: | |
| 221 | + operationType = MBeanOperationInfo.INFO; | |
| 222 | + break; | |
| 223 | + | |
| 224 | + case ACTION_INFO: | |
| 225 | + operationType = MBeanOperationInfo.ACTION_INFO; | |
| 226 | + break; | |
| 227 | + | |
| 228 | + default: | |
| 229 | + operationType = MBeanOperationInfo.UNKNOWN; | |
| 230 | + } | |
| 231 | + | |
| 232 | + MBeanOperationInfo operation = new MBeanOperationInfo(methodDetail.getMethod().getName(), | |
| 233 | + methodDetail.getDescription(), parameters, methodDetail.getMethod().getReturnType().getName(), | |
| 234 | + operationType); | |
| 235 | + | |
| 236 | + operations.add(operation); | |
| 237 | + | |
| 238 | + } | |
| 239 | + | |
| 240 | + // Por fim criamos nosso bean info. | |
| 241 | + delegateInfo = new MBeanInfo(managedType.getType().getCanonicalName(), managedType.getDescription(), | |
| 242 | + attributes.toArray(new MBeanAttributeInfo[0]), null, operations.toArray(new MBeanOperationInfo[0]), | |
| 243 | + null); | |
| 244 | + | |
| 245 | + } | |
| 246 | + | |
| 247 | + @Override | |
| 248 | + public MBeanInfo getMBeanInfo() { | |
| 249 | + if (delegateInfo == null) { | |
| 250 | + initializeMBeanInfo(); | |
| 251 | + } | |
| 252 | + | |
| 253 | + return delegateInfo; | |
| 254 | + } | |
| 255 | + | |
| 256 | + public ResourceBundle getBundle(){ | |
| 257 | + if (bundle==null){ | |
| 258 | + bundle = new ResourceBundle("demoiselle-jmx-bundle", Locale.getDefault()); | |
| 259 | + } | |
| 260 | + | |
| 261 | + return bundle; | |
| 262 | + } | |
| 263 | + | |
| 264 | +} | ... | ... |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/JMXManagementExtension.java
0 → 100644
| ... | ... | @@ -0,0 +1,104 @@ |
| 1 | +/* | |
| 2 | + * Demoiselle Framework | |
| 3 | + * Copyright (C) 2010 SERPRO | |
| 4 | + * ---------------------------------------------------------------------------- | |
| 5 | + * This file is part of Demoiselle Framework. | |
| 6 | + * | |
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | + * as published by the Free Software Foundation. | |
| 10 | + * | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 15 | + * | |
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | + * ---------------------------------------------------------------------------- | |
| 21 | + * Este arquivo é parte do Framework Demoiselle. | |
| 22 | + * | |
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | + * do Software Livre (FSF). | |
| 26 | + * | |
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | + * para maiores detalhes. | |
| 31 | + * | |
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | + */ | |
| 37 | +package br.gov.frameworkdemoiselle.internal; | |
| 38 | + | |
| 39 | +import java.util.List; | |
| 40 | + | |
| 41 | +import javax.management.ObjectInstance; | |
| 42 | + | |
| 43 | +import br.gov.frameworkdemoiselle.annotation.Name; | |
| 44 | +import br.gov.frameworkdemoiselle.configuration.JMXConfig; | |
| 45 | +import br.gov.frameworkdemoiselle.internal.management.ManagedType; | |
| 46 | +import br.gov.frameworkdemoiselle.lifecycle.ManagementExtension; | |
| 47 | +import br.gov.frameworkdemoiselle.util.Beans; | |
| 48 | + | |
| 49 | +public class JMXManagementExtension implements ManagementExtension { | |
| 50 | + | |
| 51 | + public void registerNotificationMBean(){ | |
| 52 | + MBeanManager mbeanManager = Beans.getReference(MBeanManager.class); | |
| 53 | + JMXConfig configuration = Beans.getReference(JMXConfig.class); | |
| 54 | + | |
| 55 | + StringBuffer notificationMBeanName = new StringBuffer() | |
| 56 | + .append( configuration.getNotificationDomain()!=null ? configuration.getNotificationDomain() : "br.gov.frameworkdemoiselle.jmx" ) | |
| 57 | + .append(":name=") | |
| 58 | + .append(configuration.getNotificationMBeanName()); | |
| 59 | + | |
| 60 | + if (mbeanManager.findMBeanInstance(notificationMBeanName.toString()) == null){ | |
| 61 | + NotificationEventListener listener = Beans.getReference(NotificationEventListener.class); | |
| 62 | + | |
| 63 | + ObjectInstance instance = MBeanHelper.register(listener.createNotificationBroadcaster(), notificationMBeanName.toString()); | |
| 64 | + mbeanManager.storeRegisteredMBean(instance); | |
| 65 | + } | |
| 66 | + } | |
| 67 | + | |
| 68 | + @Override | |
| 69 | + public void initialize(List<ManagedType> managedTypes) { | |
| 70 | + MBeanManager manager = Beans.getReference(MBeanManager.class); | |
| 71 | + JMXConfig configuration = Beans.getReference(JMXConfig.class); | |
| 72 | + | |
| 73 | + for (ManagedType type : managedTypes) { | |
| 74 | + DynamicMBeanProxy beanProxy = new DynamicMBeanProxy(type); | |
| 75 | + | |
| 76 | + Name nameAnnotation = type.getType().getAnnotation(Name.class); | |
| 77 | + String mbeanName = nameAnnotation != null ? nameAnnotation.value() : type.getType().getSimpleName(); | |
| 78 | + | |
| 79 | + StringBuffer name = new StringBuffer() | |
| 80 | + .append( configuration.getMbeanDomain()!=null ? configuration.getMbeanDomain() : type.getType().getPackage().getName() ) | |
| 81 | + .append(":name=") | |
| 82 | + .append( mbeanName ); | |
| 83 | + | |
| 84 | + | |
| 85 | + if (manager.findMBeanInstance(name.toString()) == null){ | |
| 86 | + ObjectInstance instance = MBeanHelper.register(beanProxy, name.toString()); | |
| 87 | + manager.storeRegisteredMBean(instance); | |
| 88 | + } | |
| 89 | + } | |
| 90 | + | |
| 91 | + registerNotificationMBean(); | |
| 92 | + } | |
| 93 | + | |
| 94 | + @Override | |
| 95 | + public void shutdown(List<ManagedType> managedTypes) { | |
| 96 | + MBeanManager manager = Beans.getReference(MBeanManager.class); | |
| 97 | + for (ObjectInstance instance : manager.listRegisteredMBeans()){ | |
| 98 | + MBeanHelper.unregister(instance.getObjectName()); | |
| 99 | + } | |
| 100 | + | |
| 101 | + manager.cleanRegisteredMBeans(); | |
| 102 | + } | |
| 103 | + | |
| 104 | +} | ... | ... |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/MBeanHelper.java
0 → 100644
| ... | ... | @@ -0,0 +1,120 @@ |
| 1 | +/* | |
| 2 | + * Demoiselle Framework | |
| 3 | + * Copyright (C) 2010 SERPRO | |
| 4 | + * ---------------------------------------------------------------------------- | |
| 5 | + * This file is part of Demoiselle Framework. | |
| 6 | + * | |
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | + * as published by the Free Software Foundation. | |
| 10 | + * | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 15 | + * | |
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | + * ---------------------------------------------------------------------------- | |
| 21 | + * Este arquivo é parte do Framework Demoiselle. | |
| 22 | + * | |
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | + * do Software Livre (FSF). | |
| 26 | + * | |
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | + * para maiores detalhes. | |
| 31 | + * | |
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | + */ | |
| 37 | +package br.gov.frameworkdemoiselle.internal; | |
| 38 | + | |
| 39 | +import java.lang.management.ManagementFactory; | |
| 40 | +import java.util.Locale; | |
| 41 | + | |
| 42 | +import javax.management.MBeanServer; | |
| 43 | +import javax.management.ObjectInstance; | |
| 44 | +import javax.management.ObjectName; | |
| 45 | + | |
| 46 | +import org.slf4j.Logger; | |
| 47 | + | |
| 48 | +import br.gov.frameworkdemoiselle.DemoiselleException; | |
| 49 | +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | |
| 50 | +import br.gov.frameworkdemoiselle.util.ResourceBundle; | |
| 51 | + | |
| 52 | +/** | |
| 53 | + * Class with common tools for registering MBeans into an Managed server | |
| 54 | + * | |
| 55 | + * @author SERPRO | |
| 56 | + */ | |
| 57 | +public class MBeanHelper { | |
| 58 | + | |
| 59 | + private static final Logger logger = LoggerProducer.create(MBeanHelper.class); | |
| 60 | + | |
| 61 | + private static ResourceBundle bundle = new ResourceBundle("demoiselle-jmx-bundle", Locale.getDefault()); | |
| 62 | + | |
| 63 | + private static final MBeanServer server = ManagementFactory.getPlatformMBeanServer(); | |
| 64 | + | |
| 65 | + // @Inject | |
| 66 | + // @Name("demoiselle-monitoring-bundle") | |
| 67 | + // private ResourceBundle bundle; | |
| 68 | + | |
| 69 | + /** | |
| 70 | + * Return the MBean Server instance. | |
| 71 | + * | |
| 72 | + * @return MBeanServer | |
| 73 | + */ | |
| 74 | + public static final MBeanServer getMBeanServer() { | |
| 75 | + return server; | |
| 76 | + } | |
| 77 | + | |
| 78 | + /** | |
| 79 | + * Register a given managed bean (MBean) with the specified name. | |
| 80 | + * | |
| 81 | + * @param mbean | |
| 82 | + * the managed bean to register | |
| 83 | + * @param name | |
| 84 | + * the name under which to register the bean | |
| 85 | + * @return the object name of the mbean, for later deregistration | |
| 86 | + */ | |
| 87 | + public static ObjectInstance register(final Object mbean, final String name) { | |
| 88 | + | |
| 89 | + logger.info(bundle.getString("mbean-registration",name)); | |
| 90 | + | |
| 91 | + ObjectInstance instance = null; | |
| 92 | + try { | |
| 93 | + ObjectName objectName = new ObjectName(name); | |
| 94 | + instance = server.registerMBean(mbean, objectName); | |
| 95 | + } catch (Exception e) { | |
| 96 | + logger.error(bundle.getString("mbean-registration-error",name),e); | |
| 97 | + throw new DemoiselleException(bundle.getString("mbean-registration-error",name), e); | |
| 98 | + } | |
| 99 | + | |
| 100 | + return instance; | |
| 101 | + } | |
| 102 | + | |
| 103 | + /** | |
| 104 | + * Remove the registration of a mbean. | |
| 105 | + * | |
| 106 | + * @param objectName | |
| 107 | + * the name of the bean to unregister | |
| 108 | + */ | |
| 109 | + public static void unregister(final ObjectName objectName) { | |
| 110 | + | |
| 111 | + logger.info(bundle.getString("mbean-deregistration",objectName.getCanonicalName())); | |
| 112 | + | |
| 113 | + try { | |
| 114 | + server.unregisterMBean(objectName); | |
| 115 | + } catch (Exception e) { | |
| 116 | + logger.error(bundle.getString("mbean-deregistration",objectName.getCanonicalName()),e); | |
| 117 | + throw new DemoiselleException(bundle.getString("mbean-deregistration",objectName.getCanonicalName()), e); | |
| 118 | + } | |
| 119 | + } | |
| 120 | +} | ... | ... |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/MBeanManager.java
0 → 100644
| ... | ... | @@ -0,0 +1,67 @@ |
| 1 | +/* | |
| 2 | + * Demoiselle Framework | |
| 3 | + * Copyright (C) 2010 SERPRO | |
| 4 | + * ---------------------------------------------------------------------------- | |
| 5 | + * This file is part of Demoiselle Framework. | |
| 6 | + * | |
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | + * as published by the Free Software Foundation. | |
| 10 | + * | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 15 | + * | |
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | + * ---------------------------------------------------------------------------- | |
| 21 | + * Este arquivo é parte do Framework Demoiselle. | |
| 22 | + * | |
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | + * do Software Livre (FSF). | |
| 26 | + * | |
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | + * para maiores detalhes. | |
| 31 | + * | |
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | + */ | |
| 37 | +package br.gov.frameworkdemoiselle.internal; | |
| 38 | + | |
| 39 | +import java.util.Collection; | |
| 40 | +import java.util.HashMap; | |
| 41 | + | |
| 42 | +import javax.enterprise.context.ApplicationScoped; | |
| 43 | +import javax.management.ObjectInstance; | |
| 44 | + | |
| 45 | +@ApplicationScoped | |
| 46 | +public class MBeanManager { | |
| 47 | + | |
| 48 | + private HashMap<String,ObjectInstance> registeredMBeans = new HashMap<String,ObjectInstance>(); | |
| 49 | + | |
| 50 | + public void storeRegisteredMBean(ObjectInstance instance){ | |
| 51 | + registeredMBeans.put(instance.getObjectName().getCanonicalName(),instance); | |
| 52 | + } | |
| 53 | + | |
| 54 | + public Collection<ObjectInstance> listRegisteredMBeans(){ | |
| 55 | + return registeredMBeans.values(); | |
| 56 | + } | |
| 57 | + | |
| 58 | + public ObjectInstance findMBeanInstance(String name){ | |
| 59 | + ObjectInstance instance = registeredMBeans.get(name); | |
| 60 | + return instance; | |
| 61 | + } | |
| 62 | + | |
| 63 | + public void cleanRegisteredMBeans(){ | |
| 64 | + registeredMBeans.clear(); | |
| 65 | + } | |
| 66 | + | |
| 67 | +} | ... | ... |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/NotificationBroadcaster.java
0 → 100644
| ... | ... | @@ -0,0 +1,86 @@ |
| 1 | +/* | |
| 2 | + * Demoiselle Framework | |
| 3 | + * Copyright (C) 2010 SERPRO | |
| 4 | + * ---------------------------------------------------------------------------- | |
| 5 | + * This file is part of Demoiselle Framework. | |
| 6 | + * | |
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | + * as published by the Free Software Foundation. | |
| 10 | + * | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 15 | + * | |
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | + * ---------------------------------------------------------------------------- | |
| 21 | + * Este arquivo é parte do Framework Demoiselle. | |
| 22 | + * | |
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | + * do Software Livre (FSF). | |
| 26 | + * | |
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | + * para maiores detalhes. | |
| 31 | + * | |
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | + */ | |
| 37 | +package br.gov.frameworkdemoiselle.internal; | |
| 38 | + | |
| 39 | +import java.io.Serializable; | |
| 40 | + | |
| 41 | +import javax.management.AttributeChangeNotification; | |
| 42 | +import javax.management.Notification; | |
| 43 | +import javax.management.NotificationBroadcasterSupport; | |
| 44 | + | |
| 45 | +import br.gov.frameworkdemoiselle.configuration.JMXConfig; | |
| 46 | +import br.gov.frameworkdemoiselle.management.ManagementNotificationEvent; | |
| 47 | +import br.gov.frameworkdemoiselle.management.NotificationManager; | |
| 48 | + | |
| 49 | +/** | |
| 50 | + * Implementation of the {@link NotificationBroadcaster} MBean. | |
| 51 | + * When the {@link NotificationManager} sends an event, a {@link NotificationEventListener} captures the notification and uses | |
| 52 | + * this MBean to send it as a JMX notification. | |
| 53 | + * | |
| 54 | + * @author serpro | |
| 55 | + * | |
| 56 | + */ | |
| 57 | +public final class NotificationBroadcaster extends NotificationBroadcasterSupport implements NotificationBroadcasterMBean,Serializable { | |
| 58 | + | |
| 59 | + private static final long serialVersionUID = 1L; | |
| 60 | + | |
| 61 | + private int sequenceNumber = 1; | |
| 62 | + | |
| 63 | + /*public static final String NOTIFICATION_DEFAULT_MBEAN_NAME = NotificationBroadcaster.class.getPackage().getName() | |
| 64 | + +":name=" | |
| 65 | + +NotificationBroadcaster.class.getSimpleName();*/ | |
| 66 | + | |
| 67 | + private static final String NOTIFICATION_TYPE_GENERIC = "jmx.message"; | |
| 68 | + | |
| 69 | + protected void sendNotification( ManagementNotificationEvent event , JMXConfig config ) { | |
| 70 | + br.gov.frameworkdemoiselle.management.GenericNotification demoiselleNotification = event.getNotification(); | |
| 71 | + Notification n = new Notification(NOTIFICATION_TYPE_GENERIC, config.getNotificationMBeanName(), sequenceNumber++, System.currentTimeMillis(), demoiselleNotification.getMessage().toString()); | |
| 72 | + sendNotification(n); | |
| 73 | + } | |
| 74 | + | |
| 75 | + protected void sendAttributeChangedMessage( ManagementNotificationEvent event , JMXConfig config ) { | |
| 76 | + br.gov.frameworkdemoiselle.management.AttributeChangeNotification demoiselleNotification = (br.gov.frameworkdemoiselle.management.AttributeChangeNotification)event.getNotification(); | |
| 77 | + | |
| 78 | + AttributeChangeNotification n = new AttributeChangeNotification(config.getNotificationMBeanName(), sequenceNumber++ | |
| 79 | + , System.currentTimeMillis(), demoiselleNotification.getMessage().toString() | |
| 80 | + , demoiselleNotification.getAttributeName(), demoiselleNotification.getAttributeType().getSimpleName() | |
| 81 | + , demoiselleNotification.getOldValue(), demoiselleNotification.getNewValue()); | |
| 82 | + | |
| 83 | + sendNotification(n); | |
| 84 | + } | |
| 85 | + | |
| 86 | +} | ... | ... |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/NotificationBroadcasterMBean.java
0 → 100644
| ... | ... | @@ -0,0 +1,48 @@ |
| 1 | +/* | |
| 2 | + * Demoiselle Framework | |
| 3 | + * Copyright (C) 2010 SERPRO | |
| 4 | + * ---------------------------------------------------------------------------- | |
| 5 | + * This file is part of Demoiselle Framework. | |
| 6 | + * | |
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | + * as published by the Free Software Foundation. | |
| 10 | + * | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 15 | + * | |
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | + * ---------------------------------------------------------------------------- | |
| 21 | + * Este arquivo é parte do Framework Demoiselle. | |
| 22 | + * | |
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | + * do Software Livre (FSF). | |
| 26 | + * | |
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | + * para maiores detalhes. | |
| 31 | + * | |
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | + */ | |
| 37 | +package br.gov.frameworkdemoiselle.internal; | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | +/** | |
| 42 | + * MBean interface responsible for sending MBean notifications to remote clients. | |
| 43 | + * | |
| 44 | + * @author serpro | |
| 45 | + * | |
| 46 | + */ | |
| 47 | +public interface NotificationBroadcasterMBean { | |
| 48 | +} | ... | ... |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/NotificationEventListener.java
0 → 100644
| ... | ... | @@ -0,0 +1,80 @@ |
| 1 | +/* | |
| 2 | + * Demoiselle Framework | |
| 3 | + * Copyright (C) 2010 SERPRO | |
| 4 | + * ---------------------------------------------------------------------------- | |
| 5 | + * This file is part of Demoiselle Framework. | |
| 6 | + * | |
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | + * as published by the Free Software Foundation. | |
| 10 | + * | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 15 | + * | |
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | + * ---------------------------------------------------------------------------- | |
| 21 | + * Este arquivo é parte do Framework Demoiselle. | |
| 22 | + * | |
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | + * do Software Livre (FSF). | |
| 26 | + * | |
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | + * para maiores detalhes. | |
| 31 | + * | |
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | + */ | |
| 37 | +package br.gov.frameworkdemoiselle.internal; | |
| 38 | + | |
| 39 | +import java.io.Serializable; | |
| 40 | + | |
| 41 | +import javax.enterprise.context.ApplicationScoped; | |
| 42 | +import javax.enterprise.event.Observes; | |
| 43 | + | |
| 44 | +import br.gov.frameworkdemoiselle.configuration.JMXConfig; | |
| 45 | +import br.gov.frameworkdemoiselle.internal.management.qualifier.AttributeChange; | |
| 46 | +import br.gov.frameworkdemoiselle.internal.management.qualifier.Generic; | |
| 47 | +import br.gov.frameworkdemoiselle.management.ManagementNotificationEvent; | |
| 48 | +import br.gov.frameworkdemoiselle.management.NotificationManager; | |
| 49 | + | |
| 50 | +/** | |
| 51 | + * Listens to {@link NotificationManager} notification events and proxies them | |
| 52 | + * to a {@link NotificationBroadcaster} MBean. This MBean will send the notification to | |
| 53 | + * any JMX clients connected and listening. | |
| 54 | + * | |
| 55 | + * @author serpro | |
| 56 | + * | |
| 57 | + */ | |
| 58 | +@ApplicationScoped | |
| 59 | +@SuppressWarnings("serial") | |
| 60 | +public class NotificationEventListener implements Serializable { | |
| 61 | + | |
| 62 | + private NotificationBroadcaster notificationBroadcaster; | |
| 63 | + | |
| 64 | + public void sendNotification( @Observes @Generic ManagementNotificationEvent event , JMXConfig config ) { | |
| 65 | + createNotificationBroadcaster().sendNotification(event,config); | |
| 66 | + } | |
| 67 | + | |
| 68 | + public void sendAttributeChangedMessage( @Observes @AttributeChange ManagementNotificationEvent event , JMXConfig config ) { | |
| 69 | + createNotificationBroadcaster().sendAttributeChangedMessage(event, config); | |
| 70 | + } | |
| 71 | + | |
| 72 | + public NotificationBroadcaster createNotificationBroadcaster(){ | |
| 73 | + if (notificationBroadcaster==null){ | |
| 74 | + notificationBroadcaster = new NotificationBroadcaster(); | |
| 75 | + } | |
| 76 | + | |
| 77 | + return notificationBroadcaster; | |
| 78 | + } | |
| 79 | + | |
| 80 | +} | ... | ... |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/jmx/bootstrap/JMXManagementExtension.java
| ... | ... | @@ -1,108 +0,0 @@ |
| 1 | -/* | |
| 2 | - * Demoiselle Framework | |
| 3 | - * Copyright (C) 2010 SERPRO | |
| 4 | - * ---------------------------------------------------------------------------- | |
| 5 | - * This file is part of Demoiselle Framework. | |
| 6 | - * | |
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | - * as published by the Free Software Foundation. | |
| 10 | - * | |
| 11 | - * This program is distributed in the hope that it will be useful, | |
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | - * GNU General Public License for more details. | |
| 15 | - * | |
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | - * ---------------------------------------------------------------------------- | |
| 21 | - * Este arquivo é parte do Framework Demoiselle. | |
| 22 | - * | |
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | - * do Software Livre (FSF). | |
| 26 | - * | |
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | - * para maiores detalhes. | |
| 31 | - * | |
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | - */ | |
| 37 | -package br.gov.frameworkdemoiselle.jmx.bootstrap; | |
| 38 | - | |
| 39 | -import java.util.List; | |
| 40 | - | |
| 41 | -import javax.management.ObjectInstance; | |
| 42 | - | |
| 43 | -import br.gov.frameworkdemoiselle.annotation.Name; | |
| 44 | -import br.gov.frameworkdemoiselle.internal.management.ManagedType; | |
| 45 | -import br.gov.frameworkdemoiselle.jmx.configuration.JMXConfig; | |
| 46 | -import br.gov.frameworkdemoiselle.jmx.internal.DynamicMBeanProxy; | |
| 47 | -import br.gov.frameworkdemoiselle.jmx.internal.MBeanHelper; | |
| 48 | -import br.gov.frameworkdemoiselle.jmx.internal.MBeanManager; | |
| 49 | -import br.gov.frameworkdemoiselle.jmx.internal.NotificationEventListener; | |
| 50 | -import br.gov.frameworkdemoiselle.lifecycle.ManagementExtension; | |
| 51 | -import br.gov.frameworkdemoiselle.util.Beans; | |
| 52 | - | |
| 53 | -public class JMXManagementExtension implements ManagementExtension { | |
| 54 | - | |
| 55 | - public void registerNotificationMBean(){ | |
| 56 | - MBeanManager mbeanManager = Beans.getReference(MBeanManager.class); | |
| 57 | - JMXConfig configuration = Beans.getReference(JMXConfig.class); | |
| 58 | - | |
| 59 | - StringBuffer notificationMBeanName = new StringBuffer() | |
| 60 | - .append( configuration.getNotificationDomain()!=null ? configuration.getNotificationDomain() : "br.gov.frameworkdemoiselle.jmx" ) | |
| 61 | - .append(":name=") | |
| 62 | - .append(configuration.getNotificationMBeanName()); | |
| 63 | - | |
| 64 | - if (mbeanManager.findMBeanInstance(notificationMBeanName.toString()) == null){ | |
| 65 | - NotificationEventListener listener = Beans.getReference(NotificationEventListener.class); | |
| 66 | - | |
| 67 | - ObjectInstance instance = MBeanHelper.register(listener.createNotificationBroadcaster(), notificationMBeanName.toString()); | |
| 68 | - mbeanManager.storeRegisteredMBean(instance); | |
| 69 | - } | |
| 70 | - } | |
| 71 | - | |
| 72 | - @Override | |
| 73 | - public void initialize(List<ManagedType> managedTypes) { | |
| 74 | - MBeanManager manager = Beans.getReference(MBeanManager.class); | |
| 75 | - JMXConfig configuration = Beans.getReference(JMXConfig.class); | |
| 76 | - | |
| 77 | - for (ManagedType type : managedTypes) { | |
| 78 | - DynamicMBeanProxy beanProxy = new DynamicMBeanProxy(type); | |
| 79 | - | |
| 80 | - Name nameAnnotation = type.getType().getAnnotation(Name.class); | |
| 81 | - String mbeanName = nameAnnotation != null ? nameAnnotation.value() : type.getType().getSimpleName(); | |
| 82 | - | |
| 83 | - StringBuffer name = new StringBuffer() | |
| 84 | - .append( configuration.getMbeanDomain()!=null ? configuration.getMbeanDomain() : type.getType().getPackage().getName() ) | |
| 85 | - .append(":name=") | |
| 86 | - .append( mbeanName ); | |
| 87 | - | |
| 88 | - | |
| 89 | - if (manager.findMBeanInstance(name.toString()) == null){ | |
| 90 | - ObjectInstance instance = MBeanHelper.register(beanProxy, name.toString()); | |
| 91 | - manager.storeRegisteredMBean(instance); | |
| 92 | - } | |
| 93 | - } | |
| 94 | - | |
| 95 | - registerNotificationMBean(); | |
| 96 | - } | |
| 97 | - | |
| 98 | - @Override | |
| 99 | - public void shutdown(List<ManagedType> managedTypes) { | |
| 100 | - MBeanManager manager = Beans.getReference(MBeanManager.class); | |
| 101 | - for (ObjectInstance instance : manager.listRegisteredMBeans()){ | |
| 102 | - MBeanHelper.unregister(instance.getObjectName()); | |
| 103 | - } | |
| 104 | - | |
| 105 | - manager.cleanRegisteredMBeans(); | |
| 106 | - } | |
| 107 | - | |
| 108 | -} |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/jmx/configuration/JMXConfig.java
| ... | ... | @@ -1,119 +0,0 @@ |
| 1 | -/* | |
| 2 | - * Demoiselle Framework | |
| 3 | - * Copyright (C) 2010 SERPRO | |
| 4 | - * ---------------------------------------------------------------------------- | |
| 5 | - * This file is part of Demoiselle Framework. | |
| 6 | - * | |
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | - * as published by the Free Software Foundation. | |
| 10 | - * | |
| 11 | - * This program is distributed in the hope that it will be useful, | |
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | - * GNU General Public License for more details. | |
| 15 | - * | |
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | - * ---------------------------------------------------------------------------- | |
| 21 | - * Este arquivo é parte do Framework Demoiselle. | |
| 22 | - * | |
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | - * do Software Livre (FSF). | |
| 26 | - * | |
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | - * para maiores detalhes. | |
| 31 | - * | |
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | - */ | |
| 37 | -package br.gov.frameworkdemoiselle.jmx.configuration; | |
| 38 | - | |
| 39 | -import javax.management.NotificationBroadcaster; | |
| 40 | - | |
| 41 | -import br.gov.frameworkdemoiselle.annotation.Name; | |
| 42 | -import br.gov.frameworkdemoiselle.configuration.Configuration; | |
| 43 | -import br.gov.frameworkdemoiselle.stereotype.ManagementController; | |
| 44 | - | |
| 45 | -@Configuration(prefix = "frameworkdemoiselle.management.jmx.") | |
| 46 | -public class JMXConfig { | |
| 47 | - | |
| 48 | - @Name("mbean.domain") | |
| 49 | - private String mbeanDomain; | |
| 50 | - | |
| 51 | - @Name("notification.domain") | |
| 52 | - private String notificationDomain = "br.gov.frameworkdemoiselle.jmx"; | |
| 53 | - | |
| 54 | - @Name("notification.name") | |
| 55 | - private String notificationMBeanName = "NotificationBroadcaster"; | |
| 56 | - | |
| 57 | - /** | |
| 58 | - * </p>The domain to register all {@link ManagementController} classes found during boot.</p> | |
| 59 | - * | |
| 60 | - * <p>The full name of a MBean has the format of <code>domain:name=MBeanName</code> (ex: <code>br.gov.frameworkdemoiselle.jmx:name=NotificationBroadcaster</code>), this | |
| 61 | - * parameter is the "domain" portion of the full name.</p> | |
| 62 | - * | |
| 63 | - * <p>The default is <code>null</code> and when is set to <code>null</code>, all {@link Managed} classes will use it's own package as the domain.</p> | |
| 64 | - * | |
| 65 | - */ | |
| 66 | - public String getMbeanDomain() { | |
| 67 | - return mbeanDomain; | |
| 68 | - } | |
| 69 | - | |
| 70 | - /** | |
| 71 | - * @see #getMbeanDomain() | |
| 72 | - */ | |
| 73 | - public void setMbeanDomain(String mbeanDomain) { | |
| 74 | - this.mbeanDomain = mbeanDomain; | |
| 75 | - } | |
| 76 | - | |
| 77 | - /** | |
| 78 | - * <p>The name the {@link NotificationBroadcaster} MBean will be registered to. The full name | |
| 79 | - * of a MBean has the format of <code>domain:name=MBeanName</code> (ex: <code>br.gov.frameworkdemoiselle.jmx:name=NotificationBroadcaster</code>), this | |
| 80 | - * parameter is the ":name=MBeanName" portion without the ":name=".</p> | |
| 81 | - * | |
| 82 | - * <p>The default is the value returned by {@link Class#getSimpleName()} when called from the {@link NotificationBroadcaster} class.</p> | |
| 83 | - * | |
| 84 | - * @see #getMbeanDomain() | |
| 85 | - */ | |
| 86 | - public String getNotificationMBeanName() { | |
| 87 | - return notificationMBeanName; | |
| 88 | - } | |
| 89 | - | |
| 90 | - /** | |
| 91 | - * @see #getNotificationMBeanName() | |
| 92 | - */ | |
| 93 | - public void setNotificationMBeanName(String notificationMBeanName) { | |
| 94 | - this.notificationMBeanName = notificationMBeanName; | |
| 95 | - } | |
| 96 | - | |
| 97 | - /** | |
| 98 | - * </p>The domain to register the {@link NotificationBroadcaster} MBean.</p> | |
| 99 | - * | |
| 100 | - * <p>The full name of a MBean has the format of <code>domain:name=MBeanName</code> (ex: <code>br.gov.frameworkdemoiselle.jmx:name=NotificationBroadcaster</code>), this | |
| 101 | - * parameter is the "domain" portion of the full name.</p> | |
| 102 | - * | |
| 103 | - * <p>The default is <code>br.gov.frameworkdemoiselle.jmx</code>.</p> | |
| 104 | - * | |
| 105 | - */ | |
| 106 | - public String getNotificationDomain() { | |
| 107 | - return notificationDomain; | |
| 108 | - } | |
| 109 | - | |
| 110 | - /** | |
| 111 | - * @see #getNotificationDomain() | |
| 112 | - */ | |
| 113 | - public void setNotificationDomain(String notificationDomain) { | |
| 114 | - this.notificationDomain = notificationDomain; | |
| 115 | - } | |
| 116 | - | |
| 117 | - | |
| 118 | - | |
| 119 | -} |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/jmx/internal/DynamicMBeanProxy.java
| ... | ... | @@ -1,264 +0,0 @@ |
| 1 | -/* | |
| 2 | - * Demoiselle Framework | |
| 3 | - * Copyright (C) 2010 SERPRO | |
| 4 | - * ---------------------------------------------------------------------------- | |
| 5 | - * This file is part of Demoiselle Framework. | |
| 6 | - * | |
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | - * as published by the Free Software Foundation. | |
| 10 | - * | |
| 11 | - * This program is distributed in the hope that it will be useful, | |
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | - * GNU General Public License for more details. | |
| 15 | - * | |
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | - * ---------------------------------------------------------------------------- | |
| 21 | - * Este arquivo é parte do Framework Demoiselle. | |
| 22 | - * | |
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | - * do Software Livre (FSF). | |
| 26 | - * | |
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | - * para maiores detalhes. | |
| 31 | - * | |
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | - */ | |
| 37 | -package br.gov.frameworkdemoiselle.jmx.internal; | |
| 38 | - | |
| 39 | -import java.util.ArrayList; | |
| 40 | -import java.util.Locale; | |
| 41 | -import java.util.Map.Entry; | |
| 42 | - | |
| 43 | -import javax.management.Attribute; | |
| 44 | -import javax.management.AttributeList; | |
| 45 | -import javax.management.AttributeNotFoundException; | |
| 46 | -import javax.management.DynamicMBean; | |
| 47 | -import javax.management.InvalidAttributeValueException; | |
| 48 | -import javax.management.MBeanAttributeInfo; | |
| 49 | -import javax.management.MBeanException; | |
| 50 | -import javax.management.MBeanInfo; | |
| 51 | -import javax.management.MBeanOperationInfo; | |
| 52 | -import javax.management.MBeanParameterInfo; | |
| 53 | -import javax.management.ReflectionException; | |
| 54 | - | |
| 55 | -import br.gov.frameworkdemoiselle.DemoiselleException; | |
| 56 | -import br.gov.frameworkdemoiselle.internal.management.ManagedType; | |
| 57 | -import br.gov.frameworkdemoiselle.internal.management.ManagedType.FieldDetail; | |
| 58 | -import br.gov.frameworkdemoiselle.internal.management.ManagedType.MethodDetail; | |
| 59 | -import br.gov.frameworkdemoiselle.internal.management.ManagedType.ParameterDetail; | |
| 60 | -import br.gov.frameworkdemoiselle.internal.management.Management; | |
| 61 | -import br.gov.frameworkdemoiselle.stereotype.ManagementController; | |
| 62 | -import br.gov.frameworkdemoiselle.util.Beans; | |
| 63 | -import br.gov.frameworkdemoiselle.util.ResourceBundle; | |
| 64 | - | |
| 65 | -/** | |
| 66 | - * <p> | |
| 67 | - * This class is a MBean that gets registered everytime you mark a class with {@link ManagementController}. It dynamicaly reads the | |
| 68 | - * fields and operations contained in a {@link ManagementController} class and exposes them to the MBean server. Everytime a client | |
| 69 | - * tries to call an operation or read/write a property inside a ManagementController class, this class will call the appropriate | |
| 70 | - * method and pass the result to the MBean client. | |
| 71 | - * </p> | |
| 72 | - * | |
| 73 | - * @author SERPRO | |
| 74 | - */ | |
| 75 | -public class DynamicMBeanProxy implements DynamicMBean { | |
| 76 | - | |
| 77 | - private MBeanInfo delegateInfo; | |
| 78 | - | |
| 79 | - private ManagedType managedType; | |
| 80 | - | |
| 81 | - private ResourceBundle bundle; | |
| 82 | - | |
| 83 | - public DynamicMBeanProxy(ManagedType type) { | |
| 84 | - if (type == null) { | |
| 85 | - throw new NullPointerException(getBundle().getString("mbean-null-type-defined")); | |
| 86 | - } | |
| 87 | - managedType = type; | |
| 88 | - } | |
| 89 | - | |
| 90 | - @Override | |
| 91 | - public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException { | |
| 92 | - // Se o bean ainda não foi lido para determinar seus atributos, o faz agora. | |
| 93 | - if (delegateInfo == null) { | |
| 94 | - initializeMBeanInfo(); | |
| 95 | - } | |
| 96 | - | |
| 97 | - Management manager = Beans.getReference(Management.class); | |
| 98 | - return manager.getProperty(managedType, attribute); | |
| 99 | - } | |
| 100 | - | |
| 101 | - @Override | |
| 102 | - public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, | |
| 103 | - MBeanException, ReflectionException { | |
| 104 | - | |
| 105 | - // Se o bean ainda não foi lido para determinar seus atributos, o faz agora. | |
| 106 | - if (delegateInfo == null) { | |
| 107 | - initializeMBeanInfo(); | |
| 108 | - } | |
| 109 | - | |
| 110 | - Management manager = Beans.getReference(Management.class); | |
| 111 | - manager.setProperty(managedType, attribute.getName(), attribute.getValue()); | |
| 112 | - } | |
| 113 | - | |
| 114 | - @Override | |
| 115 | - public AttributeList getAttributes(String[] attributes) { | |
| 116 | - if (attributes != null) { | |
| 117 | - AttributeList list = new AttributeList(); | |
| 118 | - for (String attribute : attributes) { | |
| 119 | - try { | |
| 120 | - Object value = getAttribute(attribute); | |
| 121 | - list.add(new Attribute(attribute, value)); | |
| 122 | - } catch (Throwable t) { | |
| 123 | - } | |
| 124 | - } | |
| 125 | - | |
| 126 | - return list; | |
| 127 | - } | |
| 128 | - | |
| 129 | - return null; | |
| 130 | - } | |
| 131 | - | |
| 132 | - @Override | |
| 133 | - public AttributeList setAttributes(AttributeList attributes) { | |
| 134 | - AttributeList settedAttributes = new AttributeList(); | |
| 135 | - if (attributes != null) { | |
| 136 | - for (Attribute attribute : attributes.asList()) { | |
| 137 | - try { | |
| 138 | - setAttribute(attribute); | |
| 139 | - | |
| 140 | - // A razão para separarmos a criação do atributo de sua adição na lista é que | |
| 141 | - // caso a obtenção do novo valor do atributo dispare uma exceção então o atributo não será | |
| 142 | - // adicionado na lista de atributos que foram afetados. | |
| 143 | - Attribute attributeWithNewValue = new Attribute(attribute.getName(), | |
| 144 | - getAttribute(attribute.getName())); | |
| 145 | - settedAttributes.add(attributeWithNewValue); | |
| 146 | - } catch (Throwable t) { | |
| 147 | - } | |
| 148 | - } | |
| 149 | - } | |
| 150 | - | |
| 151 | - return settedAttributes; | |
| 152 | - } | |
| 153 | - | |
| 154 | - @Override | |
| 155 | - public Object invoke(String actionName, Object[] params, String[] signature) throws MBeanException, | |
| 156 | - ReflectionException { | |
| 157 | - | |
| 158 | - // Se o bean ainda não foi lido para determinar seus atributos, o faz agora. | |
| 159 | - if (this.delegateInfo == null) { | |
| 160 | - initializeMBeanInfo(); | |
| 161 | - } | |
| 162 | - | |
| 163 | - Management manager = Beans.getReference(Management.class); | |
| 164 | - return manager.invoke(managedType, actionName, params); | |
| 165 | - } | |
| 166 | - | |
| 167 | - /** | |
| 168 | - * Initialize the Managed information for this instance of Managed | |
| 169 | - */ | |
| 170 | - private void initializeMBeanInfo() { | |
| 171 | - // Aqui vamos armazenar nossos atributos | |
| 172 | - ArrayList<MBeanAttributeInfo> attributes = new ArrayList<MBeanAttributeInfo>(); | |
| 173 | - | |
| 174 | - // Aqui vamos armazenar nossas operações | |
| 175 | - ArrayList<MBeanOperationInfo> operations = new ArrayList<MBeanOperationInfo>(); | |
| 176 | - | |
| 177 | - // Para cada propriedade descoberta no ManagementController, cria um attributeInfo correspondente | |
| 178 | - for (Entry<String, FieldDetail> fieldEntry : managedType.getFields().entrySet()) { | |
| 179 | - | |
| 180 | - try { | |
| 181 | - | |
| 182 | - MBeanAttributeInfo attributeInfo = new MBeanAttributeInfo(fieldEntry.getKey(), fieldEntry.getValue() | |
| 183 | - .getDescription(), fieldEntry.getValue().getGetterMethod(), fieldEntry.getValue() | |
| 184 | - .getSetterMethod()); | |
| 185 | - attributes.add(attributeInfo); | |
| 186 | - | |
| 187 | - } catch (javax.management.IntrospectionException e) { | |
| 188 | - throw new DemoiselleException(getBundle().getString("mbean-introspection-error", managedType.getType() | |
| 189 | - .getSimpleName())); | |
| 190 | - } | |
| 191 | - } | |
| 192 | - | |
| 193 | - // Para cada operação descoberta no ManagementController, cria um operationInfo correspondente | |
| 194 | - for (Entry<String, MethodDetail> methodEntry : managedType.getOperationMethods().entrySet()) { | |
| 195 | - | |
| 196 | - MethodDetail methodDetail = methodEntry.getValue(); | |
| 197 | - | |
| 198 | - ParameterDetail[] parameterTypes = methodDetail.getParameterTypers(); | |
| 199 | - | |
| 200 | - MBeanParameterInfo[] parameters = parameterTypes.length > 0 ? new MBeanParameterInfo[parameterTypes.length] | |
| 201 | - : null; | |
| 202 | - | |
| 203 | - if (parameters != null) { | |
| 204 | - | |
| 205 | - for (int i = 0; i < parameterTypes.length; i++) { | |
| 206 | - | |
| 207 | - parameters[i] = new MBeanParameterInfo(parameterTypes[i].getParameterName(), parameterTypes[i] | |
| 208 | - .getParameterType().getCanonicalName(), parameterTypes[i].getParameterDescription()); | |
| 209 | - } | |
| 210 | - } | |
| 211 | - | |
| 212 | - // Com todas as informações, criamos nossa instância de MBeanOperationInfo e | |
| 213 | - // acrescentamos na lista de todas as operações. | |
| 214 | - int operationType = 0; | |
| 215 | - switch(methodDetail.getType()){ | |
| 216 | - case ACTION: | |
| 217 | - operationType = MBeanOperationInfo.ACTION; | |
| 218 | - break; | |
| 219 | - | |
| 220 | - case INFO: | |
| 221 | - operationType = MBeanOperationInfo.INFO; | |
| 222 | - break; | |
| 223 | - | |
| 224 | - case ACTION_INFO: | |
| 225 | - operationType = MBeanOperationInfo.ACTION_INFO; | |
| 226 | - break; | |
| 227 | - | |
| 228 | - default: | |
| 229 | - operationType = MBeanOperationInfo.UNKNOWN; | |
| 230 | - } | |
| 231 | - | |
| 232 | - MBeanOperationInfo operation = new MBeanOperationInfo(methodDetail.getMethod().getName(), | |
| 233 | - methodDetail.getDescription(), parameters, methodDetail.getMethod().getReturnType().getName(), | |
| 234 | - operationType); | |
| 235 | - | |
| 236 | - operations.add(operation); | |
| 237 | - | |
| 238 | - } | |
| 239 | - | |
| 240 | - // Por fim criamos nosso bean info. | |
| 241 | - delegateInfo = new MBeanInfo(managedType.getType().getCanonicalName(), managedType.getDescription(), | |
| 242 | - attributes.toArray(new MBeanAttributeInfo[0]), null, operations.toArray(new MBeanOperationInfo[0]), | |
| 243 | - null); | |
| 244 | - | |
| 245 | - } | |
| 246 | - | |
| 247 | - @Override | |
| 248 | - public MBeanInfo getMBeanInfo() { | |
| 249 | - if (delegateInfo == null) { | |
| 250 | - initializeMBeanInfo(); | |
| 251 | - } | |
| 252 | - | |
| 253 | - return delegateInfo; | |
| 254 | - } | |
| 255 | - | |
| 256 | - public ResourceBundle getBundle(){ | |
| 257 | - if (bundle==null){ | |
| 258 | - bundle = new ResourceBundle("demoiselle-jmx-bundle", Locale.getDefault()); | |
| 259 | - } | |
| 260 | - | |
| 261 | - return bundle; | |
| 262 | - } | |
| 263 | - | |
| 264 | -} |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/jmx/internal/MBeanHelper.java
| ... | ... | @@ -1,120 +0,0 @@ |
| 1 | -/* | |
| 2 | - * Demoiselle Framework | |
| 3 | - * Copyright (C) 2010 SERPRO | |
| 4 | - * ---------------------------------------------------------------------------- | |
| 5 | - * This file is part of Demoiselle Framework. | |
| 6 | - * | |
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | - * as published by the Free Software Foundation. | |
| 10 | - * | |
| 11 | - * This program is distributed in the hope that it will be useful, | |
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | - * GNU General Public License for more details. | |
| 15 | - * | |
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | - * ---------------------------------------------------------------------------- | |
| 21 | - * Este arquivo é parte do Framework Demoiselle. | |
| 22 | - * | |
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | - * do Software Livre (FSF). | |
| 26 | - * | |
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | - * para maiores detalhes. | |
| 31 | - * | |
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | - */ | |
| 37 | -package br.gov.frameworkdemoiselle.jmx.internal; | |
| 38 | - | |
| 39 | -import java.lang.management.ManagementFactory; | |
| 40 | -import java.util.Locale; | |
| 41 | - | |
| 42 | -import javax.management.MBeanServer; | |
| 43 | -import javax.management.ObjectInstance; | |
| 44 | -import javax.management.ObjectName; | |
| 45 | - | |
| 46 | -import org.slf4j.Logger; | |
| 47 | - | |
| 48 | -import br.gov.frameworkdemoiselle.DemoiselleException; | |
| 49 | -import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | |
| 50 | -import br.gov.frameworkdemoiselle.util.ResourceBundle; | |
| 51 | - | |
| 52 | -/** | |
| 53 | - * Class with common tools for registering MBeans into an Managed server | |
| 54 | - * | |
| 55 | - * @author SERPRO | |
| 56 | - */ | |
| 57 | -public class MBeanHelper { | |
| 58 | - | |
| 59 | - private static final Logger logger = LoggerProducer.create(MBeanHelper.class); | |
| 60 | - | |
| 61 | - private static ResourceBundle bundle = new ResourceBundle("demoiselle-jmx-bundle", Locale.getDefault()); | |
| 62 | - | |
| 63 | - private static final MBeanServer server = ManagementFactory.getPlatformMBeanServer(); | |
| 64 | - | |
| 65 | - // @Inject | |
| 66 | - // @Name("demoiselle-monitoring-bundle") | |
| 67 | - // private ResourceBundle bundle; | |
| 68 | - | |
| 69 | - /** | |
| 70 | - * Return the MBean Server instance. | |
| 71 | - * | |
| 72 | - * @return MBeanServer | |
| 73 | - */ | |
| 74 | - public static final MBeanServer getMBeanServer() { | |
| 75 | - return server; | |
| 76 | - } | |
| 77 | - | |
| 78 | - /** | |
| 79 | - * Register a given managed bean (MBean) with the specified name. | |
| 80 | - * | |
| 81 | - * @param mbean | |
| 82 | - * the managed bean to register | |
| 83 | - * @param name | |
| 84 | - * the name under which to register the bean | |
| 85 | - * @return the object name of the mbean, for later deregistration | |
| 86 | - */ | |
| 87 | - public static ObjectInstance register(final Object mbean, final String name) { | |
| 88 | - | |
| 89 | - logger.info(bundle.getString("mbean-registration",name)); | |
| 90 | - | |
| 91 | - ObjectInstance instance = null; | |
| 92 | - try { | |
| 93 | - ObjectName objectName = new ObjectName(name); | |
| 94 | - instance = server.registerMBean(mbean, objectName); | |
| 95 | - } catch (Exception e) { | |
| 96 | - logger.error(bundle.getString("mbean-registration-error",name),e); | |
| 97 | - throw new DemoiselleException(bundle.getString("mbean-registration-error",name), e); | |
| 98 | - } | |
| 99 | - | |
| 100 | - return instance; | |
| 101 | - } | |
| 102 | - | |
| 103 | - /** | |
| 104 | - * Remove the registration of a mbean. | |
| 105 | - * | |
| 106 | - * @param objectName | |
| 107 | - * the name of the bean to unregister | |
| 108 | - */ | |
| 109 | - public static void unregister(final ObjectName objectName) { | |
| 110 | - | |
| 111 | - logger.info(bundle.getString("mbean-deregistration",objectName.getCanonicalName())); | |
| 112 | - | |
| 113 | - try { | |
| 114 | - server.unregisterMBean(objectName); | |
| 115 | - } catch (Exception e) { | |
| 116 | - logger.error(bundle.getString("mbean-deregistration",objectName.getCanonicalName()),e); | |
| 117 | - throw new DemoiselleException(bundle.getString("mbean-deregistration",objectName.getCanonicalName()), e); | |
| 118 | - } | |
| 119 | - } | |
| 120 | -} |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/jmx/internal/MBeanManager.java
| ... | ... | @@ -1,67 +0,0 @@ |
| 1 | -/* | |
| 2 | - * Demoiselle Framework | |
| 3 | - * Copyright (C) 2010 SERPRO | |
| 4 | - * ---------------------------------------------------------------------------- | |
| 5 | - * This file is part of Demoiselle Framework. | |
| 6 | - * | |
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | - * as published by the Free Software Foundation. | |
| 10 | - * | |
| 11 | - * This program is distributed in the hope that it will be useful, | |
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | - * GNU General Public License for more details. | |
| 15 | - * | |
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | - * ---------------------------------------------------------------------------- | |
| 21 | - * Este arquivo é parte do Framework Demoiselle. | |
| 22 | - * | |
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | - * do Software Livre (FSF). | |
| 26 | - * | |
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | - * para maiores detalhes. | |
| 31 | - * | |
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | - */ | |
| 37 | -package br.gov.frameworkdemoiselle.jmx.internal; | |
| 38 | - | |
| 39 | -import java.util.Collection; | |
| 40 | -import java.util.HashMap; | |
| 41 | - | |
| 42 | -import javax.enterprise.context.ApplicationScoped; | |
| 43 | -import javax.management.ObjectInstance; | |
| 44 | - | |
| 45 | -@ApplicationScoped | |
| 46 | -public class MBeanManager { | |
| 47 | - | |
| 48 | - private HashMap<String,ObjectInstance> registeredMBeans = new HashMap<String,ObjectInstance>(); | |
| 49 | - | |
| 50 | - public void storeRegisteredMBean(ObjectInstance instance){ | |
| 51 | - registeredMBeans.put(instance.getObjectName().getCanonicalName(),instance); | |
| 52 | - } | |
| 53 | - | |
| 54 | - public Collection<ObjectInstance> listRegisteredMBeans(){ | |
| 55 | - return registeredMBeans.values(); | |
| 56 | - } | |
| 57 | - | |
| 58 | - public ObjectInstance findMBeanInstance(String name){ | |
| 59 | - ObjectInstance instance = registeredMBeans.get(name); | |
| 60 | - return instance; | |
| 61 | - } | |
| 62 | - | |
| 63 | - public void cleanRegisteredMBeans(){ | |
| 64 | - registeredMBeans.clear(); | |
| 65 | - } | |
| 66 | - | |
| 67 | -} |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/jmx/internal/NotificationBroadcaster.java
| ... | ... | @@ -1,86 +0,0 @@ |
| 1 | -/* | |
| 2 | - * Demoiselle Framework | |
| 3 | - * Copyright (C) 2010 SERPRO | |
| 4 | - * ---------------------------------------------------------------------------- | |
| 5 | - * This file is part of Demoiselle Framework. | |
| 6 | - * | |
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | - * as published by the Free Software Foundation. | |
| 10 | - * | |
| 11 | - * This program is distributed in the hope that it will be useful, | |
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | - * GNU General Public License for more details. | |
| 15 | - * | |
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | - * ---------------------------------------------------------------------------- | |
| 21 | - * Este arquivo é parte do Framework Demoiselle. | |
| 22 | - * | |
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | - * do Software Livre (FSF). | |
| 26 | - * | |
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | - * para maiores detalhes. | |
| 31 | - * | |
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | - */ | |
| 37 | -package br.gov.frameworkdemoiselle.jmx.internal; | |
| 38 | - | |
| 39 | -import java.io.Serializable; | |
| 40 | - | |
| 41 | -import javax.management.AttributeChangeNotification; | |
| 42 | -import javax.management.Notification; | |
| 43 | -import javax.management.NotificationBroadcasterSupport; | |
| 44 | - | |
| 45 | -import br.gov.frameworkdemoiselle.jmx.configuration.JMXConfig; | |
| 46 | -import br.gov.frameworkdemoiselle.management.ManagementNotificationEvent; | |
| 47 | -import br.gov.frameworkdemoiselle.management.NotificationManager; | |
| 48 | - | |
| 49 | -/** | |
| 50 | - * Implementation of the {@link NotificationBroadcaster} MBean. | |
| 51 | - * When the {@link NotificationManager} sends an event, a {@link NotificationEventListener} captures the notification and uses | |
| 52 | - * this MBean to send it as a JMX notification. | |
| 53 | - * | |
| 54 | - * @author serpro | |
| 55 | - * | |
| 56 | - */ | |
| 57 | -final class NotificationBroadcaster extends NotificationBroadcasterSupport implements NotificationBroadcasterMBean,Serializable { | |
| 58 | - | |
| 59 | - private static final long serialVersionUID = 1L; | |
| 60 | - | |
| 61 | - private int sequenceNumber = 1; | |
| 62 | - | |
| 63 | - /*public static final String NOTIFICATION_DEFAULT_MBEAN_NAME = NotificationBroadcaster.class.getPackage().getName() | |
| 64 | - +":name=" | |
| 65 | - +NotificationBroadcaster.class.getSimpleName();*/ | |
| 66 | - | |
| 67 | - private static final String NOTIFICATION_TYPE_GENERIC = "jmx.message"; | |
| 68 | - | |
| 69 | - protected void sendNotification( ManagementNotificationEvent event , JMXConfig config ) { | |
| 70 | - br.gov.frameworkdemoiselle.management.GenericNotification demoiselleNotification = event.getNotification(); | |
| 71 | - Notification n = new Notification(NOTIFICATION_TYPE_GENERIC, config.getNotificationMBeanName(), sequenceNumber++, System.currentTimeMillis(), demoiselleNotification.getMessage().toString()); | |
| 72 | - sendNotification(n); | |
| 73 | - } | |
| 74 | - | |
| 75 | - protected void sendAttributeChangedMessage( ManagementNotificationEvent event , JMXConfig config ) { | |
| 76 | - br.gov.frameworkdemoiselle.management.AttributeChangeNotification demoiselleNotification = (br.gov.frameworkdemoiselle.management.AttributeChangeNotification)event.getNotification(); | |
| 77 | - | |
| 78 | - AttributeChangeNotification n = new AttributeChangeNotification(config.getNotificationMBeanName(), sequenceNumber++ | |
| 79 | - , System.currentTimeMillis(), demoiselleNotification.getMessage().toString() | |
| 80 | - , demoiselleNotification.getAttributeName(), demoiselleNotification.getAttributeType().getSimpleName() | |
| 81 | - , demoiselleNotification.getOldValue(), demoiselleNotification.getNewValue()); | |
| 82 | - | |
| 83 | - sendNotification(n); | |
| 84 | - } | |
| 85 | - | |
| 86 | -} |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/jmx/internal/NotificationBroadcasterMBean.java
| ... | ... | @@ -1,48 +0,0 @@ |
| 1 | -/* | |
| 2 | - * Demoiselle Framework | |
| 3 | - * Copyright (C) 2010 SERPRO | |
| 4 | - * ---------------------------------------------------------------------------- | |
| 5 | - * This file is part of Demoiselle Framework. | |
| 6 | - * | |
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | - * as published by the Free Software Foundation. | |
| 10 | - * | |
| 11 | - * This program is distributed in the hope that it will be useful, | |
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | - * GNU General Public License for more details. | |
| 15 | - * | |
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | - * ---------------------------------------------------------------------------- | |
| 21 | - * Este arquivo é parte do Framework Demoiselle. | |
| 22 | - * | |
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | - * do Software Livre (FSF). | |
| 26 | - * | |
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | - * para maiores detalhes. | |
| 31 | - * | |
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | - */ | |
| 37 | -package br.gov.frameworkdemoiselle.jmx.internal; | |
| 38 | - | |
| 39 | - | |
| 40 | - | |
| 41 | -/** | |
| 42 | - * MBean interface responsible for sending MBean notifications to remote clients. | |
| 43 | - * | |
| 44 | - * @author serpro | |
| 45 | - * | |
| 46 | - */ | |
| 47 | -interface NotificationBroadcasterMBean { | |
| 48 | -} |
impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/jmx/internal/NotificationEventListener.java
| ... | ... | @@ -1,80 +0,0 @@ |
| 1 | -/* | |
| 2 | - * Demoiselle Framework | |
| 3 | - * Copyright (C) 2010 SERPRO | |
| 4 | - * ---------------------------------------------------------------------------- | |
| 5 | - * This file is part of Demoiselle Framework. | |
| 6 | - * | |
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | |
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | |
| 9 | - * as published by the Free Software Foundation. | |
| 10 | - * | |
| 11 | - * This program is distributed in the hope that it will be useful, | |
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | - * GNU General Public License for more details. | |
| 15 | - * | |
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | |
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | |
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | |
| 20 | - * ---------------------------------------------------------------------------- | |
| 21 | - * Este arquivo é parte do Framework Demoiselle. | |
| 22 | - * | |
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | |
| 25 | - * do Software Livre (FSF). | |
| 26 | - * | |
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | |
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | |
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | |
| 30 | - * para maiores detalhes. | |
| 31 | - * | |
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | |
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | |
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 36 | - */ | |
| 37 | -package br.gov.frameworkdemoiselle.jmx.internal; | |
| 38 | - | |
| 39 | -import java.io.Serializable; | |
| 40 | - | |
| 41 | -import javax.enterprise.context.ApplicationScoped; | |
| 42 | -import javax.enterprise.event.Observes; | |
| 43 | - | |
| 44 | -import br.gov.frameworkdemoiselle.internal.management.qualifier.AttributeChange; | |
| 45 | -import br.gov.frameworkdemoiselle.internal.management.qualifier.Generic; | |
| 46 | -import br.gov.frameworkdemoiselle.jmx.configuration.JMXConfig; | |
| 47 | -import br.gov.frameworkdemoiselle.management.ManagementNotificationEvent; | |
| 48 | -import br.gov.frameworkdemoiselle.management.NotificationManager; | |
| 49 | - | |
| 50 | -/** | |
| 51 | - * Listens to {@link NotificationManager} notification events and proxies them | |
| 52 | - * to a {@link NotificationBroadcaster} MBean. This MBean will send the notification to | |
| 53 | - * any JMX clients connected and listening. | |
| 54 | - * | |
| 55 | - * @author serpro | |
| 56 | - * | |
| 57 | - */ | |
| 58 | -@ApplicationScoped | |
| 59 | -@SuppressWarnings("serial") | |
| 60 | -public class NotificationEventListener implements Serializable { | |
| 61 | - | |
| 62 | - private NotificationBroadcaster notificationBroadcaster; | |
| 63 | - | |
| 64 | - public void sendNotification( @Observes @Generic ManagementNotificationEvent event , JMXConfig config ) { | |
| 65 | - createNotificationBroadcaster().sendNotification(event,config); | |
| 66 | - } | |
| 67 | - | |
| 68 | - public void sendAttributeChangedMessage( @Observes @AttributeChange ManagementNotificationEvent event , JMXConfig config ) { | |
| 69 | - createNotificationBroadcaster().sendAttributeChangedMessage(event, config); | |
| 70 | - } | |
| 71 | - | |
| 72 | - public NotificationBroadcaster createNotificationBroadcaster(){ | |
| 73 | - if (notificationBroadcaster==null){ | |
| 74 | - notificationBroadcaster = new NotificationBroadcaster(); | |
| 75 | - } | |
| 76 | - | |
| 77 | - return notificationBroadcaster; | |
| 78 | - } | |
| 79 | - | |
| 80 | -} |
impl/extension/jmx/src/test/java/management/tests/basic/DynamicMBeanProxyTest.java
| ... | ... | @@ -55,7 +55,7 @@ import org.junit.BeforeClass; |
| 55 | 55 | import org.junit.Test; |
| 56 | 56 | import org.junit.runner.RunWith; |
| 57 | 57 | |
| 58 | -import br.gov.frameworkdemoiselle.jmx.internal.MBeanManager; | |
| 58 | +import br.gov.frameworkdemoiselle.internal.MBeanManager; | |
| 59 | 59 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; |
| 60 | 60 | import br.gov.frameworkdemoiselle.lifecycle.AfterStartupProccess; |
| 61 | 61 | import br.gov.frameworkdemoiselle.util.Beans; | ... | ... |
impl/extension/jmx/src/test/java/management/tests/notification/NotificationBroadcasterTest.java
| ... | ... | @@ -57,8 +57,8 @@ import org.junit.BeforeClass; |
| 57 | 57 | import org.junit.Test; |
| 58 | 58 | import org.junit.runner.RunWith; |
| 59 | 59 | |
| 60 | -import br.gov.frameworkdemoiselle.jmx.configuration.JMXConfig; | |
| 61 | -import br.gov.frameworkdemoiselle.jmx.internal.MBeanManager; | |
| 60 | +import br.gov.frameworkdemoiselle.configuration.JMXConfig; | |
| 61 | +import br.gov.frameworkdemoiselle.internal.MBeanManager; | |
| 62 | 62 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; |
| 63 | 63 | import br.gov.frameworkdemoiselle.lifecycle.AfterStartupProccess; |
| 64 | 64 | import br.gov.frameworkdemoiselle.management.AttributeChangeNotification; | ... | ... |